Skip to content

Commit 41f188e

Browse files
committed
最低支持到AGP 1.1.0
1 parent 9b346f5 commit 41f188e

File tree

5 files changed

+56
-78
lines changed

5 files changed

+56
-78
lines changed

library/build.gradle

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,6 @@ java {
1717
}
1818

1919
dependencies {
20-
implementation fileTree(dir: 'libs', include: ['*.jar'])
2120
implementation gradleApi()
22-
implementation localGroovy()
2321
implementation 'com.squareup:javapoet:1.13.0'
24-
implementation 'com.android.tools.build:gradle:3.0.0'
2522
}

library/src/main/groovy/cn/hx/plugin/junkcode/ext/AndroidJunkCodeExt.groovy

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ class AndroidJunkCodeExt {
77

88
NamedDomainObjectContainer<JunkCodeConfig> variantConfig
99

10+
AndroidJunkCodeExt(NamedDomainObjectContainer<JunkCodeConfig> variantConfig) {
11+
this.variantConfig = variantConfig
12+
}
13+
1014
void variantConfig(Action<? super NamedDomainObjectContainer<JunkCodeConfig>> action) {
1115
action.execute(variantConfig)
1216
}

library/src/main/groovy/cn/hx/plugin/junkcode/plugin/AndroidJunkCodePlugin.groovy

Lines changed: 47 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -3,82 +3,71 @@ package cn.hx.plugin.junkcode.plugin
33
import cn.hx.plugin.junkcode.ext.AndroidJunkCodeExt
44
import cn.hx.plugin.junkcode.ext.JunkCodeConfig
55
import cn.hx.plugin.junkcode.task.AndroidJunkCodeTask
6-
import com.android.build.gradle.AppExtension
76
import org.gradle.api.Plugin
87
import org.gradle.api.Project
98

109
class AndroidJunkCodePlugin implements Plugin<Project> {
1110

1211
@Override
1312
void apply(Project project) {
14-
def android = project.extensions.findByType(AppExtension)
15-
if (!android) {
13+
def android = project.extensions.findByName("android")
14+
if (!android || !android.hasProperty("applicationVariants")) {
1615
throw IllegalArgumentException("must apply this plugin after 'com.android.application'")
1716
}
18-
def generateJunkCodeExt = project.extensions.create("androidJunkCode", AndroidJunkCodeExt)
19-
generateJunkCodeExt.variantConfig = project.container(JunkCodeConfig.class, new JunkCodeConfigFactory())
20-
17+
def generateJunkCodeExt = project.extensions.create("androidJunkCode", AndroidJunkCodeExt, project.container(JunkCodeConfig))
2118
android.applicationVariants.all { variant ->
2219
def variantName = variant.name
2320
def junkCodeConfig = generateJunkCodeExt.variantConfig.findByName(variantName)
2421
if (junkCodeConfig) {
25-
createGenerateJunkCodeTask(project, android, variant, junkCodeConfig)
26-
}
27-
}
28-
}
29-
30-
private def createGenerateJunkCodeTask = { project, android, variant, junkCodeConfig ->
31-
def variantName = variant.name
32-
def generateJunkCodeTaskName = "generate${variantName.capitalize()}JunkCode"
33-
def dir = new File(project.buildDir, "generated/source/junk/$variantName")
34-
def resDir = new File(dir, "res")
35-
def javaDir = new File(dir, "java")
36-
def manifestFile = new File(dir, "AndroidManifest.xml")
37-
def packageName = android.namespace//AGP 7.3+
38-
if (!packageName) {//AGP under 7.3
39-
//从AndroidManifest.xml找到package name
40-
for (int i = 0; i < variant.sourceSets.size(); i++) {
41-
def sourceSet = variant.sourceSets[i]
42-
if (sourceSet.manifestFile.exists()) {
22+
def junkCodeNamespace = ""
23+
if (android.hasProperty("namespace")) {//AGP 7.3+
24+
junkCodeNamespace = android.namespace
25+
} else {
26+
//从AndroidManifest.xml找到package name
4327
def parser = new XmlParser()
44-
def node = parser.parse(sourceSet.manifestFile)
45-
packageName = node.attribute("package")
46-
if (packageName) {
28+
for (int i = 0; i < sourceSets.size(); i++) {
29+
def sourceSet = sourceSets[i]
30+
if (sourceSet.manifestFile.exists()) {
31+
def node = parser.parse(sourceSet.manifestFile)
32+
if (node.attribute("package")) {
33+
junkCodeNamespace = node.attribute("package")
34+
break
35+
}
36+
}
37+
}
38+
}
39+
def junkCodeOutDir = new File(project.buildDir, "generated/source/junk/$variantName")
40+
def generateJunkCodeTaskName = "generate${variantName.capitalize()}JunkCode"
41+
def generateJunkCodeTask = project.tasks.create(generateJunkCodeTaskName, AndroidJunkCodeTask){
42+
config = junkCodeConfig
43+
namespace = junkCodeNamespace
44+
outDir = junkCodeOutDir
45+
}
46+
def manifestFile = new File(junkCodeOutDir, "AndroidManifest.xml")
47+
//将自动生成的AndroidManifest.xml加入到一个未被占用的manifest位置(如果都占用了就不合并了,通常较少出现全被占用情况)
48+
for (int i = variant.sourceSets.size() - 1; i >= 0; i--) {
49+
def sourceSet = variant.sourceSets[i]
50+
if (!sourceSet.manifestFile.exists()) {
51+
sourceSet.manifest.srcFile(manifestFile)
4752
break
4853
}
4954
}
55+
def javaDir = new File(junkCodeOutDir, "java")
56+
variant.registerJavaGeneratingTask(generateJunkCodeTask, javaDir)
57+
def resDir = new File(junkCodeOutDir, "res")
58+
if (variant.respondsTo("registerGeneratedResFolders")) {//AGP 3.0.0+
59+
variant.registerGeneratedResFolders(project
60+
.files(resDir)
61+
.builtBy(generateJunkCodeTask))
62+
if (variant.hasProperty("mergeResourcesProvider")) {//AGP 3.3.0+
63+
variant.mergeResourcesProvider.configure { dependsOn(generateJunkCodeTask) }
64+
} else {
65+
variant.mergeResources.dependsOn(generateJunkCodeTask)
66+
}
67+
} else {
68+
variant.registerResGeneratingTask(generateJunkCodeTask, resDir)//AGP 1.1.0+
69+
}
5070
}
5171
}
52-
if (!packageName) {
53-
packageName = ""
54-
}
55-
def generateJunkCodeTask = project.task(generateJunkCodeTaskName, type: AndroidJunkCodeTask) {
56-
config = junkCodeConfig
57-
manifestPackageName = packageName
58-
outDir = dir
59-
}
60-
//将自动生成的AndroidManifest.xml加入到一个未被占用的manifest位置(如果都占用了就不合并了,通常较少出现全被占用情况)
61-
for (int i = variant.sourceSets.size() - 1; i >= 0; i--) {
62-
def sourceSet = variant.sourceSets[i]
63-
if (!sourceSet.manifestFile.exists()) {
64-
sourceSet.manifest.srcFile(manifestFile)
65-
break
66-
}
67-
}
68-
if (variant.respondsTo("registerGeneratedResFolders")) {
69-
variant.registerGeneratedResFolders(project
70-
.files(resDir)
71-
.builtBy(generateJunkCodeTask))
72-
if (variant.hasProperty("mergeResourcesProvider")) {
73-
variant.mergeResourcesProvider.configure { dependsOn(generateJunkCodeTask) }
74-
} else {
75-
//noinspection GrDeprecatedAPIUsage
76-
variant.mergeResources.dependsOn(generateJunkCodeTask)
77-
}
78-
} else {
79-
//noinspection GrDeprecatedAPIUsage
80-
variant.registerResGeneratingTask(generateJunkCodeTask, resDir)
81-
}
82-
variant.registerJavaGeneratingTask(generateJunkCodeTask, javaDir)
8372
}
8473
}

library/src/main/groovy/cn/hx/plugin/junkcode/plugin/JunkCodeConfigFactory.groovy

Lines changed: 0 additions & 12 deletions
This file was deleted.

library/src/main/groovy/cn/hx/plugin/junkcode/task/AndroidJunkCodeTask.groovy

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import groovy.text.GStringTemplateEngine
1111
import org.gradle.api.DefaultTask
1212
import org.gradle.api.tasks.Input
1313
import org.gradle.api.tasks.Nested
14-
import org.gradle.api.tasks.OutputDirectories
14+
import org.gradle.api.tasks.OutputDirectory
1515
import org.gradle.api.tasks.TaskAction
1616

1717
import javax.lang.model.element.Modifier
@@ -23,12 +23,12 @@ class AndroidJunkCodeTask extends DefaultTask {
2323
static abc = "abcdefghijklmnopqrstuvwxyz".toCharArray()
2424

2525
@Nested
26-
JunkCodeConfig config = new JunkCodeConfig()
26+
JunkCodeConfig config
2727

2828
@Input
29-
String manifestPackageName = ""
29+
String namespace
3030

31-
@OutputDirectories
31+
@OutputDirectory
3232
File outDir
3333

3434
@TaskAction
@@ -145,7 +145,7 @@ class AndroidJunkCodeTask extends DefaultTask {
145145
.addModifiers(Modifier.PROTECTED)
146146
.addParameter(bundleClassName, "savedInstanceState")
147147
.addStatement("super.onCreate(savedInstanceState)")
148-
.addStatement("setContentView(\$T.layout.${layoutName})", ClassName.get(manifestPackageName, "R"))
148+
.addStatement("setContentView(\$T.layout.${layoutName})", ClassName.get(namespace, "R"))
149149
.build())
150150
//其它方法
151151
for (int j = 0; j < config.methodCountPerClass; j++) {

0 commit comments

Comments
 (0)