2015-09-17 85 views
2

我正在开发Play商店上正在发布的onan应用。在使用5.1.1版本的Android设备时,Play商店会显示“您的设备与此版本不兼容”,我试图确定为什么以及如何解决此问题的具体原因。APK与最新的Android版本不兼容

现有应用程序的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.该信息来自哪里,如果不是uses-sdk信息?
  3. 有没有修复,缺少重建一个新的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信息)如下。看起来非工作最低版本比工作(13)显着低(5)。

工作:

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 
+1

“现有应用程序的Android.Manifest文件中包含以下内容” - “build.gradle”文件中的内容是什么?在你的'app/build/intermediates/manifests /'目录中的合并清单中是什么? – CommonsWare

+0

@CommonsWare:更新了包含该信息的问题 – ctacke

+0

解压缩清单中的非工作APK的“android:minSdkVersion”是什么?我假设你在问题中显示的行来自输入清单(即项目本身中的行)。 – CommonsWare

回答

1

除非你在做一个非常具体的原因,你的targetSdkVersion必须符合您的compileSdkVersion

而且,你”我需要增加versionCode(我可以看到这是在发布的apk中完成的,但是这并没有在build.gradle文件的其余部分完成你只是给了我们)

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

此外,您proguard-rules.pro参考丢失其右侧一个单引号。我认为这一定是某种切割和粘贴错误。