常用 gradle 命令

2022-11-16  本文已影响0人  北疆小兵

库的依赖

gradlew app:dependencies

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

gradle build \--scan

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

gradlew -q :app:dependencies > dependencies.txt

[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'
    }
./gradlew build -s
./gradlew build --scan

自定义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)
            }
        }
    }

上一篇下一篇

猜你喜欢

热点阅读