Travis CI Android仿真器中的EACCES(权限被拒绝)

时间:2018-12-05 02:40:28

标签: android android-emulator travis-ci android-permissions

我使用带有Android API 22模拟器的Espresso在本地测试我的应用程序,并且可以正常工作。我的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打开并运行测试,您会发现它不会引发该错误。我该怎么解决?

2 个答案:

答案 0 :(得分:1)

为了在Android Emulator映像上使用外部存储,您需要创建外部存储。您可以准备一个可以添加路径的图像,也可以使用-c参数提供sd卡图像的大小。

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

答案 1 :(得分:0)

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

还有一件事,

SD卡侧面有一个“写锁”滑块,与触点成90度角。

确保您的SD卡已启用写操作。