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.xml
将 minSdkVersion
设置为 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
.
解决后会更新我的答案。
因此,当使用 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.xml
将 minSdkVersion
设置为 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
.
解决后会更新我的答案。