fastlane: [screengrab] Permission denied on API level >= 24

New Issue Checklist

Issue Description

I am getting permission denied error when screengrab tries to pull the screenshots from the device. On an emulator with API level 21 everything is working fine but on API level 24, 28 and 29 there is a permission error.

It also happens on a Nexus 5X (Android 8.1.0) and a Pixel 3a XL (Android 10).

Command executed
Complete output when running fastlane, including the stack trace and command used
 Ignoring ox-2.11.0 because its extensions are not built. Try: gem pristine ox --version 2.11.0
[✔] 🚀 
[21:00:47]: Successfully loaded '/Volumes/Projects/Fastlane/Fastlane/screengrab/fastlane/Screengrabfile' 📄

±---------------------------±----------------------------+ | Detected Values from ‘./fastlane/Screengrabfile’ | ±---------------------------±----------------------------+ | locales | [“en-US”, “fr-FR”, “it-IT”] | | clear_previous_screenshots | true | ±---------------------------±----------------------------+

[21:00:47]: To not be asked about this value, you can specify it using ‘app_package_name’ [21:00:47]: The package name of the app under test (e.g. com.yourcompany.yourapp): tools.fastlane.localetester

±----------------------------±----------------------------------------+ | Summary for screengrab 2.137.0 | ±----------------------------±----------------------------------------+ | app_package_name | tools.fastlane.localetester | | tests_package_name | tools.fastlane.localetester.test | | android_home | /Users/rickclephas/Library/Android/sdk | | locales | [“en-US”, “fr-FR”, “it-IT”] | | clear_previous_screenshots | true | | output_directory | fastlane/metadata/android | | skip_open_summary | false | | test_instrumentation_runner | androidx.test.runner.AndroidJUnitRunner | | ending_locale | en-US | | use_adb_root | false | | device_type | phone | | exit_on_test_failure | true | | reinstall_app | false | | use_timestamp_suffix | true | ±----------------------------±----------------------------------------+

