我使用带有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 Studio打开并运行测试,您会发现它不会引发该错误。我该怎么解决?
答案 0 :(得分:1)
为了在Android Emulator映像上使用外部存储,您需要创建外部存储。您可以准备一个可以添加路径的图像,也可以使用-c参数提供sd卡图像的大小。
答案 1 :(得分:0)
有同样的问题。删除并添加Android平台再次修复了该错误,但现在该应用因最微小的UI更改而崩溃,没有任何错误。我必须每次重新启动应用程序才能使其再次运行。
还有一件事,
SD卡侧面有一个“写锁”滑块,与触点成90度角。
确保您的SD卡已启用写操作。