APK不兼容最新的Android版本

时间:2015-09-17 16:12:34

标签: android google-play apk

我正在开发目前在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必定是罪魁祸首。

所以我的问题是:

  1. 我的假设是否正确,这就是为什么一个APK不能用于5.1.1?
  2. 我假设APK编译器设置了platformBuildVersionCode属性。我在工作应用程序中专门将targetSdkVersion设置为21,并且我在提取的yml中看到了该值,但platformBuildVersionCode仍然显示23.如果不是{{1,那么该信息来自何处?信息?
  3. 是否有修复,没有重建新的APK并重新发布?
  4. 我认为重新发布是可能的路线,但我希望将来再发生这个问题,所以我真的很想理解#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
    

1 个答案:

答案 0 :(得分:1)

除非您有非常具体的理由,否则targetSdkVersion需要与您的compileSdkVersion匹配

另外,你需要递增versionCode(我可以看到这是在已发布的apk中完成的,但是你刚刚给我们的build.gradle文件的其余部分没有这样做)< / p>

如果原始清单文件仍包含minSdkVersiontargetSdkVersion属性,则可以删除这些属性。这两个属性现在将来自您的build.gradle文件以创建中间清单。这是Android正在做的新方式。

此外,您的proguard-rules.pro引用在其右侧缺少单引号。我认为这必须是某种切割和粘贴错误。