11package cn.hx.plugin.junkcode.plugin
22
3- import cn.hx.plugin.junkcode.ext.AndroidJunkCodeExt
4- import cn.hx.plugin.junkcode.ext.JunkCodeConfig
5- import cn.hx.plugin.junkcode.task.AndroidJunkCodeTask
3+
64import org.gradle.api.Plugin
75import org.gradle.api.Project
86
@@ -19,78 +17,8 @@ class AndroidJunkCodePlugin implements Plugin<Project> {
1917 if (androidComponents && androidComponents. hasProperty(" pluginVersion" )
2018 && (androidComponents. pluginVersion. major > 7 || androidComponents. pluginVersion. minor >= 4 )) {
2119 new NewVariantApiPlugin (). apply(project)
22- return
23- }
24- def generateJunkCodeExt = project. extensions. create(" androidJunkCode" , AndroidJunkCodeExt , project. container(JunkCodeConfig ))
25- android. applicationVariants. all { variant ->
26- def variantName = variant. name
27- def junkCodeConfig = generateJunkCodeExt. variantConfig. findByName(variantName)
28- if (generateJunkCodeExt. debug) {
29- println (" AndroidJunkCode: generate code for variant $variantName ? ${ junkCodeConfig != null} " )
30- }
31- if (junkCodeConfig) {
32- def junkCodeNamespace = " "
33- if (android. hasProperty(" namespace" ) && android. namespace) {// AGP 4.2.0+
34- junkCodeNamespace = android. namespace
35- } else {
36- // 从AndroidManifest.xml找到package name
37- def parser = new XmlParser ()
38- for (int i = 0 ; i < sourceSets. size(); i++ ) {
39- def sourceSet = sourceSets[i]
40- if (sourceSet. manifestFile. exists()) {
41- def node = parser. parse(sourceSet. manifestFile)
42- if (node. attribute(" package" )) {
43- junkCodeNamespace = node. attribute(" package" )
44- break
45- }
46- }
47- }
48- }
49- def junkCodeOutDir = new File (project. buildDir, " generated/source/junk/$variantName " )
50- def generateJunkCodeTaskName = " generate${ variantName.capitalize()} JunkCode"
51- def generateJunkCodeTask = project. tasks. create(generateJunkCodeTaskName, AndroidJunkCodeTask ) {
52- config = junkCodeConfig
53- namespace = junkCodeNamespace
54- outDir = junkCodeOutDir
55- }
56- def manifestFile = new File (junkCodeOutDir, " AndroidManifest.xml" )
57- // 将自动生成的AndroidManifest.xml加入到一个未被占用的manifest位置(如果都占用了就不合并了,通常较少出现全被占用情况)
58- for (int i = variant. sourceSets. size() - 1 ; i >= 0 ; i-- ) {
59- def sourceSet = variant. sourceSets[i]
60- if (! sourceSet. manifestFile. exists()) {
61- sourceSet. manifest. srcFile(manifestFile)
62- // AGP4.1.0+
63- def processManifestTaskName = " process${ variantName.capitalize()} MainManifest"
64- def processManifestTask = project. tasks. findByName(processManifestTaskName)
65- if (processManifestTask == null ) {
66- // before AGP4.1.0
67- processManifestTaskName = " process${ variantName.capitalize()} Manifest"
68- processManifestTask = project. tasks. findByName(processManifestTaskName)
69- }
70- if (processManifestTask) {
71- project. tasks. named(processManifestTaskName). configure {
72- it. dependsOn(generateJunkCodeTask)
73- }
74- }
75- break
76- }
77- }
78- def javaDir = new File (junkCodeOutDir, " java" )
79- variant. registerJavaGeneratingTask(generateJunkCodeTask, javaDir)
80- def resDir = new File (junkCodeOutDir, " res" )
81- if (variant. respondsTo(" registerGeneratedResFolders" )) {// AGP 3.0.0+
82- variant. registerGeneratedResFolders(project
83- .files(resDir)
84- .builtBy(generateJunkCodeTask))
85- if (variant. hasProperty(" mergeResourcesProvider" )) {// AGP 3.3.0+
86- variant. mergeResourcesProvider. configure { dependsOn(generateJunkCodeTask) }
87- } else {
88- variant. mergeResources. dependsOn(generateJunkCodeTask)
89- }
90- } else {
91- variant. registerResGeneratingTask(generateJunkCodeTask, resDir)// AGP 1.1.0+
92- }
93- }
20+ } else {
21+ new OldVariantApiPlugin (). apply(project)
9422 }
9523 }
9624}
0 commit comments