[21:00:50]: Limiting the test classes run by screengrab to just those that generate screenshots can make runs faster. [21:00:50]: Consider using the :use_tests_in_classes or :use_tests_in_packages option, and organize your tests accordingly. [21:00:50]: Clearing phoneScreenshots within fastlane/metadata/android [21:00:50]: $ /Users/rickclephas/Library/Android/sdk/platform-tools/adb -s 014608952b893b39 shell echo $EXTERNAL_STORAGE [21:00:50]: ▸ /sdcard [21:00:51]: Cleaning screenshots on device [21:00:51]: $ /Users/rickclephas/Library/Android/sdk/platform-tools/adb -s 014608952b893b39 shell rm -rf /sdcard/tools.fastlane.localetester/screengrab ls: /data/data/tools.fastlane.localetester/app_screengrab: Permission denied [21:00:51]: Exit status: 1 ls: /data/user/0/tools.fastlane.localetester/files/tools.fastlane.localetester/screengrab/en-US/images/screenshots: Permission denied [21:00:51]: Exit status: 1 ls: /data/user/0/tools.fastlane.localetester/files/tools.fastlane.localetester/screengrab/fr-FR/images/screenshots: Permission denied [21:00:51]: Exit status: 1 ls: /data/user/0/tools.fastlane.localetester/files/tools.fastlane.localetester/screengrab/it-IT/images/screenshots: Permission denied [21:00:51]: Exit status: 1 [21:00:51]: To not be asked about this value, you can specify it using ‘app_apk_path’ [21:00:51]: Select your debug app APK

  1. example/build/outputs/apk/androidTest/debug/example-debug-androidTest.apk
  2. example/build/outputs/apk/debug/example-debug.apk ? 2 [21:00:59]: To not be asked about this value, you can specify it using ‘tests_apk_path’ [21:00:59]: Select your debug tests APK
  3. example/build/outputs/apk/androidTest/debug/example-debug-androidTest.apk
  4. example/build/outputs/apk/debug/example-debug.apk ? 1 [21:01:00]: Validating app APK [21:01:00]: $ /Users/rickclephas/Library/Android/sdk/build-tools/29.0.2/aapt dump permissions example/build/outputs/apk/debug/example-debug.apk [21:01:00]: ▸ package: tools.fastlane.localetester [21:01:00]: ▸ uses-permission: name=‘android.permission.DISABLE_KEYGUARD’ [21:01:00]: ▸ uses-permission: name=‘android.permission.WAKE_LOCK’ [21:01:00]: ▸ uses-permission: name=‘android.permission.WRITE_EXTERNAL_STORAGE’ [21:01:00]: ▸ uses-permission: name=‘android.permission.READ_EXTERNAL_STORAGE’ [21:01:00]: ▸ uses-permission: name=‘android.permission.CHANGE_CONFIGURATION’ [21:01:00]: ▸ uses-permission: name=‘android.permission.DUMP’ [21:01:00]: Installing app APK [21:01:00]: $ /Users/rickclephas/Library/Android/sdk/platform-tools/adb -s 014608952b893b39 install -t -r example/build/outputs/apk/debug/example-debug.apk [21:01:00]: ▸ Performing Streamed Install [21:01:27]: ▸ Success [21:01:27]: Installing tests APK [21:01:27]: $ /Users/rickclephas/Library/Android/sdk/platform-tools/adb -s 014608952b893b39 install -t -r example/build/outputs/apk/androidTest/debug/example-debug-androidTest.apk [21:01:27]: ▸ Performing Streamed Install [21:01:30]: ▸ Success [21:01:30]: Granting the permission necessary to change locales on the device [21:01:30]: $ /Users/rickclephas/Library/Android/sdk/platform-tools/adb -s 014608952b893b39 shell pm grant tools.fastlane.localetester android.permission.CHANGE_CONFIGURATION [21:01:32]: $ /Users/rickclephas/Library/Android/sdk/platform-tools/adb -s 014608952b893b39 shell getprop ro.build.version.sdk [21:01:32]: ▸ 27 [21:01:32]: Granting the permissions necessary to access device external storage [21:01:32]: $ /Users/rickclephas/Library/Android/sdk/platform-tools/adb -s 014608952b893b39 shell pm grant tools.fastlane.localetester android.permission.WRITE_EXTERNAL_STORAGE [21:01:33]: $ /Users/rickclephas/Library/Android/sdk/platform-tools/adb -s 014608952b893b39 shell pm grant tools.fastlane.localetester android.permission.READ_EXTERNAL_STORAGE [21:01:33]: $ /Users/rickclephas/Library/Android/sdk/platform-tools/adb -s 014608952b893b39 shell getprop ro.build.version.sdk [21:01:34]: ▸ 27 [21:01:34]: $ /Users/rickclephas/Library/Android/sdk/build-tools/29.0.2/aapt dump badging example/build/outputs/apk/debug/example-debug.apk [21:01:34]: ▸ package: name=‘tools.fastlane.localetester’ versionCode=‘1’ versionName=‘1.0’ compileSdkVersion=‘29’ compileSdkVersionCodename=‘10’ [21:01:34]: ▸ sdkVersion:‘18’ [21:01:34]: ▸ targetSdkVersion:‘29’ [21:01:34]: ▸ uses-permission: name=‘android.permission.DISABLE_KEYGUARD’ [21:01:34]: ▸ uses-permission: name=‘android.permission.WAKE_LOCK’ [21:01:34]: ▸ uses-permission: name=‘android.permission.WRITE_EXTERNAL_STORAGE’ [21:01:34]: ▸ uses-permission: name=‘android.permission.READ_EXTERNAL_STORAGE’ [21:01:34]: ▸ uses-permission: name=‘android.permission.CHANGE_CONFIGURATION’ [21:01:34]: ▸ uses-permission: name=‘android.permission.DUMP’ [21:01:34]: ▸ application-label:‘Locale Tester’ [21:01:34]: ▸ application-label-af:‘Locale Tester’ [21:01:34]: ▸ application-label-am:‘Locale Tester’ [21:01:34]: ▸ application-label-ar:‘Locale Tester’ [21:01:34]: ▸ application-label-as:‘Locale Tester’ [21:01:34]: ▸ application-label-az:‘Locale Tester’ [21:01:34]: ▸ application-label-be:‘Locale Tester’ [21:01:34]: ▸ application-label-bg:‘Locale Tester’ [21:01:34]: ▸ application-label-bn:‘Locale Tester’ [21:01:34]: ▸ application-label-bs:‘Locale Tester’ [21:01:34]: ▸ application-label-ca:‘Locale Tester’ [21:01:34]: ▸ application-label-cs:‘Locale Tester’ [21:01:34]: ▸ application-label-da:‘Locale Tester’ [21:01:34]: ▸ application-label-de:‘Locale Tester’ [21:01:34]: ▸ application-label-el:‘Locale Tester’ [21:01:34]: ▸ application-label-en-AU:‘Locale Tester’ [21:01:34]: ▸ application-label-en-CA:‘Locale Tester’ [21:01:34]: ▸ application-label-en-GB:‘Locale Tester’ [21:01:34]: ▸ application-label-en-IN:‘Locale Tester’ [21:01:34]: ▸ application-label-en-XC:‘Locale Tester’ [21:01:34]: ▸ application-label-es:‘Locale Tester’ [21:01:34]: ▸ application-label-es-US:‘Locale Tester’ [21:01:34]: ▸ application-label-et:‘Locale Tester’ [21:01:34]: ▸ application-label-eu:‘Locale Tester’ [21:01:34]: ▸ application-label-fa:‘Locale Tester’ [21:01:34]: ▸ application-label-fi:‘Locale Tester’ [21:01:34]: ▸ application-label-fr:‘Locale Tester’ [21:01:34]: ▸ application-label-fr-CA:‘Locale Tester’ [21:01:34]: ▸ application-label-fr-FR:‘Locale Tester’ [21:01:34]: ▸ application-label-gl:‘Locale Tester’ [21:01:34]: ▸ application-label-gu:‘Locale Tester’ [21:01:34]: ▸ application-label-hi:‘Locale Tester’ [21:01:34]: ▸ application-label-hr:‘Locale Tester’ [21:01:34]: ▸ application-label-hu:‘Locale Tester’ [21:01:34]: ▸ application-label-hy:‘Locale Tester’ [21:01:34]: ▸ application-label-in:‘Locale Tester’ [21:01:34]: ▸ application-label-is:‘Locale Tester’ [21:01:34]: ▸ application-label-it:‘Locale Tester’ [21:01:34]: ▸ application-label-iw:‘Locale Tester’ [21:01:34]: ▸ application-label-ja:‘Locale Tester’ [21:01:34]: ▸ application-label-ja-JP:‘Locale Tester’ [21:01:34]: ▸ application-label-ka:‘Locale Tester’ [21:01:34]: ▸ application-label-kk:‘Locale Tester’ [21:01:34]: ▸ application-label-km:‘Locale Tester’ [21:01:34]: ▸ application-label-kn:‘Locale Tester’ [21:01:34]: ▸ application-label-ko:‘Locale Tester’ [21:01:34]: ▸ application-label-ky:‘Locale Tester’ [21:01:34]: ▸ application-label-lo:‘Locale Tester’ [21:01:34]: ▸ application-label-lt:‘Locale Tester’ [21:01:34]: ▸ application-label-lv:‘Locale Tester’ [21:01:34]: ▸ application-label-mk:‘Locale Tester’ [21:01:34]: ▸ application-label-ml:‘Locale Tester’ [21:01:34]: ▸ application-label-mn:‘Locale Tester’ [21:01:34]: ▸ application-label-mr:‘Locale Tester’ [21:01:34]: ▸ application-label-ms:‘Locale Tester’ [21:01:34]: ▸ application-label-my:‘Locale Tester’ [21:01:34]: ▸ application-label-nb:‘Locale Tester’ [21:01:34]: ▸ application-label-ne:‘Locale Tester’ [21:01:34]: ▸ application-label-nl:‘Locale Tester’ [21:01:34]: ▸ application-label-or:‘Locale Tester’ [21:01:34]: ▸ application-label-pa:‘Locale Tester’ [21:01:34]: ▸ application-label-pl:‘Locale Tester’ [21:01:34]: ▸ application-label-pt:‘Locale Tester’ [21:01:34]: ▸ application-label-pt-BR:‘Locale Tester’ [21:01:34]: ▸ application-label-pt-PT:‘Locale Tester’ [21:01:34]: ▸ application-label-ro:‘Locale Tester’ [21:01:34]: ▸ application-label-ru:‘Locale Tester’ [21:01:34]: ▸ application-label-si:‘Locale Tester’ [21:01:34]: ▸ application-label-sk:‘Locale Tester’ [21:01:34]: ▸ application-label-sl:‘Locale Tester’ [21:01:34]: ▸ application-label-sq:‘Locale Tester’ [21:01:34]: ▸ application-label-sr:‘Locale Tester’ [21:01:34]: ▸ application-label-sr-Latn:‘Locale Tester’ [21:01:34]: ▸ application-label-sv:‘Locale Tester’ [21:01:34]: ▸ application-label-sw:‘Locale Tester’ [21:01:34]: ▸ application-label-ta:‘Locale Tester’ [21:01:34]: ▸ application-label-te:‘Locale Tester’ [21:01:34]: ▸ application-label-th:‘Locale Tester’ [21:01:34]: ▸ application-label-tl:‘Locale Tester’ [21:01:34]: ▸ application-label-tr:‘Locale Tester’ [21:01:34]: ▸ application-label-uk:‘Locale Tester’ [21:01:34]: ▸ application-label-ur:‘Locale Tester’ [21:01:34]: ▸ application-label-uz:‘Locale Tester’ [21:01:34]: ▸ application-label-vi:‘Locale Tester’ [21:01:34]: ▸ application-label-zh-CN:‘Locale Tester’ [21:01:34]: ▸ application-label-zh-HK:‘Locale Tester’ [21:01:34]: ▸ application-label-zh-TW:‘Locale Tester’ [21:01:34]: ▸ application-label-zu:‘Locale Tester’ [21:01:34]: ▸ application-icon-160:‘res/mipmap-mdpi-v4/ic_launcher.png’ [21:01:34]: ▸ application-icon-240:‘res/mipmap-hdpi-v4/ic_launcher.png’ [21:01:34]: ▸ application-icon-320:‘res/mipmap-xhdpi-v4/ic_launcher.png’ [21:01:34]: ▸ application-icon-480:‘res/mipmap-xxhdpi-v4/ic_launcher.png’ [21:01:34]: ▸ application-icon-640:‘res/mipmap-xxxhdpi-v4/ic_launcher.png’ [21:01:34]: ▸ application-icon-65534:‘res/mipmap-mdpi-v4/ic_launcher.png’ [21:01:34]: ▸ application: label=‘Locale Tester’ icon=‘res/mipmap-mdpi-v4/ic_launcher.png’ [21:01:34]: ▸ application-debuggable [21:01:34]: ▸ launchable-activity: name=‘tools.fastlane.localetester.MainActivity’ label=‘Locale Tester’ icon=‘’ [21:01:34]: ▸ feature-group: label=‘’ [21:01:34]: ▸ uses-feature: name=‘tools.fastlane.screengrab.cleanstatusbar’ [21:01:34]: ▸ uses-feature: name=‘android.hardware.faketouch’ [21:01:34]: ▸ uses-implied-feature: name=‘android.hardware.faketouch’ reason=‘default feature for all apps’ [21:01:34]: ▸ main [21:01:34]: ▸ other-activities [21:01:34]: ▸ supports-screens: ‘small’ ‘normal’ ‘large’ ‘xlarge’ [21:01:34]: ▸ supports-any-density: ‘true’ [21:01:34]: ▸ locales: ‘–_–’ ‘af’ ‘am’ ‘ar’ ‘as’ ‘az’ ‘be’ ‘bg’ ‘bn’ ‘bs’ ‘ca’ ‘cs’ ‘da’ ‘de’ ‘el’ ‘en-AU’ ‘en-CA’ ‘en-GB’ ‘en-IN’ ‘en-XC’ ‘es’ ‘es-US’ ‘et’ ‘eu’ ‘fa’ ‘fi’ ‘fr’ ‘fr-CA’ ‘fr-FR’ ‘gl’ ‘gu’ ‘hi’ ‘hr’ ‘hu’ ‘hy’ ‘in’ ‘is’ ‘it’ ‘iw’ ‘ja’ ‘ja-JP’ ‘ka’ ‘kk’ ‘km’ ‘kn’ ‘ko’ ‘ky’ ‘lo’ ‘lt’ ‘lv’ ‘mk’ ‘ml’ ‘mn’ ‘mr’ ‘ms’ ‘my’ ‘nb’ ‘ne’ ‘nl’ ‘or’ ‘pa’ ‘pl’ ‘pt’ ‘pt-BR’ ‘pt-PT’ ‘ro’ ‘ru’ ‘si’ ‘sk’ ‘sl’ ‘sq’ ‘sr’ ‘sr-Latn’ ‘sv’ ‘sw’ ‘ta’ ‘te’ ‘th’ ‘tl’ ‘tr’ ‘uk’ ‘ur’ ‘uz’ ‘vi’ ‘zh-CN’ ‘zh-HK’ ‘zh-TW’ ‘zu’ [21:01:34]: ▸ densities: ‘160’ ‘240’ ‘320’ ‘480’ ‘640’ ‘65534’ [21:01:34]: Enabling clean status bar [21:01:34]: $ /Users/rickclephas/Library/Android/sdk/platform-tools/adb -s 014608952b893b39 shell pm grant tools.fastlane.localetester android.permission.DUMP [21:01:34]: $ /Users/rickclephas/Library/Android/sdk/platform-tools/adb -s 014608952b893b39 shell settings put global sysui_demo_allowed 1 [21:01:35]: Running tests for locale: en-US [21:01:35]: $ /Users/rickclephas/Library/Android/sdk/platform-tools/adb -s 014608952b893b39 shell am instrument --no-window-animation -w
    -e testLocale en_US
    -e endingLocale en_US
    -e appendTimestamp true
    tools.fastlane.localetester.test/androidx.test.runner.AndroidJUnitRunner [21:01:44]: ▸ tools.fastlane.localetester.FalconScreenshots:… [21:01:50]: ▸ tools.fastlane.localetester.JUnit4StyleTests:… [21:01:50]: ▸ Time: 12.815 [21:01:50]: ▸ OK (4 tests) [21:01:50]: Running tests for locale: fr-FR [21:01:50]: $ /Users/rickclephas/Library/Android/sdk/platform-tools/adb -s 014608952b893b39 shell am instrument --no-window-animation -w
    -e testLocale fr_FR
    -e endingLocale en_US
    -e appendTimestamp true
    tools.fastlane.localetester.test/androidx.test.runner.AndroidJUnitRunner [21:02:00]: ▸ tools.fastlane.localetester.FalconScreenshots:… [21:02:11]: ▸ tools.fastlane.localetester.JUnit4StyleTests:… [21:02:11]: ▸ Time: 18.985 [21:02:11]: ▸ OK (4 tests) [21:02:11]: Running tests for locale: it-IT [21:02:11]: $ /Users/rickclephas/Library/Android/sdk/platform-tools/adb -s 014608952b893b39 shell am instrument --no-window-animation -w
    -e testLocale it_IT
    -e endingLocale en_US
    -e appendTimestamp true
    tools.fastlane.localetester.test/androidx.test.runner.AndroidJUnitRunner [21:02:25]: ▸ tools.fastlane.localetester.FalconScreenshots:… [21:02:34]: ▸ tools.fastlane.localetester.JUnit4StyleTests:… [21:02:34]: ▸ Time: 18.03 [21:02:34]: ▸ OK (4 tests) [21:02:34]: Pulling captured screenshots from the device ls: /sdcard/tools.fastlane.localetester/screengrab: No such file or directory [21:02:35]: Exit status: 1 ls: /data/data/tools.fastlane.localetester/app_screengrab: Permission denied [21:02:35]: Exit status: 1 ls: /data/user/0/tools.fastlane.localetester/files/tools.fastlane.localetester/screengrab/en-US/images/screenshots: Permission denied [21:02:35]: Exit status: 1 ls: /data/user/0/tools.fastlane.localetester/files/tools.fastlane.localetester/screengrab/fr-FR/images/screenshots: Permission denied [21:02:35]: Exit status: 1 ls: /data/user/0/tools.fastlane.localetester/files/tools.fastlane.localetester/screengrab/it-IT/images/screenshots: Permission denied [21:02:35]: Exit status: 1 [21:02:35]: Make sure you’ve used Screengrab.screenshot() in your tests and that your expected tests are being run.

