fastlane: Screengrab: `reinstall_app true` causes failure on Android >= API 25 without app installed

New Issue Checklist

Issue Description

  • reinstall_app true in Screengrabfile.
  • Create fresh Android API 25 or 26 emulator (app is not installed).
  • screengrab will fail due to IllegalArgumentException for the unknown package.

Running screengrab with emulators running API <25 works fine, but 25 and 26 fail.

The adb uninstall behavior has changed:

API <=24:

adb uninstall package.doesnt.exist

Exception occurred while dumping:
java.lang.IllegalArgumentException: Unknown package: package.doesnt.exist
	at com.android.server.pm.Settings.isOrphaned(Settings.java:4134)
	at com.android.server.pm.PackageManagerService.isOrphaned(PackageManagerService.java:18105)
	at com.android.server.pm.PackageManagerService.deletePackage(PackageManagerService.java:15522)
	at com.android.server.pm.PackageInstallerService.uninstall(PackageInstallerService.java:888)
	at com.android.server.pm.PackageManagerShellCommand.runUninstall(PackageManagerShellCommand.java:792)
	at com.android.server.pm.PackageManagerShellCommand.onCommand(PackageManagerShellCommand.java:118)
	at android.os.ShellCommand.exec(ShellCommand.java:94)
	at com.android.server.pm.PackageManagerService.onShellCommand(PackageManagerService.java:18363)
	at android.os.Binder.shellCommand(Binder.java:468)
	at android.os.Binder.onTransact(Binder.java:367)
	at android.content.pm.IPackageManager$Stub.onTransact(IPackageManager.java:2387)
	at com.android.server.pm.PackageManagerService.onTransact(PackageManagerService.java:3031)
	at android.os.Binder.execTransact(Binder.java:565)

API 25/26:

adb uninstall package.doesnt.exist
Failure [DELETE_FAILED_INTERNAL_ERROR]

The IllegalArgumentException and error response is an Android issue, but screengrab needs to handle it. Either first checking if the package is installed, or allowing the command to fail.

Complete output when running fastlane, including the stack trace and command used

You can use: --capture_output as the last commandline argument to get that collected for you

[12:38:33]: Validating app APK
[12:38:33]: $ /Users/user/Library/Android/sdk/build-tools/26.0.0/aapt dump permissions app/build/outputs/apk/app-screenshot-debug.apk
[12:38:33]: ▸ package: com.package.screens
[12:38:33]: ▸ uses-permission: name='android.permission.DISABLE_KEYGUARD'
[12:38:33]: ▸ uses-permission: name='android.permission.WAKE_LOCK'
[12:38:33]: ▸ uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE'
[12:38:33]: ▸ uses-permission: name='android.permission.READ_EXTERNAL_STORAGE'
[12:38:33]: ▸ uses-permission: name='android.permission.CHANGE_CONFIGURATION'
[12:38:33]: ▸ uses-permission: name='android.permission.BLUETOOTH_ADMIN'
[12:38:33]: ▸ uses-permission: name='android.permission.INTERNET'
[12:38:33]: ▸ uses-permission: name='android.permission.ACCESS_NETWORK_STATE'
[12:38:33]: ▸ uses-permission: name='android.permission.BLUETOOTH'
[12:38:33]: ▸ uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED'
[12:38:33]: ▸ uses-permission: name='com.google.android.c2dm.permission.RECEIVE'
[12:38:33]: ▸ permission: com.package.screens.permission.C2D_MESSAGE
[12:38:33]: ▸ uses-permission: name='com.package.screens.permission.C2D_MESSAGE'
[12:38:33]: ▸ uses-permission: name='android.permission.ACCESS_COARSE_LOCATION'
[12:38:33]: ▸ uses-permission: name='android.permission.ACCESS_FINE_LOCATION'
[12:38:33]: Uninstalling app APK
[12:38:33]: $ adb -s emulator-5556 uninstall com.package.screens
[12:38:34]: ▸ Exception occurred while executing:
[12:38:34]: ▸ java.lang.IllegalArgumentException: Unknown package: com.package.screens
[12:38:34]: ▸ at com.android.server.pm.Settings.isOrphaned(Settings.java:4400)
[12:38:34]: ▸ at com.android.server.pm.PackageManagerService.isOrphaned(PackageManagerService.java:20603)
[12:38:34]: ▸ at com.android.server.pm.PackageManagerService.deletePackageVersioned(PackageManagerService.java:17759)
[12:38:34]: ▸ at com.android.server.pm.PackageInstallerService.uninstall(PackageInstallerService.java:896)
[12:38:34]: ▸ at com.android.server.pm.PackageManagerShellCommand.runUninstall(PackageManagerShellCommand.java:912)
[12:38:34]: ▸ at com.android.server.pm.PackageManagerShellCommand.onCommand(PackageManagerShellCommand.java:134)
[12:38:34]: ▸ at android.os.ShellCommand.exec(ShellCommand.java:96)
[12:38:34]: ▸ at com.android.server.pm.PackageManagerService.onShellCommand(PackageManagerService.java:20893)
[12:38:34]: ▸ at android.os.Binder.shellCommand(Binder.java:573)
[12:38:34]: ▸ at android.os.Binder.onTransact(Binder.java:473)
[12:38:34]: ▸ at android.content.pm.IPackageManager$Stub.onTransact(IPackageManager.java:2638)
[12:38:34]: ▸ at com.android.server.pm.PackageManagerService.onTransact(PackageManagerService.java:3466)
[12:38:34]: ▸ at android.os.Binder.execTransact(Binder.java:674)

