【问题标题】:How to change version code after AGP 7.0.0-alpha15AGP 7.0.0-alpha15 后如何更改版本代码
【发布时间】:2021-05-05 07:03:32
【问题描述】:

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

android {
  defaultConfig {
    applicationVariants.all {
      if (buildType.name == "debug") {
        outputs.forEach { output ->
          (output as? com.android.build.gradle.internal.api.ApkVariantOutputImpl)?.versionCodeOverride = 1
        }
      }
    }
  }
}

在AGP 7.0.0-alpha15之后applicationVariants好像不见了,怎么改?

PS:plain gradle 好像还可以,上面是 Kotlin

编辑

通过below 的回答,我能够在构建中覆盖版本代码:

android {
  androidComponents.onVariants { appVariant ->
    if (appVariant.buildType == "release") {
      appVariant.outputs.forEach {
        it.versionCode.set(1)
      }
    }
  }
}

【问题讨论】:

  • ApplicationVariant 仍然存在并且有List<VariantOutput>
  • 在普通 gradle 中是的,但在 Kotlin DSL 中不是

标签: android gradle android-gradle-plugin android-gradle-7.0


【解决方案1】:

Variant API 将在 AGP 7.0.0 中更改为延迟评估模型,现在看来 Alpha 15 已经为此删除了旧 API。展望未来,您将需要使用androidComponents DSL,它可以访问变体。但是,我不确定您是否能够像这样重写版本代码。查看beforeVariantsonVariants 了解更多信息:

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)
  }
}

【讨论】:

    【解决方案2】:

    在Java插件代码中,可以这样设置版本代码和名称:

    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 之前。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-12
      • 2020-12-03
      • 2022-12-22
      • 2017-05-18
      • 1970-01-01
      • 2011-08-02
      • 1970-01-01
      相关资源
      最近更新 更多