首页 文章

上传失败:您需要为APK使用不同的版本代码,因为您已经拥有版本代码

提问于
浏览
2

THE SITUATION:

如果这个问题已经被问过三次,请提前抱歉 . 但这些解决方案都不适用于我 .

我需要将新版本上传到我的Ionic应用的Google Play . 上传过程一直很好,但这次我得到这个错误:

You need to use a different version code for your APK because you already have one with version code 101078.

THE PUBLISHING PROCESS:

我没有使用Android Studio .

要发布应用程序,我只需通过命令行构建和签署应用程序,然后将其上传到Google Developer Console .

对于新版本,我只是在创建apk之前更新config.xml中的版本号 .

APP VERSIONS:

旧版本:(在Google Play上发布的状态)1.1.7代码版本:101078

新版本:(尝试在Google Play上传)1.1.10

ATTEMPTS TO RESOLVE:

我试图手动将代码版本设置为更高的数字 . 目前我在./config.xml中有这个设置:

<widget id="com.myapp.myapp" version="1.1.10" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">

在./platforms/android/AndroidManifest.xml文件中,我手动将设置更改为:

<manifest android:hardwareAccelerated="true" android:versionCode="101079" android:versionName="1.1.10" package="com.meetinghand.meetinghand" xmlns:android="http://schemas.android.com/apk/res/android">

但是在我运行 cordova build --release android 之后,该值会自动重置为android:versionCode = "10110" ...

RUNNING AAPT:

在apk文件上运行sdk工具aapt我得到以下内容:

name ='com.myapp.myapp'versionCode ='101078'versionName ='1.1.7'platformBuildVersionName ='6.0-2704002'sdkVersion:'16'targetSdkVersion:'22'

THE QUESTION:

这是怎么回事?

versionCode究竟是如何设置的?我可以硬编码吗?为什么,无论我做什么,versionCode都保持在101078?

为什么versionName 1.1.7而不是1.1.10,因为它在config.xml中有明确说明?

我不知道我还能做什么 .

如果你解决这个谜题,我将为你建造一座雕塑!

谢谢!

EDIT:

最后我决定卸载CrossWalk因为并不严格需要它的好处 . 这样问题就解决了,我可以上传新版本 .

我确实可以硬编码config.xml中的代码版本,如@ e666所指出的:

<widget android-versionCode="101079" id="com.myapp.myapp" version="1.1.10" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">

版本代码没有被Crosswalk覆盖,但被正确设置为101079,这样我就可以将apk上传为新版本 .

如果您仍想保留Crosswalk并上传新版本,可以通过切换到Google Developer Console中的高级模式来完成 . 请记住,Crosswalk将导出两个apk(armv7和x86),您需要上传两个 .

有关如何操作的更多参考,请查看以下答案:

What does this Google Play APK publish error message mean?

2 回答

  • 3

    cordova在 AndroidManifest.xml 上覆盖您的更改是正常的 . 正确的解决方案是将版本放在 config.xml 中 .

    从cordova docs,如果您没有明确指定versionCode,则根据版本计算版本代码 . 这将是 :

    versionCode = MAJOR * 10000 + MINOR * 100 + PATCH
    

    所以 android:versionCode="10110" 是正常的 .

    您可以在 config.xml 中使用 android-versionCode 明确指定版本代码

    如果不更新平台文件夹,也应该尝试清理它 . 也许你所看到的是你的apk的旧版本 .

    我忘了:这是cordova文档的链接:https://cordova.apache.org/docs/en/6.x/guide/platforms/android/index.html#setting-the-version-code

    对于旧版本代码101078,您可能正在使用像Crosswalk这样的插件 .

  • 2

    要解决此问题,只需执行以下步骤即可解决您的.apk文件问题 .

    第1步:清洁cordova构建

    $ cordova clean
    

    第2步:再次生成“android-release-unsigned.apk”文件

    $ ionic cordova build --release android
    

    第3步:要签署未签名的APK,请运行jarsigner工具,该工具也包含在JDK中:

    $ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore path-to-your-app/apk/android-release-unsigned.apk alias_name
    

    第4步:您需要运行zip对齐工具来优化APK

    $ zipalign -v 4 path-to-your-app/apk/android-release-unsigned.apk path-to-your-app/apk/your-app-name.apk
    

    要么

    $ path-to-zipalign/zipalign -v 4 path-to-your-app/apk/android-release-unsigned.apk path-to-your-app/apk/your-app-name.apk
    

相关问题