美文网首页
常用 gradle 命令

常用 gradle 命令

作者: 北疆小兵 | 来源:发表于2022-11-16 09:47 被阅读0次

    库的依赖

    • 查询库的依赖
    gradlew app:dependencies
    

    不过这种命令行方式查看依赖树出来的信息太多,看的有些费劲
    所以官方又推出了Scan工具来帮助我们更加方便地查看依赖树
    在项目根目录位置下运行

    gradle build \--scan
    

    即可,然后会生成 HTML 格式的分析文件的分析文件
    分析文件会直接上传到Scan官网,命令行最后会给出远程地址

    • 将依赖树输入到 文件中
    gradlew -q :app:dependencies > dependencies.txt
    
    • gradlew [module_name]:dependencies

    [module_name] 换成需要打印的模块名,例如 gradlew account:dependencies ->account_dependencies.txt 将会把 account模块的
    依赖信息写入到 account_dependencies.txt

    • 排除某个库的依赖
    
      implementation(rootProject.ext.thirddependencies["sf-upload-sdk"]) {
            force = true
            exclude group: 'com.google.guava'
            exclude group: 'com.sf.andlibrary'
            exclude group: 'com.android.support'
        }
    
    • 查看gradle报错信息
    ./gradlew build -s
    ./gradlew build --scan
    
    

    自定义Transform

      1. 写一个继承 Transform 的类
    class HenCodeTransorm extends Transform{
        @Override
        String getName() {
            return "hencoder222"
        }
    
        /**
         * 定义 Transform的输入范围为 class 或者 jar 文件
         * @return
         */
        @Override
        Set<QualifiedContent.ContentType> getInputTypes() {
            return TransformManager.CONTENT_CLASS
        }
    
        /**
         * 定义项目范围,例如主项目、子项目、第三方库、所有?
         * @return
         */
        @Override
        Set<? super QualifiedContent.Scope> getScopes() {
            return TransformManager.SCOPE_FULL_PROJECT
        }
    
        @Override
        boolean isIncremental() {
            return false
        }
    }
    
    
    
    
    

    ** 2将 Transform 注入到打包过程

    class HenCoder implements org.gradle.api.Plugin<Project>{
        @Override
        void apply(Project target) {
            //所有的扩展
            def extension = target.extensions.create("hencoder",HencoderExtension)
    
            target.afterEvaluate {
                println "Hello name: ${extension.name}, value:${extension.value}"
            }
    
            def transform = new HenCodeTransorm()
            //拿到com.android.application 这个插件的扩展,去干预 android 的打包流程
            def baseExtension = target.extensions.getByType(BaseExtension)
            //将 HenCodeTransorm 注入到打包过程
            baseExtension.registerTransform(transform)
        }
    }
    

    sync 一下项目,将会在gradle 的窗口显示

    image.png

    直接运行,发现会报错, 原因是需要实现

    List of apks:
    [0] '/Users/jerry/work/FastAndroid/app/build/outputs/apk/devPay/debug/com.apache.fastandroid-V1.0.0-100-debug.apk'
    The APKs are invalid.
    

    原因是需要在 HenCodeTransorm 中,实现 transform 方法

    void transform(TransformInvocation transformInvocation) throws TransformException, InterruptedException, IOException {
            super.transform(transformInvocation)
    
            def inputs = transformInvocation.inputs
            def outputProvider = transformInvocation.outputProvider
            inputs.each {
                it.jarInputs.each {
                    File dest = outputProvider.getContentLocation(it.name,it.contentTypes,it.scopes, Format.JAR)
                    def msg = "Jar: ${it.file}" +" , dest:${dest}"
                    println(msg)
                    FileUtils.copyFile(it.file,dest)
                }
    
                it.directoryInputs.each {
                    File dest = outputProvider.getContentLocation(it.name,it.contentTypes,it.scopes, Format.DIRECTORY)
    //                rintln("Dir: ${it.file},Dest:${dest}")
                    def msg = "Dir: ${it.file}" +" , dest:${dest}"
                    println(msg)
    
    
                    FileUtils.copyDirectory(it.file,dest)
                }
            }
        }
    
    

    相关文章

      网友评论

          本文标题:常用 gradle 命令

          本文链接:https://www.haomeiwen.com/subject/dvctohtx.html