参照文章:https://www.jianshu.com/p/d53399cd507b
遇到的问题:
1、META-INF写成META-INFO。应用plugin时找不到相就的pluginid
2、自定义plugIn时没有声明package包名。一直报找不到自定义的plugin
3、可以自定义引用的名称:
group = 'com.yilong.plugin'
archivesBaseName = 'gradle-lib'//自定义名称
version = '1.0.0'
一、自定义Transform时输入的理解
JarInput包含了以下几种类型:
1、主appModule下的lib包中的jar包
--jarInput--fullCopyFiles---/Users/allenzhang/TestGradle/app/libs/core-3.3.3.jar
2、用户目录下的.gradle/cache目录下的,通过implementationa或者compile引用的第三方包
--jarInput--fullCopyFiles---/Users/allenzhang/.gradle/caches/modules-2/files-2.1/com.android.support.constraint/constraint-layout-solver/1.1.3/bde0667d7414c16ed62d3cfe993cff7f9d732373/constraint-layout-solver-1.1.3.jar
3、androidStudio安装目录,gradle/目录下的gradle插件,kotlin插件以及annotation处理插件。
--jarInput--fullCopyFiles---/Applications/Android Studio.app/Contents/gradle/m2repository/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.2.71/kotlin-stdlib-jdk7-1.2.71.jar
--jarInput--fullCopyFiles---/Applications/Android Studio.app/Contents/gradle/m2repository/org/jetbrains/kotlin/kotlin-stdlib/1.2.71/kotlin-stdlib-1.2.71.jar
--jarInput--fullCopyFiles---/Applications/Android Studio.app/Contents/gradle/m2repository/org/jetbrains/kotlin/kotlin-stdlib-common/1.2.71/kotlin-stdlib-common-1.2.71.jar
--jarInput--fullCopyFiles---/Applications/Android Studio.app/Contents/gradle/m2repository/org/jetbrains/annotations/13.0/annotations-13.0.jar
DirectoryInput包含了如下内容
1、javac包下面的class文件以及本工程的R.class资源文件,android.等包下的R.class文件。
--directoryInputs---fullCopyFiles--/Users/allenzhang/TestGradle/app/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes
2、tmp/kotlin-class包下的kotlinClass文件。同样是以.class结尾
--directoryInputs---fullCopyFiles---/Users/allenzhang/TestGradle/app/build/tmp/kotlin-classes/debug
拷贝方法如下所示:
static void fullCopyFiles(TransformInvocation transformInvocation) {
transformInvocation.outputProvider.deleteAll()
transformInvocation.inputs.each {TransformInput input ->
/**
*
1、输入源 --directoryInputs---fullCopyFiles---/Users/allenzhang/TestGradle/app/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes
* --directoryInputs---fullCopyFiles---/Users/allenzhang/TestGradle/app/build/tmp/kotlin-classes/debug
* --directoryInputs---fullCopyFiles---/Users/allenzhang/TestGradle/app/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes
2、目标目录
-/Users/allenzhang/TestGradle/app/build/intermediates/transforms/AjxTransform/debug/39.jar
*/
input.directoryInputs.each {DirectoryInput directoryInput ->
//name - a unique name for the content. For a given set of scopes/types/format it must be unique.
File excludeJar = transformInvocation.outputProvider.getContentLocation("exclude",directoryInput.contentTypes,directoryInput.scopes,Format.JAR)
AJXUtils.mergeJar(directoryInput.file, excludeJar)
// FileUtils.copyDirectory(directoryInput.file,excludeJar)
}
/**
*
1、输入源
--jarInput--fullCopyFiles---/Users/allenzhang/TestGradle/app/libs/core-3.3.3.jar
--jarInput--fullCopyFiles---/Applications/Android Studio.app/Contents/gradle/m2repository/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.2.71/kotlin-stdlib-jdk7-1.2.71.jar
--jarInput--fullCopyFiles---/Applications/Android Studio.app/Contents/gradle/m2repository/org/jetbrains/kotlin/kotlin-stdlib/1.2.71/kotlin-stdlib-1.2.71.jar
--jarInput--fullCopyFiles---/Users/allenzhang/.gradle/caches/modules-2/files-2.1/com.android.support.constraint/constraint-layout-solver/1.1.3/bde0667d7414c16ed62d3cfe993cff7f9d732373/constraint-layout-solver-1.1.3.jar
--jarInput--fullCopyFiles---/Applications/Android Studio.app/Contents/gradle/m2repository/org/jetbrains/kotlin/kotlin-stdlib-common/1.2.71/kotlin-stdlib-common-1.2.71.jar
--jarInput--fullCopyFiles---/Applications/Android Studio.app/Contents/gradle/m2repository/org/jetbrains/annotations/13.0/annotations-13.0.jar
--jarInput--fullCopyFiles---/Users/allenzhang/TestGradle/runtime/build/intermediates/intermediate-jars/debug/classes.jar
5\目标目录
/Users/allenzhang/TestGradle/app/build/intermediates/transforms/AjxTransform/debug/0.jar
*/
input.jarInputs.each {JarInput jarInput ->
def dest = transformInvocation.outputProvider.getContentLocation(jarInput.name,jarInput.contentTypes,jarInput.scopes,Format.JAR)
println("--jarInput--fullCopyFiles---"+jarInput.file)
FileUtils.copyFile(jarInput.file,dest)
}
}
}
自定义Transform的输出目录
/Users/allenzhang/TestGradle/app/build/intermediates/transforms/XXXTransform/debug/
其中XXXTransform是自定义Transform的名称
该目录内只支持jar包文件,所以输出directory时需要把所有class文件合成一个jar文件。