首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在AGP 7.0.0-字母15之后更改版本代码

如何在AGP 7.0.0-字母15之后更改版本代码
EN

Stack Overflow用户
提问于 2021-05-05 07:03:32
回答 3查看 1.1K关注 0票数 8

在AGP 7.0.0-alpha15 15之前,我可以更改应用程序的版本代码,例如

代码语言:javascript
复制
android {
  defaultConfig {
    applicationVariants.all {
      if (buildType.name == "debug") {
        outputs.forEach { output ->
          (output as? com.android.build.gradle.internal.api.ApkVariantOutputImpl)?.versionCodeOverride = 1
        }
      }
    }
  }
}

applicationVariants似乎失踪后,AGP 7.0.0-字母15,如何改变它?

PS:平原区似乎没问题,上面是科特林。

编辑

有了below的回答,我就能够覆盖构建中的版本代码:

代码语言:javascript
复制
android {
  androidComponents.onVariants { appVariant ->
    if (appVariant.buildType == "release") {
      appVariant.outputs.forEach {
        it.versionCode.set(1)
      }
    }
  }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-05-06 07:31:50

变体API将更改为AGP 7.0.0中一个延迟评估的模型,看起来Alpha 15现在已经删除了这方面的旧API。接下来,您将需要使用androidComponents DSL,它允许访问变体。不过,我不确定您是否能够像这样重写版本代码。有关更多信息,请访问beforeVariantsonVariants

代码语言:javascript
复制
android {
  androidComponents.beforeVariants { variantBuilder ->
    // Callback before variants are built. Can be modified, but doesn't allow access to outputs
  }
  androidComponents.onVariants { variant ->
    // Callback after variants are built. Apparently it's read-only access at this point, but outputs are available here
    println(variant.outputs)
  }
}
票数 6
EN

Stack Overflow用户

发布于 2022-03-10 07:04:00

在Java插件代码中,可以设置版本代码&命名如下:

代码语言:javascript
复制
class SomePlugin implements Plugin<Project> {

    @Override
    @SuppressWarnings("UnstableApiUsage")
    public void apply(@NotNull Project project) {
    
        ApplicationAndroidComponentsExtension androidComponents = project.getExtensions()
                .getByType(ApplicationAndroidComponentsExtension.class);
    
        androidComponents.finalizeDsl(extension -> {
            for (AndroidSourceSet sourceSet : extension.getSourceSets()) {
                System.out.println(sourceSet.getName());
            }
        });
    
        int versionCode = 1;
        String versionName = "1.0.0";

        VariantSelector selector = androidComponents.selector().all();
        androidComponents.onVariants(selector, variant -> {
            for (VariantOutput variantOutput : variant.getOutputs()) {
                variantOutput.getVersionName().set( versionName );
                variantOutput.getVersionCode().set( versionCode );
                System.out.println(">>>> " +
                        variant.getName() + " " +
                        variantOutput.getVersionCode().get() + " / " + 
                        variantOutput.getVersionName().get());

            }
        });
    }
}

finalizeDsl发生在onVariants之前。

票数 1
EN

Stack Overflow用户

发布于 2022-10-20 04:31:52

代码语言:javascript
复制
android {
    // ..
    splits {
        abi {
            enable true
            reset()
            include 'x86', 'x86_64', 'armeabi', 'armeabi-v7a', 'arm64-v8a'
        }
    }
    // ..
}

androidComponents {
    onVariants(selector().all()) { appVariant ->
        for (VariantOutput variantOutput : appVariant.getOutputs()) {
            def versionCodes = ['[armeabi]'       : 100000,
                                '[armeabi-v7a]'   : 200000,
                                '[x86]'           : 300000,
                                '[arm64-v8a]'     : 400000,
                                '[x86_64]'        : 500000]
            String abi = variantOutput.getFilters().identifier;
            Integer version = versionCodes.get(abi) + versionCode
            if (appVariant.getName().contains("Debug")) {
                version += 10000
            }
            variantOutput.getVersionCode().set(version);
        }
    }
}

dependencies {
    // ...
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67396532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档