返回

Gradle 移除 versionCode 和 versionName 的影响

Android

Gradle 弃用 versionCode 和 versionName:更新 AndroidManifest.xml 版本号的解决方案

理解 Gradle 中 versionCode 和 versionName 的移除

随着 Android Studio 正式发布 com.android.tools.build:gradle:4.1.0 版本,Gradle 中原本用于标识应用程序内部版本和向用户显示版本的 versionCode 和 versionName 属性已被移除。此举旨在简化构建流程,但同时也引发了一些问题,最明显的问题就是 AndroidManifest.xml 中的版本号无法自动更新。

解决 AndroidManifest.xml 中版本号更新问题

虽然 Gradle 中弃用了 versionCode 和 versionName,但 AndroidManifest.xml 中的版本号仍然需要更新。不更新会导致各种问题,例如无法将应用程序发布到 Google Play 商店。以下是更新版本号的步骤:

  1. 添加 Android App Signing 插件: 在项目根目录的 build.gradle 文件中,添加以下行:

    classpath 'com.google.android.gms:google-services:4.3.14'
    
  2. 应用 Android App Signing 插件: 在 app/build.gradle 文件中,添加以下内容:

    apply plugin: 'com.android.app-signing'
    
  3. 配置 App Signing 配置文件: 在 app/build.gradle 文件中,添加以下代码块:

    android {
        ...
        signingConfigs {
            debug {
                storeFile file('debug.keystore')
                storePassword 'android'
                keyAlias 'androiddebugkey'
                keyPassword 'android'
            }
            release {
                storeFile file('release.keystore')
                storePassword 'password'
                keyAlias 'key-alias'
                keyPassword 'password'
            }
        }
    }
    

    确保替换 debug 和 release 密钥库文件、密码和别名。

  4. 构建并重新签名 APK: 运行以下命令构建并重新签名 APK:

    ./gradlew assemble
    
  5. 验证版本号更新: 重新构建 APK 后,打开 AndroidManifest.xml 文件并检查 versionCode 和 versionName 是否已更新。

常见问题解答

1. 为什么 Gradle 要移除 versionCode 和 versionName?

Gradle 弃用这两个属性旨在简化构建流程,因为它们现在由 Google Play App Signing 服务自动管理。

2. 不更新 AndroidManifest.xml 中的版本号有什么后果?

如果不更新版本号,会导致应用程序无法发布到 Google Play 商店或出现其他问题。

3. 我该如何更新 AndroidManifest.xml 中的版本号?

按照上述步骤添加 Android App Signing 插件并配置密钥库信息即可更新版本号。

4. 使用 Android App Signing 插件安全吗?

使用 Android App Signing 插件是安全的,因为它由 Google 提供并用于管理应用程序的签名过程。

5. 我在哪里可以找到更多关于 Android App Signing 的信息?

有关 Android App Signing 的更多信息,请访问 Google Developers 网站

结论

通过使用 Android App Signing 插件并正确配置密钥库信息,你可以解决 AndroidManifest.xml 中的版本号更新问题。此过程虽然增加了构建流程的复杂性,但对于确保应用程序的无缝发布至关重要。