gradle檢測依賴的腳本

打正式包的時候,一般不允許sdk使用snapshot版本來封板,打封板包的時候如果檢測到有snapshot依賴,直接退出打包。下面是依賴檢測的腳本,免費貢獻給大家參考。

gradle.projectsEvaluated{
  //收集項目的直接依賴信息
  def extension_dep_check = project.extensions.getByName("android")
  extension_dep_check.applicationVariants.all { variant ->
    println(variant.name) //debug、release

    def task = project.tasks.create("checkSnapshot" + variant.name.capitalize())
    task.doFirst{
      Set<String> deps = new HashSet<>()
      project.rootProject.buildscript.configurations.classpath.dependencies.each { dep ->
        if (dep.version != null && dep.group != null && (dep.version.endsWith('-SNAPSHOT') || dep.version.endsWith('+'))) {
           deps.add("${dep.group}:${dep.name}:${dep.version}" + '\r\n')
         }
      }
     //這里檢測的是Compile的依賴,要想檢測runtime依賴,可以改成RuntimeClasspath
      def configuration = project.configurations."${variant.name}CompileClasspath"
      configuration.resolvedConfiguration.lenientConfiguration.allModuleDependencies.each {
        parse_snapshot_dep(it,deps)
      }
   
     //kapt依賴檢測
      def kapt_configuration = project.configurations."kapt${variant.name.capitalize()}"
      kapt_configuration.resolvedConfiguration.lenientConfiguration.allModuleDependencies.each {
        parse_snapshot_dep(it,deps)
      }

      File dir = new File(project.projectDir.absolutePath + "/dependencies")
      if(!dir.exists()){
        dir.mkdir()
      }
      def inputFile = new File(dir.absolutePath, "dependencies-snapshot.txt")
      if(inputFile.exists()){
        inputFile.delete()
      }
      inputFile.createNewFile()
      deps.each {
        inputFile.append(it)
      }
    }
    task.group = "check"
    task.dependsOn variant.getPreBuildProvider().get()
  }
}


  def void parse_snapshot_dep(dependency, deps){
    def identifier = dependency.module.id

      if (identifier.version != "null" && identifier.version != "unspecified"
          && (identifier.version.endsWith('-SNAPSHOT') || identifier.version.endsWith('+'))) {
        deps.add("${identifier.group}:${identifier.name}:${identifier.version}" + '\r\n')
      }

    if(dependency.children != null && dependency.children.size() > 0){
      dependency.children.each{
        parse_snapshot_dep(it, deps)
      }
    }
  }

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容