我正在开发目前在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
必定是罪魁祸首。
所以我的问题是:
platformBuildVersionCode
属性。我在工作应用程序中专门将targetSdkVersion
设置为21,并且我在提取的yml中看到了该值,但platformBuildVersionCode
仍然显示23.如果不是{{1,那么该信息来自何处?信息?我认为重新发布是可能的路线,但我希望将来再发生这个问题,所以我真的很想理解#1和#2的答案。
更新
工作APK的合并清单与应用程序本身的清单相同,因此根本不提及23。
uses-sdk
在工作系统上,<uses-sdk
minSdkVersion="13"
targetSdkVersion="21"/>
包含以下内容:
build.gradle
所以我认为这是信息的来源,但它如何到达APK仍然不是那么清楚。
我没有任何非工作APK,因为它是由应用程序发布团队在我进入项目之前构建的,我不知道他们是否保留了这些中间输出。我正在调查那个。
编辑2
来自两个APK(显示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'
}
信息)的提取的yml如下所示。看起来非工作最小版本比工作(13)明显更低(5)。
工作:
uses-sdk
非工作:
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
答案 0 :(得分:1)
除非您有非常具体的理由,否则targetSdkVersion
需要与您的compileSdkVersion
匹配
另外,你需要递增versionCode
(我可以看到这是在已发布的apk中完成的,但是你刚刚给我们的build.gradle文件的其余部分没有这样做)< / p>
如果原始清单文件仍包含minSdkVersion
和targetSdkVersion
属性,则可以删除这些属性。这两个属性现在将来自您的build.gradle
文件以创建中间清单。这是Android正在做的新方式。
此外,您的proguard-rules.pro
引用在其右侧缺少单引号。我认为这必须是某种切割和粘贴错误。