Android构建流程——篇八

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)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值