AWS Device Farm错误:INSTALL_FAILED_OLDER_SDK,但我具有向后兼容性

时间:2017-10-11 13:35:15

标签: android android-espresso aws-device-farm

因此,当Android 7.0(及更低版本)的设备场设备尝试安装我的应用程序时,我收到以下错误:

Failed to install com.carto.advanced.kotlin.test - 
INSTALL_FAILED_OLDER_SDK: Failed parse during installPackageLI: 
/data/app/vmdl777879102.tmp/base.apk (at Binary XML file line #5): 
Requires newer sdk version #25 (current version is #24)

虽然技术上是正确的,但我的目标是 sdk 25 ,我还安装了向后兼容性,这应该不是问题。

compile 'com.android.support:appcompat-v7:25.2.0'

这是我的build.gradle的相关部分:

compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
    applicationId "com.carto.advanced.kotlin"
    minSdkVersion 18
    targetSdkVersion 25
    versionCode 4
    versionName "0.3.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    manifestPlaceholders = [HOCKEYAPP_APP_ID: "xxxx"]
}

它安装并运行> = 18就好了,我已经在几个设备上对其进行了测试。这里发生了什么?

值得一提的是,我使用espresso 2.2.2版和UIAutomator版-v18:2.0.0

compile 'com.android.support.test.uiautomator:uiautomator-v18:2.0.0'
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })

错误页面中的图片:

Image from error page

结果页面中的图片: enter image description here

2 个答案:

答案 0 :(得分:1)

Nikitah,

  

无法安装com.carto.advanced.kotlin.test

无法安装的软件包以.test结尾,告诉我它是工具APK,而不是未能安装的实际应用程序APK。

我的猜测是,您的工具APK中的AndroidManifest.xmlminSdkVersion设置为25(或未设置)。

您可以使用aapt进行确认。例如:

⇒ aapt debug badging <your-instrumentation.apk> | grep -i sdkversion sdkVersion:'14' targetSdkVersion:'24'

希望有所帮助!

答案 1 :(得分:0)

问题没有得到解决,但回答了我自己的问题,因为问题不再相关 - 它与AWS Device Farm无关。

通过分析测试的.apk,我发现Android Studio在它覆盖测试minSdkVersion时会做一些奇怪的魔术。

来自Android的documentation您可以根据需要添加自己的清单文件,例如为minSdkVersion指定不同的值或仅为您的测试注册运行侦听器

所以我为我的测试创建了一个单独的清单(它确实使用了它),但build.gradle仍然覆盖minSdkVersiontargetSdkVersion

解决后会更新我的答案。