Android gradle apk拆分,在代码中获取versionCode和versionName

标签 android gradle

我们开始拆分 APK 以减小 APK 的大小。而且我们无法弄清楚为什么我们在代码(Java)中获取的 versionCode 总是默认的。

这是相关的gradle:

defaultConfig {
    applicationId applicationIdPrefix
    versionCode 1000
    versionName "3.3.0"

// This is the configuration we want to publish
defaultPublishConfig "productionRelease"

applicationVariants.all { variant ->
  def apkName = "$projectName-${variant.name}-v${versionString}.${baseVersionCode}.apk"

  variant.outputs.each { output ->
    // Redefine the versionCode and the apkName to include ABI when available
    def abiName = output.getFilter(OutputFile.ABI)
    def baseAbiVersionCode = project.ext.abiCodes.get(abiName)

    if (baseAbiVersionCode != null) {
      output.versionCodeOverride = variant.versionCode + baseAbiVersionCode
      output.versionNameOverride = "$versionString (${output.versionCodeOverride})"

这是检索versionNameversionCode 的方法:

BuildConfig.VERSION_NAME
BuildConfig.VERSION_CODE

它们总是 3.3.0 和 1000。为什么?我们想要获取这些值,因为我们想要在设置下显示它们。

最佳答案

简而言之,改成这样,问题就解决了:

PackageInfo pInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
String version = pInfo.versionName;
int verCode = pInfo.versionCode;

在我们拆分我们的 APK 后,以下内容并没有给我们正确的版本名称和版本代码。我想发生的事情是 BuildConfig.java 是在成绩同步期间生成的。

String versionName = BuildConfig.VERSION_NAME;
int versionCode = BuildConfig.VERSION_CODE;

也许这就是为什么它已过时并且与我们的实际版本代码不匹配的原因,我们的实际版本代码已被以下两行 gradle 覆盖:

output.versionCodeOverride = variant.versionCode + baseAbiVersionCode
output.versionNameOverride = "$versionString (${output.versionCodeOverride})".

关于Android gradle apk拆分,在代码中获取versionCode和versionName,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44317187/

相关文章:

android - 如何在屏幕旋转或系统主题更改后将光标移动到 TextField 的末尾并保持键盘显示?

android - 如何使用 GSON 解析 JSON 响应(不同对象类型)

android - Android Gradle Sync错误

Android Studio 从存储库导入 aar 文件使依赖项消失

android - 主键更新后的sqlite索引

java - 如何从 URL 编辑 Json key (Android Studio)

gradle - 如何在Gradle中定义人工插件的发布

windows - Gradle无法运行我想要的shell命令行

gradle - 我如何在 sbt 中使用变量

java - 在 Java 模块 Android Studio 中使用混淆器