已解决:Cordova Gradle 项目:需要覆盖 platformBuildVersionCode

SOLVED: Cordova Gradle project: need to override platformBuildVersionCode

提问人:Phil B 提问时间:11/11/2023 最后编辑:Phil B 更新时间:11/17/2023 访问量:19

问:

关于如何覆盖 gradle build 和 AAPT 进程添加到 apk 清单的默认 platformBuildVersionCode 和 platformBuildVersionName 值,我陷入了两难境地。 我需要这样做的原因是,对于以前使用较旧的 Cordova (v9.0.0) 和 gradle 版本 (v4.2.2?) 构建的旧版应用程序,该应用程序在 apk 的清单中生成了以下内容:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="xxx.yyy.zzz"
    android:versionCode="21200"
    android:versionName="2.1.2"
    android:compileSdkVersion="28"
    android:compileSdkVersionCodename="9"
    platformBuildVersionCode="21200"
    platformBuildVersionName="2.1.2">
    <uses-sdk
        android:minSdkVersion="22"
        android:targetSdkVersion="30" />
    ...

我不是 100% 确定为什么在早期的 Gradle 构建期间设置了 platformBuildVersionCode 和 platformBuildVersionName 值并应用了 versionCode 和 versionName 值(可能是这个:https://issuetracker.google.com/issues/124227171?)但该应用程序是与这些一起发布的,所以现在必须忍受它。 该应用程序使用 PouchDB 将数据存储在 indexedDB 中,并且需要相关数据才能通过更新保持可用。

我现在正在尝试使用 Cordova (v12.0.0) 和 Gradle v7.6.3 进行构建,并更新了插件和 targetSDK,但以下是 appk 清单中生成的内容:

<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="xxx.yyy.zzz"
    android:versionCode="21300"
    android:versionName="2.1.3"
    android:compileSdkVersion="33"
    android:compileSdkVersionCodename="13"
    platformBuildVersionCode="33"
    platformBuildVersionName="13">
    <uses-sdk
        android:minSdkVersion="24"
        android:targetSdkVersion="33" />
    ...

新安装工作正常,但它不会作为旧安装的更新安装,因为 Android 认为 platformBuildVersionCode 现在较低。(错误:包与同名的现有包冲突。

为了更新 platformBuild 值,我尝试在 config.xml 和 AndroidManifest.xml 中指定 platformBuildVersionCode (“21300”) 和 platformBuildVersionName (“2.1.3”),但这些设置似乎在以后被忽略或覆盖。

我还尝试将以下相应行添加到gradle.build文件中,但这会导致构建错误:“找不到参数[21300]的方法platformBuildVersionCode()...”。

android { 
    namespace cordovaConfig.PACKAGE_NAMESPACE
    defaultConfig {
        versionCode cdvVersionCode ?: new BigInteger("" + privateHelpers.extractIntFromManifest("versionCode"))
        applicationId cordovaConfig.PACKAGE_NAMESPACE

        minSdkVersion cordovaConfig.MIN_SDK_VERSION
        if (cordovaConfig.MAX_SDK_VERSION != null) {
            maxSdkVersion cordovaConfig.MAX_SDK_VERSION
        }
        targetSdkVersion cordovaConfig.SDK_VERSION
        compileSdkVersion cordovaConfig.COMPILE_SDK_VERSION
        platformBuildVersionCode 21300
        platformBuildVersionName "2.1.3"
    }
...

(注意:我已经尝试了 platformBuildVersionCode 的带引号和不带引号的变体,结果相同。

我开始怀疑是 AAPT 进程可能添加了这些内容并覆盖了构建过程中通过 config.xml 或 AndroidManifest.xml 提供的任何内容。 欢迎就如何让 apk 的清单具有 platformBuildVersionCode=“21300”(和 platformBuildVersionName “2.1.3”)提出任何建议?

提前致谢!

问题已解决:

  1. 我随后发现可以使用 Apktool 更改清单,但是......
  2. 遇到的更新问题实际上是由于其他原因造成的:调试版本发生时发生,因为调试密钥已更改(可能是由于更改了 Android 构建工具版本?
cordova gradle build.gradle

评论

0赞 Eric 11/17/2023
我投票关闭这个问题,因为解决了

答: 暂无答案