Skip to content

Commit 76c6d40

Browse files
committed
string生成支持自定义
1 parent dbeb26b commit 76c6d40

File tree

8 files changed

+340
-577
lines changed

8 files changed

+340
-577
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ buildscript {
1111
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
1212
classpath "com.getkeepsafe.dexcount:dexcount-gradle-plugin:3.0.1"
1313
if (PLUGIN_ENABLE.toBoolean()) {
14-
classpath "com.github.qq549631030:android-junk-code:1.2.8"
14+
classpath "com.github.qq549631030:android-junk-code:1.2.9"
1515
}
1616
// NOTE: Do not place your application dependencies here; they belong
1717
// in the individual module build.gradle files

library/gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#project
22
GROUP=com.github.qq549631030
3-
VERSION_NAME=1.2.8
3+
VERSION_NAME=1.2.9
44

55
POM_ARTIFACT_ID=android-junk-code
66
POM_NAME=AndroidJunkCode

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ class JunkCodeConfig {
3838
@Internal
3939
Action<StringBuilder> drawableGenerator = null
4040

41+
@Internal
42+
Action<StringBuilder> stringGenerator = null
43+
4144
@Internal
4245
String name = ""
4346

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

0 commit comments

Comments
 (0)