Skip to content

screengrab failure on API 33 #21140

@tenzap

Description

@tenzap

New Issue Checklist

Issue Description

Screengrab 2.1.1 is crashing most times on API 33. This didn't happen with API 29, neither with API 30. Problems starts on API 31.

It also crashes when simply running the "screenshot test" inside Android Studio (ie. the method that is effectively run by fastlane to take the screenshots).

Sometimes it fails/crashes on the 1st locale (english), sometimes on the 2nd.

Command executed
bundle exec fastlane screenshots
Complete output when running fastlane, including the stack trace and command used

Full log (because it exceeds issue max char count) : log.gz

 
[12:15:14]: Uninstalling app APK
[12:15:14]: �[36m$ /home/user/Android/Sdk/platform-tools/adb -s emulator-5554 uninstall com.exifthumbnailadder.app.debug�[0m
[12:15:15]: ▸ �[35mSuccess�[0m
[12:15:15]: Uninstalling tests APK
[12:15:15]: �[36m$ /home/user/Android/Sdk/platform-tools/adb -s emulator-5554 uninstall com.exifthumbnailadder.app.debug.test�[0m
[12:15:15]: ▸ �[35mSuccess�[0m
[12:15:15]: Installing app APK
[12:15:15]: �[36m$ /home/user/Android/Sdk/platform-tools/adb -s emulator-5554 install -t -r app/build/outputs/apk/standard/debug/exifthumbnailadder-standard-debug.apk�[0m
[12:15:15]: ▸ �[35mPerforming Streamed Install�[0m
[12:15:21]: ▸ �[35mSuccess�[0m
[12:15:21]: Installing tests APK
[12:15:21]: �[36m$ /home/user/Android/Sdk/platform-tools/adb -s emulator-5554 install -t -r app/build/outputs/apk/androidTest/standard/debug/exifthumbnailadder-standard-debug-androidTest.apk�[0m
[12:15:21]: ▸ �[35mPerforming Streamed Install�[0m
[12:15:22]: ▸ �[35mSuccess�[0m
[12:15:22]: Granting the permission necessary to change locales on the device
[12:15:22]: �[36m$ /home/user/Android/Sdk/platform-tools/adb -s emulator-5554 shell pm grant com.exifthumbnailadder.app.debug android.permission.CHANGE_CONFIGURATION�[0m
[12:15:22]: Granting the permissions necessary to access device external storage
[12:15:22]: �[36m$ /home/user/Android/Sdk/platform-tools/adb -s emulator-5554 shell pm grant com.exifthumbnailadder.app.debug android.permission.WRITE_EXTERNAL_STORAGE�[0m
[12:15:23]: ▸ �[35mException occurred while executing 'grant':�[0m
[12:15:23]: ▸ �[35mjava.lang.SecurityException: Package com.exifthumbnailadder.app.debug has not requested permission android.permission.WRITE_EXTERNAL_STORAGE�[0m
[12:15:23]: ▸ �[35m	at com.android.server.pm.permission.PermissionManagerServiceImpl.grantRuntimePermissionInternal(PermissionManagerServiceImpl.java:1404)�[0m
[12:15:23]: ▸ �[35m	at com.android.server.pm.permission.PermissionManagerServiceImpl.grantRuntimePermission(PermissionManagerServiceImpl.java:1319)�[0m
[12:15:23]: ▸ �[35m	at com.android.server.pm.permission.PermissionManagerService.grantRuntimePermission(PermissionManagerService.java:547)�[0m
[12:15:23]: ▸ �[35m	at android.permission.PermissionManager.grantRuntimePermission(PermissionManager.java:597)�[0m
[12:15:23]: ▸ �[35m	at com.android.server.pm.PackageManagerShellCommand.runGrantRevokePermission(PackageManagerShellCommand.java:2546)�[0m
[12:15:23]: ▸ �[35m	at com.android.server.pm.PackageManagerShellCommand.onCommand(PackageManagerShellCommand.java:292)�[0m
[12:15:23]: ▸ �[35m	at com.android.modules.utils.BasicShellCommandHandler.exec(BasicShellCommandHandler.java:97)�[0m
[12:15:23]: ▸ �[35m	at android.os.ShellCommand.exec(ShellCommand.java:38)�[0m
[12:15:23]: ▸ �[35m	at com.android.server.pm.PackageManagerService$IPackageManagerImpl.onShellCommand(PackageManagerService.java:5964)�[0m
[12:15:23]: ▸ �[35m	at android.os.Binder.shellCommand(Binder.java:1049)�[0m
[12:15:23]: ▸ �[35m	at android.os.Binder.onTransact(Binder.java:877)�[0m
[12:15:23]: ▸ �[35m	at android.content.pm.IPackageManager$Stub.onTransact(IPackageManager.java:4313)�[0m
[12:15:23]: ▸ �[35m	at com.android.server.pm.PackageManagerService$IPackageManagerImpl.onTransact(PackageManagerService.java:5948)�[0m
[12:15:23]: ▸ �[35m	at android.os.Binder.execTransactInternal(Binder.java:1285)�[0m
[12:15:23]: ▸ �[35m	at android.os.Binder.execTransact(Binder.java:1244)�[0m

Exception occurred while executing 'grant':
java.lang.SecurityException: Package com.exifthumbnailadder.app.debug has not requested permission android.permission.WRITE_EXTERNAL_STORAGE
at com.android.server.pm.permission.PermissionManagerServiceImpl.grantRuntimePermissionInternal(PermissionManagerServiceImpl.java:1404)
at com.android.server.pm.permission.PermissionManagerServiceImpl.grantRuntimePermission(PermissionManagerServiceImpl.java:1319)
at com.android.server.pm.permission.PermissionManagerService.grantRuntimePermission(PermissionManagerService.java:547)
at android.permission.PermissionManager.grantRuntimePermission(PermissionManager.java:597)
at com.android.server.pm.PackageManagerShellCommand.runGrantRevokePermission(PackageManagerShellCommand.java:2546)
at com.android.server.pm.PackageManagerShellCommand.onCommand(PackageManagerShellCommand.java:292)
at com.android.modules.utils.BasicShellCommandHandler.exec(BasicShellCommandHandler.java:97)
at android.os.ShellCommand.exec(ShellCommand.java:38)
at com.android.server.pm.PackageManagerService$IPackageManagerImpl.onShellCommand(PackageManagerService.java:5964)
at android.os.Binder.shellCommand(Binder.java:1049)
at android.os.Binder.onTransact(Binder.java:877)
at android.content.pm.IPackageManager$Stub.onTransact(IPackageManager.java:4313)
at com.android.server.pm.PackageManagerService$IPackageManagerImpl.onTransact(PackageManagerService.java:5948)
at android.os.Binder.execTransactInternal(Binder.java:1285)
at android.os.Binder.execTransact(Binder.java:1244)
[12:15:23]: �[31mExit status: 255�[0m
[12:15:23]: �[36m$ /home/user/Android/Sdk/platform-tools/adb -s emulator-5554 shell pm grant com.exifthumbnailadder.app.debug android.permission.READ_EXTERNAL_STORAGE�[0m
[12:15:23]: ▸ �[35mException occurred while executing 'grant':�[0m
[12:15:23]: ▸ �[35mjava.lang.SecurityException: Package com.exifthumbnailadder.app.debug has not requested permission android.permission.READ_EXTERNAL_STORAGE�[0m
[12:15:23]: ▸ �[35m at com.android.server.pm.permission.PermissionManagerServiceImpl.grantRuntimePermissionInternal(PermissionManagerServiceImpl.java:1404)�[0m
[12:15:23]: ▸ �[35m at com.android.server.pm.permission.PermissionManagerServiceImpl.grantRuntimePermission(PermissionManagerServiceImpl.java:1319)�[0m
[12:15:23]: ▸ �[35m at com.android.server.pm.permission.PermissionManagerService.grantRuntimePermission(PermissionManagerService.java:547)�[0m
[12:15:23]: ▸ �[35m at android.permission.PermissionManager.grantRuntimePermission(PermissionManager.java:597)�[0m
[12:15:23]: ▸ �[35m at com.android.server.pm.PackageManagerShellCommand.runGrantRevokePermission(PackageManagerShellCommand.java:2546)�[0m
[12:15:23]: ▸ �[35m at com.android.server.pm.PackageManagerShellCommand.onCommand(PackageManagerShellCommand.java:292)�[0m
[12:15:23]: ▸ �[35m at com.android.modules.utils.BasicShellCommandHandler.exec(BasicShellCommandHandler.java:97)�[0m
[12:15:23]: ▸ �[35m at android.os.ShellCommand.exec(ShellCommand.java:38)�[0m
[12:15:23]: ▸ �[35m at com.android.server.pm.PackageManagerService$IPackageManagerImpl.onShellCommand(PackageManagerService.java:5964)�[0m
[12:15:23]: ▸ �[35m at android.os.Binder.shellCommand(Binder.java:1049)�[0m
[12:15:23]: ▸ �[35m at android.os.Binder.onTransact(Binder.java:877)�[0m
[12:15:23]: ▸ �[35m at android.content.pm.IPackageManager$Stub.onTransact(IPackageManager.java:4313)�[0m
[12:15:23]: ▸ �[35m at com.android.server.pm.PackageManagerService$IPackageManagerImpl.onTransact(PackageManagerService.java:5948)�[0m
[12:15:23]: ▸ �[35m at android.os.Binder.execTransactInternal(Binder.java:1285)�[0m
[12:15:23]: ▸ �[35m at android.os.Binder.execTransact(Binder.java:1244)�[0m

Exception occurred while executing 'grant':
java.lang.SecurityException: Package com.exifthumbnailadder.app.debug has not requested permission android.permission.READ_EXTERNAL_STORAGE
at com.android.server.pm.permission.PermissionManagerServiceImpl.grantRuntimePermissionInternal(PermissionManagerServiceImpl.java:1404)
at com.android.server.pm.permission.PermissionManagerServiceImpl.grantRuntimePermission(PermissionManagerServiceImpl.java:1319)
at com.android.server.pm.permission.PermissionManagerService.grantRuntimePermission(PermissionManagerService.java:547)
at android.permission.PermissionManager.grantRuntimePermission(PermissionManager.java:597)
at com.android.server.pm.PackageManagerShellCommand.runGrantRevokePermission(PackageManagerShellCommand.java:2546)
at com.android.server.pm.PackageManagerShellCommand.onCommand(PackageManagerShellCommand.java:292)
at com.android.modules.utils.BasicShellCommandHandler.exec(BasicShellCommandHandler.java:97)
at android.os.ShellCommand.exec(ShellCommand.java:38)
at com.android.server.pm.PackageManagerService$IPackageManagerImpl.onShellCommand(PackageManagerService.java:5964)
at android.os.Binder.shellCommand(Binder.java:1049)
at android.os.Binder.onTransact(Binder.java:877)
at android.content.pm.IPackageManager$Stub.onTransact(IPackageManager.java:4313)
at com.android.server.pm.PackageManagerService$IPackageManagerImpl.onTransact(PackageManagerService.java:5948)
at android.os.Binder.execTransactInternal(Binder.java:1285)
at android.os.Binder.execTransact(Binder.java:1244)
[12:15:23]: �[31mExit status: 255�[0m
[12:15:23]: Running tests for locale: de-DE
[12:15:23]: �[36m$ /home/user/Android/Sdk/platform-tools/adb -s emulator-5554 shell am instrument --no-window-animation -w
-e testLocale de-DE
--no-hidden-api-checks
-e appendTimestamp false
-e class com.exifthumbnailadder.app.TakeScreenshots
com.exifthumbnailadder.app.debug.test/androidx.test.runner.AndroidJUnitRunner�[0m
[12:15:51]: ▸ �[35mcom.exifthumbnailadder.app.TakeScreenshots:�[0m
[12:15:51]: ▸ �[35mError in testTakeScreenshot(com.exifthumbnailadder.app.TakeScreenshots):�[0m
[12:15:51]: ▸ �[35mjava.lang.RuntimeException: Unable to capture screenshot.�[0m
[12:15:51]: ▸ �[35m at tools.fastlane.screengrab.FileWritingScreenshotCallback.screenshotCaptured(FileWritingScreenshotCallback.java:56)�[0m
[12:15:51]: ▸ �[35m at tools.fastlane.screengrab.UiAutomatorScreenshotStrategy.takeScreenshot(UiAutomatorScreenshotStrategy.java:34)�[0m
[12:15:51]: ▸ �[35m at tools.fastlane.screengrab.Screengrab.screenshot(Screengrab.java:121)�[0m
[12:15:51]: ▸ �[35m at tools.fastlane.screengrab.Screengrab.screenshot(Screengrab.java:103)�[0m
[12:15:51]: ▸ �[35m at tools.fastlane.screengrab.Screengrab.screenshot(Screengrab.java:87)�[0m
[12:15:51]: ▸ �[35m at com.exifthumbnailadder.app.TakeScreenshots.testTakeScreenshot(TakeScreenshots.java:169)�[0m
[12:15:51]: ▸ �[35m ... 39 trimmed�[0m
[12:15:51]: ▸ �[35mCaused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.graphics.Bitmap.recycle()' on a null object reference�[0m
[12:15:51]: ▸ �[35m at tools.fastlane.screengrab.FileWritingScreenshotCallback.screenshotCaptured(FileWritingScreenshotCallback.java:48)�[0m
[12:15:51]: ▸ �[35m ... 45 more�[0m
[12:15:53]: ▸ �[35m.�[0m
[12:15:53]: ▸ �[35mTime: 12.774�[0m
[12:15:53]: ▸ �[35mThere was 1 failure:�[0m
[12:15:53]: ▸ �[35m1) testTakeScreenshot(com.exifthumbnailadder.app.TakeScreenshots)�[0m
[12:15:53]: ▸ �[35mjava.lang.RuntimeException: Unable to capture screenshot.�[0m
[12:15:53]: ▸ �[35m at tools.fastlane.screengrab.FileWritingScreenshotCallback.screenshotCaptured(FileWritingScreenshotCallback.java:56)�[0m
[12:15:53]: ▸ �[35m at tools.fastlane.screengrab.UiAutomatorScreenshotStrategy.takeScreenshot(UiAutomatorScreenshotStrategy.java:34)�[0m
[12:15:53]: ▸ �[35m at tools.fastlane.screengrab.Screengrab.screenshot(Screengrab.java:121)�[0m
[12:15:53]: ▸ �[35m at tools.fastlane.screengrab.Screengrab.screenshot(Screengrab.java:103)�[0m
[12:15:53]: ▸ �[35m at tools.fastlane.screengrab.Screengrab.screenshot(Screengrab.java:87)�[0m
[12:15:53]: ▸ �[35m at com.exifthumbnailadder.app.TakeScreenshots.testTakeScreenshot(TakeScreenshots.java:169)�[0m
[12:15:53]: ▸ �[35m ... 39 trimmed�[0m
[12:15:53]: ▸ �[35mCaused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.graphics.Bitmap.recycle()' on a null object reference�[0m
[12:15:53]: ▸ �[35m at tools.fastlane.screengrab.FileWritingScreenshotCallback.screenshotCaptured(FileWritingScreenshotCallback.java:48)�[0m
[12:15:53]: ▸ �[35m ... 45 more�[0m
[12:15:53]: ▸ �[35mFAILURES!!!�[0m
[12:15:53]: ▸ �[35mTests run: 2, Failures: 1�[0m
+-------------------------------------+----------------------------------------------------------------+
| �[33mLane Context�[0m |
+-------------------------------------+----------------------------------------------------------------+
| DEFAULT_PLATFORM | android |
| PLATFORM_NAME | android |
| LANE_NAME | android screenshots |
| GRADLE_BUILD_TYPE | StandardDebugAndroidTest |
| GRADLE_FLAVOR | Standard |
| GRADLE_ALL_APK_OUTPUT_PATHS | ["/path_to_repo/exif-thumbnail-adder/app/build/outp |
| | uts/apk/standard/debug/exifthumbnailadder-standard-debug.apk" |
| | , |
| | "/path_to_repo/exif-thumbnail-adder/app/build/outpu |
| | ts/apk/androidTest/standard/debug/exifthumbnailadder-standard |
| | -debug-androidTest.apk"] |
| GRADLE_ALL_AAB_OUTPUT_PATHS | [] |
| GRADLE_ALL_OUTPUT_JSON_OUTPUT_PATHS | ["/path_to_repo/exif-thumbnail-adder/app/build/outp |
| | uts/apk/standard/debug/output-metadata.json", |
| | "/path_to_repo/exif-thumbnail-adder/app/build/outpu |
| | ts/apk/androidTest/standard/debug/output-metadata.json"] |
| GRADLE_ALL_MAPPING_TXT_OUTPUT_PATHS | [] |
| GRADLE_APK_OUTPUT_PATH | /path_to_repo/exif-thumbnail-adder/app/build/output |
| | s/apk/androidTest/standard/debug/exifthumbnailadder-standard- |
| | debug-androidTest.apk |
| GRADLE_OUTPUT_JSON_OUTPUT_PATH | /path_to_repo/exif-thumbnail-adder/app/build/output |
| | s/apk/androidTest/standard/debug/output-metadata.json |
+-------------------------------------+----------------------------------------------------------------+
[12:15:53]: �[31mTests failed for locale de-DE on device emulator-5554�[0m

+------+-----------------------------------------+-------------+
| �[32mfastlane summary�[0m |
+------+-----------------------------------------+-------------+
| Step | Action | Time (in s) |
+------+-----------------------------------------+-------------+
| 1 | opt_out_usage | 0 |
| 2 | default_platform | 0 |
| 3 | Switch to android build_for_screengrab | 0 |
| | lane | |
| 4 | assembleStandardDebug | 25 |
| 5 | assembleStandardDebugAndroidTest | 2 |
| 6 | Switch to android | 0 |
| | prepare_device_for_tests lane | |
| 7 | Switch to android disable_animation | 0 |
| | lane | |
| 8 | adb | 0 |
| 9 | adb | 0 |
| 10 | adb | 0 |
| 11 | adb | 0 |
| 12 | adb | 0 |
| 13 | adb | 1 |
| 14 | adb | 0 |
| 15 | adb | 1 |
| 16 | adb | 1 |
| 💥 | �[31mcapture_android_screenshots�[0m | 107 |
+------+-----------------------------------------+-------------+

[12:15:53]: �[31mfastlane finished with errors�[0m
�[31m
[!] Tests failed for locale de-DE on device emulator-5554�[0m

Environment

🚫 fastlane environment 🚫

Stack

Key Value
OS debian_based 11.6
Ruby 2.7.4
Bundler? true
Git git version 2.30.2
Installation Source /****/exif-thumbnail-adder/0_personal/vendor/bundle/ruby/2.7.0/bin/fastlane
Host Debian GNU/Linux 11 debian_based 11.6 (5.10.0-20-amd64)
Ruby Lib Dir /usr/lib
OpenSSL Version OpenSSL 1.1.1k 25 Mar 2021
Is contained false
Is homebrew false
Is installed via Fabric.app false

System Locale

Variable Value
LANG fr_FR.UTF-8
LC_ALL
LANGUAGE fr:en_US 🚫

fastlane files:

`./fastlane/Fastfile`
# This file contains the fastlane.tools configuration
# You can find the documentation at https://docs.fastlane.tools
#
# For a list of all available actions, check out
#
#     https://docs.fastlane.tools/actions
#
# For a list of all available plugins, check out
#
#     https://docs.fastlane.tools/plugins/available-plugins
#

opt_out_usage

# Uncomment the line if you want fastlane to automatically update itself
# update_fastlane

default_platform(:android)

platform :android do
  desc "Runs all the tests"
  lane :test do
    gradle(task: "test")
  end

  desc "Build all the tests without running them"
  lane :build_test do
    gradle(
      tasks: [
        "compileStandardDebugUnitTestSources",
        "compileStandardReleaseUnitTestSources",
        "compileDebugUnitTestSources",
        "compileReleaseUnitTestSources",
        "bundleLibResDebug",
        "bundleLibResRelease",
        "bundleLibRuntimeToJarDebug",
        "bundleLibRuntimeToJarRelease",
              ],
    )
  end

  desc "Build all the instrumented tests without running them"
  lane :build_androidTest do
    gradle(
      task: "assembleAndroidTest",
    )
  end

  desc "Build Release APK & AAB"
  lane :build_release do
    gradle(
      tasks: ["clean", "assembleStandardRelease", "bundleStandardRelease"]
    )
  end

  desc "Submit a new Beta Build to Crashlytics Beta"
  lane :beta do
    gradle(task: "clean assembleRelease bundleRelease")
    crashlytics
  
    # sh "your_script.sh"
    # You can also use other beta testing services here
  end

  desc "Deploy a new version to the Google Play"
  lane :deploy do
    postpare_metadata_for_googleplay
    prepare_metadata_for_googleplay
    version_code = get_version_code
    version_name = get_version_name
    upload_to_play_store(
        aab: 'app/build/outputs/bundle/standardRelease/exifthumbnailadder-' + version_name + '-standard-release.aab',
        changes_not_sent_for_review: true,
        skip_upload_apk: true,
        skip_upload_changelogs: false,
        #version_code: version_code,
        skip_upload_metadata: false,
        skip_upload_images: false,
        skip_upload_screenshots: false,
    )
    postpare_metadata_for_googleplay
  end

  desc "get version_code"
  lane :get_version_code do
    lines = File.open("../version_last_tag.txt")
    lines.first.split("+")[1].strip
  end

  desc "get version_name"
  lane :get_version_name do
    lines = File.open("../version_last_tag.txt")
    tmp = lines.first.split("+")[0].strip
    tmp.split(" ")[1].strip
  end

  desc "Prepare matadata so that it is not rejected by google play"
  lane :prepare_metadata_for_googleplay do
    sh "../scripts/prepare_metadata_for_googleplay.sh"
  end

  desc "Postpare matadata - This restores to the state before the 'prepare'"
  lane :postpare_metadata_for_googleplay do
    sh "../scripts/post_metadata_for_googleplay.sh"
  end

  desc "Build debug and test APK for screenshots"
  lane :build_for_screengrab do
    #gradle(
    #  task: 'clean'
    #)
    build_android_app(
      task: 'assemble',
      flavor: 'Standard',
      build_type: 'Debug',
      properties: {
        "noVersionInArchivesBaseName" => "true",
      }
    )
    build_android_app(
      task: 'assemble',
      build_type: 'StandardDebugAndroidTest',
      properties: {
        "noVersionInArchivesBaseName" => "true",
      }
    )
  end

  desc "Do screenshots"
  lane :screenshots do
    build_for_screengrab
    prepare_device_for_tests
    capture_android_screenshots(
      use_timestamp_suffix: false,
      clear_previous_screenshots: true,
      locales: ["en-US", "de-DE", "fr-FR", "pt-BR", "tr-TR", "vi", "zh-CN"],
      ending_locale: "en-US",
      reinstall_app: true,
      app_package_name: "com.exifthumbnailadder.app.debug",
      tests_package_name: "com.exifthumbnailadder.app.debug.test",
      use_tests_in_classes: "com.exifthumbnailadder.app.TakeScreenshots",
      app_apk_path: "app/build/outputs/apk/standard/debug/exifthumbnailadder-standard-debug.apk",
      tests_apk_path: "app/build/outputs/apk/androidTest/standard/debug/exifthumbnailadder-standard-debug-androidTest.apk",
      #specific_device: "emulator-5554"
    )
  end

  desc "disable animations on device"
  lane :disable_animation do
    adb(
      #serial: 'emulator-5554',
      command: 'shell settings put global window_animation_scale 0.0'
    )
    adb(
      #serial: 'emulator-5554',
      command: 'shell settings put global transition_animation_scale 0.0'
    )
    adb(
      #serial: 'emulator-5554',
      command: 'shell settings put global animator_duration_scale 0.0'
    )
  end

  desc "Prepare device for tests"
  lane :prepare_device_for_tests do
    disable_animation
    adb(
      #serial: 'emulator-5554',
      command: 'shell rm -fr /storage/emulated/0/DCIM/test_pics'
    )
    adb(
      #serial: 'emulator-5554',
      command: 'shell mkdir -p /storage/emulated/0/DCIM/test_pics'
    )
    adb(
      #serial: 'emulator-5554',
      command: 'push tests/data/exif-samples/jpg/* /storage/emulated/0/DCIM/test_pics'
    )
    adb(
      #serial: 'emulator-5554',
      command: 'push tests/data/empty_file tests/data/noexif.jpg tests/data/text_file.txt tests/data/text_with_jpg_extension.jpg /storage/emulated/0/DCIM/test_pics'
    )
    # Uninstall the app so as to reset the MANAGE_EXTERNAL_STORAGE permission.
    # I haven't found another way to remove this permission once it's granted
    adb(
      command: 'shell pm uninstall com.exifthumbnailadder.app.debug || echo'
    )
    # Uninstall the previously installed test package. On github actions, don't removing it may give
    # Failed to install APK(s): exifthumbnailadder-*-standard-debug-androidTest.apk
    # INSTALL_FAILED_UPDATE_INCOMPATIBLE: Package com.exifthumbnailadder.app.debug.test signatures do not match the previously installed version; ignoring!
    adb(
      command: 'shell pm uninstall com.exifthumbnailadder.app.debug.test || echo'
    )
  end

  desc "Get test output from device"
  lane :get_output_of_tests do

    require 'fileutils'
    FileUtils.mkdir_p('../tests/output')

    adb(
      command: 'shell mkdir -p /data/local/tmp/screenrecords/'
    )
    adb(
      command: 'shell mkdir -p /data/local/tmp/test_output/'
    )
    adb(
      command: 'shell mkdir -p /storage/emulated/0/DCIM/test_pics/'
    )

    adb(
      command: 'pull -a /data/local/tmp/screenrecords/ tests/output/',
    )
    adb(
      command: 'pull -a /data/local/tmp/test_output/ tests/output/',
    )
    adb(
      command: 'pull -a /storage/emulated/0/DCIM/test_pics/ tests/output/',
    )
  end

  desc "Run all the instrumented tests except screenshots"
  lane :connectedCheck do |options|
    adb(
      # Get rid of `Viewing full screen, To exit, swipe down from the top` message
      # https://stackoverflow.com/a/62475026
      command: 'shell settings put secure immersive_mode_confirmations confirmed',
    )

    if ENV["CI"] == "true" && ENV["API_LEVEL"].to_i >= 30
      adb(
        # Turn off WiFi (to avoid using system resources for updates during tests)
        command: 'shell cmd -w wifi set-wifi-enabled disabled',
      )
    end

    if ENV["DELAY"]
      # Pause (in seconds) to let the system image in the emulator finish booting.
      sleep ENV["DELAY"].to_i
    end

    prepare_device_for_tests

    gradle(
      task: options[:task],
      properties: {
        "excludeScreenshots" => "NULL",
      }
    )
  end

  # To run only for a single flavor, run:
  # bundle exec fastlane connectedCheck_with_screenrecord task:connectedStandardDebugAndroidTest
  desc "Run all the instrumented tests except screenshots and save screenrecords"
  lane :connectedCheck_with_screenrecord do |options|

    adb(
      command: 'shell rm -rf /data/local/tmp/screenrecords/',
    )
    adb(
      command: 'shell rm -rf /data/local/tmp/test_output/',
    )

    if options[:task]
      begin
        connectedCheck(task: options[:task])
      rescue => ex
        test_failed = true
        UI.error(ex)
      end
    else
      # We split by flavor because with connectedCheck, as soon a one flavor has a failing test,
      # then the subsequent flavors are skipped.
      begin
        connectedCheck(task: "connectedStandardDebugAndroidTest")
      rescue => ex
        test_failed = true
        UI.error(ex)
      end
    end

    get_output_of_tests

    if test_failed == true
      UI.shell_error! "connectedCheck lane failed."
    end
  end
end
`./fastlane/Appfile`
json_key_file("0_personal/play-store-credentials.json") # Path to the json secret file - Follow https://docs.fastlane.tools/actions/supply/#setup to get one
package_name("com.exifthumbnailadder.app")

fastlane gems

Gem Version Update-Status
fastlane 2.212.1 ✅ Up-To-Date

Loaded fastlane plugins:

No plugins Loaded

Loaded gems
Gem Version
did_you_mean 1.4.0
rake 13.0.6
rexml 3.2.5
CFPropertyList 3.0.6
public_suffix 5.0.1
addressable 2.8.1
artifactory 3.0.15
atomos 0.1.3
aws-eventstream 1.2.0
aws-partitions 1.719.0
aws-sigv4 1.5.2
jmespath 1.6.2
aws-sdk-core 3.170.0
aws-sdk-kms 1.63.0
aws-sdk-s3 1.119.1
babosa 1.0.4
bundler 2.2.5
claide 1.1.0
colored 1.2
colored2 3.1.2
highline 2.0.3
commander 4.6.0
declarative 0.0.20
digest-crc 0.6.4
unf_ext 0.0.8.2
unf 0.1.4
domain_name 0.5.20190701
dotenv 2.8.1
emoji_regex 3.2.3
excon 0.99.0
faraday-em_http 1.0.0
faraday-em_synchrony 1.0.0
faraday-excon 1.1.0
faraday-httpclient 1.0.1
multipart-post 2.0.0
faraday-multipart 1.0.4
faraday-net_http 1.0.1
faraday-net_http_persistent 1.2.0
faraday-patron 1.0.0
faraday-rack 1.0.0
faraday-retry 1.0.3
ruby2_keywords 0.0.5
faraday 1.10.3
http-cookie 1.0.5
faraday-cookie_jar 0.0.7
faraday_middleware 1.2.0
fastimage 2.2.6
gh_inspector 1.1.3
jwt 2.7.0
memoist 0.16.2
multi_json 1.15.0
os 1.1.4
signet 0.17.0
googleauth 1.3.0
httpclient 2.8.3
mini_mime 1.1.2
trailblazer-option 0.1.2
uber 0.1.0
representable 3.2.0
retriable 3.1.2
webrick 1.8.1
google-apis-core 0.11.0
google-apis-androidpublisher_v3 0.34.0
google-apis-playcustomapp_v1 0.13.0
google-apis-iamcredentials_v1 0.17.0
google-apis-storage_v1 0.19.0
google-cloud-env 1.6.0
google-cloud-errors 1.3.1
google-cloud-core 1.6.0
google-cloud-storage 1.44.0
json 2.6.3
mini_magick 4.12.0
naturally 2.2.1
optparse 0.1.1
plist 3.7.0
rubyzip 2.3.2
security 0.1.3
simctl 1.6.10
terminal-notifier 2.0.0
unicode-display_width 1.8.0
terminal-table 1.8.0
tty-screen 0.8.1
tty-cursor 0.7.1
tty-spinner 0.9.3
word_wrap 1.0.0
nanaimo 0.3.0
xcodeproj 1.22.0
rouge 2.0.7
xcpretty 0.3.0
xcpretty-travis-formatter 1.0.1

generated on: 2023-03-15

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions