AWS设备农场错误:INSTALL_FAILED_OLDER_SDK,但我有向后兼容

问题描述:

所以,我收到以下错误,当采用Android 7.0(或更低)设备农场设备尝试安装我的应用程序:AWS设备农场错误:INSTALL_FAILED_OLDER_SDK,但我有向后兼容

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就好,我已经测试了几个设备 。这里发生了什么?

值得一提的是,我用咖啡版本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

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

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

从Android的documentation必要时,可以添加自己的清单文件,如为minSdkVersion指定不同的值或寄存器运行听众只为你的测试

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

问题解决后会更新我的答案。

+0

我会说,没有什么可通过AWS来解决,设置类似 在AndroidManifest中的androidTest目录是一个有效的解决方案。 – bajicdusko

Nikitah,

Failed to install 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'

希望帮助!

+0

Cheerio,它确实是由具有minSdkVersion =“23”的工具清单引起的,但是,测试的AndroidManifest.xml是自动生成的。 如果我在较低版本的Android设备(例如5.1)上运行测试,自动生成的minSdkVersion是正确的 - 18,如我的build.gradle中指定的。 现在我已经添加了一个清单文件到我的测试,它仍然覆盖它minSdkVersion =“23” 这是一些奇怪的屁股Android Studio魔术在这里。 – Nikitah