Travis CI Android 模拟器中的 EACCES(权限被拒绝)

EACCES (Permission denied) in Travis CI Android Emulator

我使用 Espresso 和 Android API 22 模拟器在本地测试我的应用程序,它可以正常工作。我的 Manifest.xml:

里有这个
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

我也在 运行 时请求权限,根据 Android 23 之后的要求。但是,当 Travis CI 运行 使用相同的 API 模拟器,应用程序抛出错误:

02:10:29 V/InstrumentationResultParser: Caused by: java.io.FileNotFoundException: /storage/sdcard/dd3c49bc-efdb-41b9-90af-e814ca17c59d.png: open failed: EACCES (Permission denied)

这是我的 .travis.yml:

language: android
jdk: oraclejdk8
sudo: false

android:
  components:
    - tools
    - platform-tools
    - build-tools-28.0.3
    - android-28
    - android-22
    - extra-google-google_play_services
    - extra-google-m2repository
    - extra-android-m2repository
    - sys-img-armeabi-v7a-android-22

before_script:
  - touch local.properties
  - chmod +x gradlew
  - echo no | android create avd --force -n test -t android-22 --abi armeabi-v7a
  - emulator -avd test -no-audio -no-window &
  - android-wait-for-emulator
  - adb shell input keyevent 82 &

script:
 - ./gradlew clean build connectedCheck

这是 Travis 正在构建的回购:

Android-CutOut

如果您克隆它,请使用 Android Studio 和 运行 打开您可以看到的测试,它不会抛出该错误。我该如何解决这个问题?

有同样的问题。删除和添加 Android 平台再次修复了错误,但现在应用程序崩溃了最微小的 UI 更改,没有任何错误。我每次都必须重新启动应用程序才能让它再次运行。

还有一件事,

SD 卡侧面有一个 "write lock" 滑块,与触点成 90 度角。

确保您的 SD 卡已启用写入。

为了在 Android 模拟器映像上使用外部存储,您需要创建外部存储。您可以准备好可以使用路径添加的映像,也可以使用 -c 参数提供 SD 卡映像的大小。

https://developer.android.com/studio/tools/help/android