【发布时间】:2015-09-19 07:35:48
【问题描述】:
我正在开发一个目前在 Play 商店上发布的应用。使用装有 5.1.1 版本的 Android 设备时,Play 商店显示“您的设备与此版本不兼容”,我正在尝试确定具体原因以及如何解决它。
现有应用的 Android.Manifest 文件中包含以下内容:
<uses-sdk minSdkVersion="13" targetSdkVersion="21"/>
我认为可能是导致问题的“targetSDKVersion”。我没有最初发布的 APK,但我想我可以通过生成具有相同 uses-sdk 清单项的新应用来检验我的假设。
我使用最新的 Android Studio 和相同的 uses-sdk 值创建了一个新应用并发布了它,奇怪的是它在我的 5.1.1 设备上可用。
我决定进一步调查,并在我的桌面上pulled both APKs down,然后使用apktool 提取每个内容以查看是否有任何突出的内容。
我发现非工作 APK 在提取的清单中有这个:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.redphx.deviceid" platformBuildVersionCode="21" platformBuildVersionName="5.0.1-1624448">
工作 APK 有以下内容
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.opennetcf.ctacke.androidsample" platformBuildVersionCode="23" platformBuildVersionName="6.0-2166767">
现在我的假设是platformBuildVersionCode 一定是罪魁祸首。
所以我的问题是:
- 我的假设是否正确,这就是为什么一个 APK 不适用于 5.1.1?
- 我假设 APK 编译器设置了
platformBuildVersionCode属性。我在工作应用程序中专门将targetSdkVersion设置为21,我在提取的yml 中看到了该值,但platformBuildVersionCode仍然显示23。如果不是uses-sdk信息,这些信息来自哪里?李> - 除了重建新的 APK 并重新发布之外,是否有解决方法?
我认为重新发布是可能的途径,但我希望避免将来再次出现此问题,因此我真的很想了解#1 和 #2 的答案。
更新
工作 APK 的合并清单与应用程序本身的清单相同,因此根本不引用 23。
<uses-sdk
minSdkVersion="13"
targetSdkVersion="21"/>
在工作系统上,build.gradle 包含以下内容:
android {
compileSdkVersion 23
buildToolsVersion "23.0.1"
defaultConfig {
applicationId "com.opennetcf.ctacke.androidsample"
minSdkVersion 13
targetSdkVersion 21
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnable false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro
}
}
}
dependencies {
compile filetree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:23.0.1'
}
所以我认为这就是该信息的来源,但它如何到达 APK 仍然不是很清楚。
我没有非工作 APK,因为它是由应用发布团队在我加入项目之前构建的,我不知道他们是否保留任何这些中间输出。我正在调查。
编辑 2
从两个 APK 中提取的 yml(显示 uses-sdk 信息)如下。看起来非工作最低版本 (5) 明显低于工作 (13)。
工作:
version: 2.0.1
apkFileName: oncf.apk
isFrameworkApk: false
usesFramework:
ids:
- 1
sdkInfo:
minSdkVersion: '13'
targetSdkVersion: '21'
packageInfo:
forced-package-id: '127'
versionInfo:
versionCode: '1'
versionName: '1.0'
compressionType: false
sharedLibrary: false
不工作:
version: 2.0.1
apkFileName: ytb.apk
isFrameworkApk: false
usesFramework:
ids:
- 1
sdkInfo:
minSdkVersion: '5'
targetSdkVersion: '21'
packageInfo:
forced-package-id: '127'
versionInfo:
versionCode: '4'
versionName: 1.1.2
compressionType: false
sharedLibrary: false
【问题讨论】:
-
"现有应用的 Android.Manifest 文件中包含以下内容" --
build.gradle文件中有什么内容?app/build/intermediates/manifests/目录中的合并清单中有什么内容? -
@CommonsWare:更新了问题以包含该信息
-
您提取的非工作 APK 清单中的
android:minSdkVersion是什么?我假设您在问题中显示的那一行来自输入清单(即项目本身中的那一行)。 -
是的,该行来自输入。提取的 yml 显示非工作最小值为 5,而工作最小值为 13。
-
我不知道
platformBuildVersionCode是什么或它来自哪里。您可以尝试从命令行 (adb install path/to/your.apk) 安装非工作 APK 并查看错误消息,因为这可能是我们误解了 Play 商店告诉您的内容。
标签: android google-play apk