AWS Device Farm error: INSTALL_FAILED_OLDER_SDK, but I have backwards compatibility

AWS Device Farm error: INSTALL_FAILED_OLDER_SDK, but I have backwards compatibility

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

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'
    })

来自错误页面的图像:

来自结果页面的图片:

尼基塔

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'

希望对您有所帮助!

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

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

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

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

解决后会更新我的答案。