[!] No screenshots were detected 📷❌

Environment

✅ fastlane environment ✅

Stack

Key Value
OS 10.15.1
Ruby 2.6.5
Bundler? true
Git git version 2.20.1
Installation Source /usr/local/lib/ruby/gems/2.6.0/bin/fastlane
Host Mac OS X 10.15.1 (19B88)
Ruby Lib Dir /usr/local/Cellar/ruby/2.6.5/lib
OpenSSL Version OpenSSL 1.1.1d 10 Sep 2019
Is contained false
Is homebrew false
Is installed via Fabric.app false
Xcode Path /Applications/Xcode.app/Contents/Developer/
Xcode Version 11.2.1

System Locale

Variable Value
LANG en_US.UTF-8
LC_ALL en_US.UTF-8
LANGUAGE

fastlane files:

`./fastlane/Fastfile`
# Fetch and use the latest Fastfile from the fastlane main repository
import("../../fastlane/Fastfile")

lane(:deploy_aar) do
  ensure_git_branch
  ensure_git_status_clean

  gradle(task: [
    'screengrab-lib:clean',
    'screengrab-lib:assembleRelease',
    'screengrab-lib:bintrayUpload',
    '-PdryRun=false'
  ].join(' '))
end

No Appfile found

fastlane gems

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