Exception occurred while executing:
java.lang.IllegalArgumentException: Unknown package: com.package.screens
at com.android.server.pm.Settings.isOrphaned(Settings.java:4400)
at com.android.server.pm.PackageManagerService.isOrphaned(PackageManagerService.java:20603)
at com.android.server.pm.PackageManagerService.deletePackageVersioned(PackageManagerService.java:17759)
at com.android.server.pm.PackageInstallerService.uninstall(PackageInstallerService.java:896)
at com.android.server.pm.PackageManagerShellCommand.runUninstall(PackageManagerShellCommand.java:912)
at com.android.server.pm.PackageManagerShellCommand.onCommand(PackageManagerShellCommand.java:134)
at android.os.ShellCommand.exec(ShellCommand.java:96)
at com.android.server.pm.PackageManagerService.onShellCommand(PackageManagerService.java:20893)
at android.os.Binder.shellCommand(Binder.java:573)
at android.os.Binder.onTransact(Binder.java:473)
at android.content.pm.IPackageManager$Stub.onTransact(IPackageManager.java:2638)
at com.android.server.pm.PackageManagerService.onTransact(PackageManagerService.java:3466)
at android.os.Binder.execTransact(Binder.java:674)
[12:38:34]: Exit status: 255

[!] Exit status: 255

  /Library/Ruby/Gems/2.0.0/gems/fastlane-2.47.0/fastlane_core/lib/fastlane_core/ui/interface.rb:143:in `shell_error!'
  /Library/Ruby/Gems/2.0.0/gems/fastlane-2.47.0/fastlane_core/lib/fastlane_core/ui/ui.rb:14:in `method_missing'
  /Library/Ruby/Gems/2.0.0/gems/fastlane-2.47.0/fastlane/lib/fastlane/helper/sh_helper.rb:56:in `sh_control_output'
  /Library/Ruby/Gems/2.0.0/gems/fastlane-2.47.0/fastlane/lib/fastlane/action.rb:98:in `sh'
  /Library/Ruby/Gems/2.0.0/gems/fastlane-plugin-automated_test_emulator_run-1.5.1/lib/fastlane/plugin/automated_test_emulator_run/actions/automated_test_emulator_run_action.rb:178:in `run'
  /Library/Ruby/Gems/2.0.0/gems/fastlane-2.47.0/fastlane/lib/fastlane/runner.rb:252:in `block (2 levels) in execute_action'
  /Library/Ruby/Gems/2.0.0/gems/fastlane-2.47.0/fastlane/lib/fastlane/actions/actions_helper.rb:50:in `execute_action'
  /Library/Ruby/Gems/2.0.0/gems/fastlane-2.47.0/fastlane/lib/fastlane/runner.rb:230:in `block in execute_action'
  /Library/Ruby/Gems/2.0.0/gems/fastlane-2.47.0/fastlane/lib/fastlane/runner.rb:226:in `chdir'
  /Library/Ruby/Gems/2.0.0/gems/fastlane-2.47.0/fastlane/lib/fastlane/runner.rb:226:in `execute_action'
  /Library/Ruby/Gems/2.0.0/gems/fastlane-2.47.0/fastlane/lib/fastlane/runner.rb:148:in `trigger_action_by_name'
  /Library/Ruby/Gems/2.0.0/gems/fastlane-2.47.0/fastlane/lib/fastlane/fast_file.rb:146:in `method_missing'
  Fastfile:47:in `block (2 levels) in parsing_binding'
  /Library/Ruby/Gems/2.0.0/gems/fastlane-2.47.0/fastlane/lib/fastlane/lane.rb:33:in `call'
  /Library/Ruby/Gems/2.0.0/gems/fastlane-2.47.0/fastlane/lib/fastlane/lane.rb:33:in `call'
  /Library/Ruby/Gems/2.0.0/gems/fastlane-2.47.0/fastlane/lib/fastlane/runner.rb:49:in `block in execute'
  /Library/Ruby/Gems/2.0.0/gems/fastlane-2.47.0/fastlane/lib/fastlane/runner.rb:45:in `chdir'
  /Library/Ruby/Gems/2.0.0/gems/fastlane-2.47.0/fastlane/lib/fastlane/runner.rb:45:in `execute'
  /Library/Ruby/Gems/2.0.0/gems/fastlane-2.47.0/fastlane/lib/fastlane/lane_manager.rb:52:in `cruise_lane'
  /Library/Ruby/Gems/2.0.0/gems/fastlane-2.47.0/fastlane/lib/fastlane/command_line_handler.rb:30:in `handle'
  /Library/Ruby/Gems/2.0.0/gems/fastlane-2.47.0/fastlane/lib/fastlane/commands_generator.rb:104:in `block (2 levels) in run'
  /Library/Ruby/Gems/2.0.0/gems/commander-fastlane-4.4.5/lib/commander/command.rb:178:in `call'
  /Library/Ruby/Gems/2.0.0/gems/commander-fastlane-4.4.5/lib/commander/command.rb:178:in `call'
  /Library/Ruby/Gems/2.0.0/gems/commander-fastlane-4.4.5/lib/commander/command.rb:153:in `run'
  /Library/Ruby/Gems/2.0.0/gems/commander-fastlane-4.4.5/lib/commander/runner.rb:476:in `run_active_command'
  /Library/Ruby/Gems/2.0.0/gems/fastlane-2.47.0/fastlane_core/lib/fastlane_core/ui/fastlane_runner.rb:64:in `run!'
  /Library/Ruby/Gems/2.0.0/gems/commander-fastlane-4.4.5/lib/commander/delegates.rb:15:in `run!'
  /Library/Ruby/Gems/2.0.0/gems/fastlane-2.47.0/fastlane/lib/fastlane/commands_generator.rb:303:in `run'
  /Library/Ruby/Gems/2.0.0/gems/fastlane-2.47.0/fastlane/lib/fastlane/commands_generator.rb:42:in `start'
  /Library/Ruby/Gems/2.0.0/gems/fastlane-2.47.0/fastlane/lib/fastlane/cli_tools_distributor.rb:66:in `take_off'
  /Library/Ruby/Gems/2.0.0/gems/fastlane-2.47.0/bin/fastlane:20:in `<top (required)>'
  /usr/local/bin/fastlane:23:in `load'
  /usr/local/bin/fastlane:23:in `<top (required)>'

Environment

Please run fastlane env and copy the output below. This will help us help you 👍 If you used --capture_output option please remove this block - as it is already included there.

🚫 fastlane environment 🚫

Stack

Key Value
OS 10.12.5
Ruby 2.0.0
Bundler? false
Git git version 2.11.0 (Apple Git-81)
Installation Source /usr/local/bin/fastlane
Host Mac OS X 10.12.5 (16F73)
Ruby Lib Dir /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib
OpenSSL Version OpenSSL 0.9.8zc 19 Mar 2015
Is contained false
Is homebrew false
Is installed via Fabric.app false
Xcode Path /Library/Developer/CommandLineTools/

fastlane gems

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

Loaded fastlane plugins:

Plugin Version Update-Status
fastlane-plugin-automated_test_emulator_run 1.5.1 ✅ Up-To-Date

About this issue

  • Original URL
  • State: closed
  • Created 7 years ago
  • Comments: 41 (24 by maintainers)

Commits related to this issue

Most upvoted comments

Blah blah, still an issue.

Hey guys I also ran into this issue, thought I’d just submit the PR here to hopefully get this one fixed. Cheers!

Same

There hasn’t been any activity on this issue recently. Due to the high number of incoming GitHub notifications, we have to clean some of the old issues, as many of them have already been resolved with the latest updates.

Please make sure to update to the latest fastlane version and check if that solves the issue. Let us know if that works for you by adding a comment 👍

I’m doing this manually for now. I might submit a PR if I can find time

    packages = sh "adb shell pm list packages #{package_name}"

    if packages.match(/#{package_name}$/)
      UI.important "Uninstalling #{package_name}"
      sh "adb uninstall #{package_name}" 
    else 
      UI.message "#{package_name} not found in device"
    end

I don’t even know why the fastlane-bot is questioning this issue since there’s a type: bug label on it and it hasn’t been closed.

Also happens on API level 27. I already checked the sources and I could not find a good way to easily change it since I’m not that familiar with the project + ruby.

This seems to be the code responsible for uninstalling apks. It doesn’t appear to do anything special to handle errors / nonexistent apps. https://github.com/fastlane/fastlane/blob/ae5db88ff7a3ebc3c564f725f76758c83ccb7973/screengrab/lib/screengrab/runner.rb#L189-L199

This could probably be fixed by using adb shell pm path ... to check for the app, exit 0=exists, exit 1=doesn’t exist.

This issue still persists.