Android构建流程——篇三

这篇博客详细介绍了Android构建过程中四个关键任务:checkDebugManifest、generateDebugBuildConfig、prepareLintJar和mainApkListPersistenceDebug。内容包括每个任务的输入/输出、核心类及其功能,如清单文件校验、BuildConfig.java生成、lint.jar复制规则以及apk信息的gson文件生成。此外,还提到了自定义lint规则的相关资源链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Task5 checkDebugManifest

1. input/ouput

taskName:checkDebugManifest
=========================================================
output:/Users/apple/work/project/AndroidGradleTaskDemo/app/build/intermediates/check-manifest/debug

2. 核心类(CheckManifest)

@TaskAction
void check() {
   
    if (!isOptional && manifest != null && !manifest.isFile()) {
   
        throw new IllegalArgumentException(
                String.format(
                        "Main Manifest missing for variant %1$s. Expected path: %2$s",
                        getVariantName(), getManifest().getAbsolutePath()));
    }
}

该任务是校验操作,就是校验清单文件的合法性,不合法则中断任务,抛出异常

配置阶段操作

@Override
public void execute(@NonNull CheckManifest checkManifestTask) {
   
	//1. 设置任务实现类
    scope.getTaskContainer().setCheckManifestTask(checkManifestTask);
	
	//2. 设置相关入参
    checkManifestTask.setVariantName(
            scope.getVariantData().getVariantConfiguration().getFullName());
    checkManifestTask.setOptional(isManifestOptional);
    checkManifestTask.manifest =
            scope.getVariantData().getVariantConfiguration().getMainManifest();
	
	//3. 出参目录配置
    checkManifestTask.fakeOutputDir =
            new File(
                    scope.getGlobalScope().getIntermediatesDir(),
                    "check-manifest/" + scope.getVariantConfiguration().getDirName());
}

依赖任务:preBuildTask

Task6 generateDebugBuildConfig

BuildConfig.java想必大家非常熟悉,该任务就是生成它

1. input/output

taskName:generateDebugBuildConfig
=========================================================
output:/Users/apple/work/project/AndroidGradleTaskDemo/app/build/generated/source/buildConfig/debug
========================END==============================

2. 核心类(GenerateBuildConfig)

@TaskAction
void generate() throws IOException {
   
		
	  //1. 清理操作	
      // must clear the folder in case the packagename changed, otherwise,
      // there'll be two classes.
      File destinationDir = getSourceOutputDir();
      FileUtils.cleanOutputDir(destinationDir);
		
	  //2. 构建一个BuildConfig生成器,用于生成BuildConfig.java	
      BuildConfigGenerator generator = new BuildConfigGenerator(
              getSourceOutputDir(),
              getBuildConfigPackageName());

      // Hack (see IDEA-100046): We want to avoid reportin
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值