Loaded fastlane plugins:

No plugins Loaded

Loaded gems
Gem Version
did_you_mean 1.3.0
bundler 1.17.3
etc 1.0.1
psych 3.1.0
stringio 0.0.2
strscan 1.0.0
forwardable 1.2.0
rake 11.3.0
CFPropertyList 3.0.2
public_suffix 2.0.5
addressable 2.7.0
ast 2.4.0
atomos 0.1.3
babosa 1.0.3
debug_inspector 0.0.3
binding_of_caller 0.8.0
builder 3.2.3
byebug 11.0.1
claide 1.0.3
climate_control 0.2.0
coderay 1.1.2
colored 1.2
colored2 3.1.2
highline 1.7.10
commander-fastlane 4.4.6
json 2.2.0
docile 1.3.2
simplecov-html 0.10.2
simplecov 0.16.1
tins 1.22.2
term-ansicolor 1.7.1
thor 0.20.3
coveralls 0.8.23
safe_yaml 1.0.5
crack 0.4.3
declarative 0.0.10
declarative-option 0.1.0
diff-lcs 1.3
digest-crc 0.4.1
unf_ext 0.0.7.6
unf 0.1.4
domain_name 0.5.20190701
dotenv 2.7.5
emoji_regex 1.0.1
excon 0.70.0
fakefs 0.8.1
multipart-post 2.0.0
faraday 0.17.1
http-cookie 1.0.3
faraday-cookie_jar 0.0.6
faraday_middleware 0.13.1
fastimage 2.1.7
gh_inspector 1.1.3
jwt 2.1.0
memoist 0.16.2
multi_json 1.14.1
os 1.0.1
signet 0.12.0
googleauth 0.6.7
httpclient 2.8.3
mime-types-data 3.2019.1009
mime-types 3.3
uber 0.1.0
representable 3.0.4
retriable 3.1.2
google-api-client 0.23.9
google-cloud-env 1.3.0
google-cloud-core 1.4.1
google-cloud-storage 1.16.0
mini_magick 4.9.5
multi_xml 0.6.0
plist 3.5.0
rubyzip 1.3.0
security 0.1.3
naturally 2.2.0
simctl 1.6.6
slack-notifier 2.3.2
terminal-notifier 2.0.0
unicode-display_width 1.6.0
terminal-table 1.8.0
tty-screen 0.7.0
tty-cursor 0.7.0
tty-spinner 0.9.2
word_wrap 1.0.0
nanaimo 0.2.6
xcodeproj 1.13.0
rouge 2.0.7
xcpretty 0.3.0
xcpretty-travis-formatter 1.0.0
hashdiff 1.0.0
http-accept 1.7.0
interception 0.5
method_source 0.9.2
netrc 0.11.0
parallel 1.19.1
parser 2.6.5.0
powerpack 0.1.2
pry 0.12.2
pry-byebug 3.7.0
pry-rescue 1.5.0
pry-stack_explorer 0.4.9.3
rack 1.6.11
rack-protection 1.5.5
rainbow 2.2.2
rb-readline 0.5.5
rest-client 2.1.0
rspec-support 3.5.0
rspec-core 3.5.4
rspec-expectations 3.5.0
rspec-mocks 3.5.0
rspec 3.5.0
rspec_junit_formatter 0.2.3
ruby-progressbar 1.10.1
rubocop 0.49.1
rubocop-require_tools 0.1.2
tilt 2.0.10
sinatra 1.4.8
webmock 2.3.2
xcov 1.4.3
yard 0.9.20

