Android构建流程——篇八

这篇博客详细介绍了Android构建过程中的关键任务,包括checkDebugLibraries用于检查多模块打包冲突,processDebugJavaRes执行Java资源复制,transformResourcesWithMergeJavaResForDebug合并Java资源,validateSigningDebug验证调试模式签名,以及packageDebug任务打包APK。每个任务的输入/输出及核心类都进行了说明。

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

Task29 checkDebugLibraries

1. inut/ouput

taskName:checkDebugLibraries
=========================================================
output:/Users/dingbaosheng/work/mockuai/project/AndroidGradleTaskDemo/app/build/intermediates/check-libraries/debug

这个任务就是用来做校验的,如果存在多个modules打包成相同库,则会提示报错

2. 核心类(CheckMultiApkLibrariesTask)

@TaskAction
fun taskAction() {
   
     // Build a map of libraries to their corresponding modules. If two modules package the same
     // library, we will use the map to output a user-friendly error message.
     val map = mutableMapOf<String, MutableList<String>>()
     var found = false
     for (artifact in featureTransitiveDeps) {
   
         // Sanity check. This should never happen.
         if (artifact.id.componentIdentifier !is ProjectComponentIdentifier) {
   
             throw GradleException(
                 artifact.id.componentIdentifier.displayName + " is not a Gradle project.")
         }

         val projectPath =
                 (artifact.id.componentIdentifier as ProjectComponentIdentifier).projectPath
         if (artifact.file.isFile) {
   
             found = found || updateLibraryMap(artifact.file, projectPath, map)
         }
     }

     if (found) {
   
         // Build the error message. Sort map and projectPaths for consistency.
         val output = StringBuilder()
         for ((library, projectPaths) in map.toSortedMap()) {
   
             if (projectPaths.size > 1) {
   
                 output
                     .append(projectPaths.sorted().joinToString(prefix = "[", postfix = "]"))
                     .append(" all package the same library [$library].\n")
             }
         }
         throw GradleException(output.toString())
     }
 }

private fun updateLibraryMap(
  file: File,
    projectPath: String,
    map: MutableMap<String, MutableList<String>>
): Boolean {
   
    var found = false
    for (library in Files.readLines(file, Charsets.UTF_8)) {
   
        val libraryWithoutVariant = library.substringBeforeLast("::")
        if (map.containsKey(libraryWithoutVariant)) {
   
            found = true
            map[libraryWithoutVariant]?.add(projectPath)
        } else {
   
            map[libraryWithoutVariant] = mutableListOf(projectPath)
        }
    }
    return found
}

Task30 processDebugJavaRes

1. 预操作

在debug/main目录新增resources添加文件

1. input/ouput

taskName:processDebugJavaRes
input:/Users/dingbaosheng/work/mockuai/project/Andro
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值