generated on: 2019-12-09

About this issue

  • Original URL
  • State: closed
  • Created 5 years ago
  • Reactions: 10
  • Comments: 27 (12 by maintainers)

Most upvoted comments

@fastlane-bot not fixed yet.

@fastlane-bot nope hasn’t been fixed yet.

I agree. Note, that android documentation is no good reference on the topic. For example external storage != removable storage. I can recommend Mark Murphy input on this https://commonsware.com/blog/2019/10/11/storage-situation-removable-storage.html

I don’t agree with that. While it might not be very clear that external storage is indeed not the removable storage. It is very clear that the external storage isn’t guaranteed to be available.

Yes, technically getExternalFilesDir may not be available. Practically, is this a concern of the Screengrab project? Or should it just an assert that storage is there and fail fast if otherwise.

I think this is something that should be considered. IMO if it is possible to store and retrieve the screenshots from the internal storage that should be preferred over the external storage. While most users probably won’t have any issues with the external storage there is a chance that it won’t work for someone.

Pulling files from the internal storage is definitely possible for debug apps. Android Studio provides this functionality and I assume they use adb for that as well.

Maybe I’ll consider a PR. I’ve been fairly busy, but it wouldn’t be too tricky a fix.

Same issue here. I also agree with @plastiv concerning getExternalFilesDir usage, it will be way easier to grab screenshots. But I read and understand your points @rickclephas so maybe a configuration to switch from getFilesDir to getExternalFilesDir could be great.

@rickclephas There’s a simple workaround for the adbd cannot run as root in production builds problem which is basically not to use an emulator with the Play Services installed (or a real unrooted device), instead using a “Google API” emulator instead. See this SO answer for details.

@userdimi @Ajibola You might want to checkout the workaround as well.

I hope this will help making this issue no longer blocking others like https://github.com/fastlane/fastlane/issues/15777.

@fastlane-bot As can be seen in the fairly recent comments on https://github.com/fastlane/fastlane/issues/16388, this issue has still not been fixed (although there seem to be some workarounds).

Same here. Test are executed properly but the screenshot can’t be retrieved on a non-rooted phone. We tried the adb root with the Android Emulator, and it worked.

I have tried that solution and using a rooted emulator works. The problem is that the emulator is pretty unstable to run the screenshots tests for more than 3-4 languages. I have to use a real device and rooting that is not that easy.

It would be nice if we could run screenshots tests on real devices and grab the generated files from them without being a root user 🙏

Also having the same issue