Skip to content

Commit 9f14873

Browse files
author
huangx
committed
优化性能
1 parent d96f742 commit 9f14873

2 files changed

Lines changed: 39 additions & 58 deletions

File tree

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,8 @@ androidJunkCode {
6666
#cn.hx.plugin.ui为前面配置的packageBase
6767
-keep class cn.hx.plugin.ui.** {*;}
6868
```
69+
### 打包
70+
执行配置变体的打包命令:assembleXXX(XXX是你配置的变体,如:assembleRelease、assembleFreeRelease)
6971

7072
### 生成文件所在目录
7173
build/generated/source/junk

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

Lines changed: 37 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ import org.gradle.api.tasks.OutputDirectory
1313
import org.gradle.api.tasks.TaskAction
1414

1515
import javax.lang.model.element.Modifier
16+
import java.nio.charset.Charset
17+
import java.nio.file.Files
18+
import java.nio.file.Path
1619

1720
class AndroidJunkCodeTask extends DefaultTask {
1821

@@ -50,7 +53,6 @@ class AndroidJunkCodeTask extends DefaultTask {
5053
* 生成java代码和AndroidManifest.xml
5154
*/
5255
void generateClasses() {
53-
def javaDir = new File(outDir, "java")
5456
for (int i = 0; i < config.packageCount; i++) {
5557
String packageName
5658
if (config.packageBase.isEmpty()) {
@@ -74,8 +76,8 @@ class AndroidJunkCodeTask extends DefaultTask {
7476
generateMethods(methodBuilder)
7577
typeBuilder.addMethod(methodBuilder.build())
7678
}
77-
def fileBuilder = JavaFile.builder(packageName, typeBuilder.build())
78-
fileBuilder.build().writeTo(javaDir)
79+
def javaFile = JavaFile.builder(packageName, typeBuilder.build()).build()
80+
writeJavaFile(javaFile)
7981
}
8082
}
8183
//所有Activity生成完了
@@ -136,7 +138,6 @@ class AndroidJunkCodeTask extends DefaultTask {
136138
* @param activityPreName
137139
*/
138140
void generateActivity(String packageName, String activityPreName) {
139-
def javaDir = new File(outDir, "java")
140141
def className = activityPreName.capitalize() + "Activity"
141142
def layoutName = "${config.resPrefix.toLowerCase()}${packageName.replace(".", "_")}_activity_${activityPreName}"
142143
generateLayout(layoutName)
@@ -160,8 +161,8 @@ class AndroidJunkCodeTask extends DefaultTask {
160161
generateMethods(methodBuilder)
161162
typeBuilder.addMethod(methodBuilder.build())
162163
}
163-
def fileBuilder = JavaFile.builder(packageName, typeBuilder.build())
164-
fileBuilder.build().writeTo(javaDir)
164+
def javaFile = JavaFile.builder(packageName, typeBuilder.build()).build()
165+
writeJavaFile(javaFile)
165166
}
166167
activityList.add(packageName + "." + className)
167168
}
@@ -188,21 +189,8 @@ class AndroidJunkCodeTask extends DefaultTask {
188189
*/
189190
void generateDrawable(String drawableName) {
190191
def drawableFile = new File(outDir, "res/drawable/${drawableName}.xml")
191-
if (!drawableFile.getParentFile().exists()) {
192-
drawableFile.getParentFile().mkdirs()
193-
}
194-
FileWriter writer
195-
try {
196-
writer = new FileWriter(drawableFile)
197-
def template = String.format(ResTemplate.DRAWABLE, generateColor())
198-
writer.write(template.toString())
199-
} catch (Exception e) {
200-
e.printStackTrace()
201-
} finally {
202-
if (writer != null) {
203-
writer.close()
204-
}
205-
}
192+
def drawableStr = String.format(ResTemplate.DRAWABLE, generateColor())
193+
writeStringToFile(drawableFile, drawableStr)
206194
}
207195

208196

@@ -212,21 +200,8 @@ class AndroidJunkCodeTask extends DefaultTask {
212200
*/
213201
void generateLayout(String layoutName) {
214202
def layoutFile = new File(outDir, "res/layout/${layoutName}.xml")
215-
if (!layoutFile.getParentFile().exists()) {
216-
layoutFile.getParentFile().mkdirs()
217-
}
218-
FileWriter writer
219-
try {
220-
writer = new FileWriter(layoutFile)
221-
def template = String.format(ResTemplate.LAYOUT_TEMPLATE, generateId())
222-
writer.write(template.toString())
223-
} catch (Exception e) {
224-
e.printStackTrace()
225-
} finally {
226-
if (writer != null) {
227-
writer.close()
228-
}
229-
}
203+
def layoutStr = String.format(ResTemplate.LAYOUT_TEMPLATE, generateId())
204+
writeStringToFile(layoutFile, layoutStr)
230205
}
231206

232207

@@ -235,9 +210,6 @@ class AndroidJunkCodeTask extends DefaultTask {
235210
*/
236211
void generateManifest() {
237212
def manifestFile = new File(outDir, "AndroidManifest.xml")
238-
if (!manifestFile.getParentFile().exists()) {
239-
manifestFile.getParentFile().mkdirs()
240-
}
241213
StringBuilder sb = new StringBuilder()
242214
sb.append("<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\">\n")
243215
sb.append(" <application>\n")
@@ -246,37 +218,44 @@ class AndroidJunkCodeTask extends DefaultTask {
246218
}
247219
sb.append(" </application>\n")
248220
sb.append("</manifest>")
249-
FileWriter writer
250-
try {
251-
writer = new FileWriter(manifestFile)
252-
writer.write(sb.toString())
253-
} catch (Exception e) {
254-
e.printStackTrace()
255-
} finally {
256-
if (writer != null) {
257-
writer.close()
258-
}
259-
}
221+
writeStringToFile(manifestFile, sb.toString())
260222
}
261223

262224
/**
263225
* 生成strings.xml
264226
*/
265227
void generateStringsFile() {
266228
def stringFile = new File(outDir, "res/values/strings.xml")
267-
if (!stringFile.getParentFile().exists()) {
268-
stringFile.getParentFile().mkdirs()
269-
}
270229
StringBuilder sb = new StringBuilder()
271230
sb.append("<resources>\n")
272231
for (i in 0..<stringList.size()) {
273232
sb.append("<string name=\"${stringList.get(i)}\">${stringList.get(i)}</string>\n")
274233
}
275234
sb.append("</resources>\n")
235+
writeStringToFile(stringFile, sb.toString())
236+
}
237+
238+
private void writeJavaFile(JavaFile javaFile) {
239+
def outputDirectory = outDir.toPath()
240+
outputDirectory.resolve("java")
241+
if (!javaFile.packageName.isEmpty()) {
242+
for (String packageComponent : javaFile.packageName.split("\\.")) {
243+
outputDirectory = outputDirectory.resolve(packageComponent);
244+
}
245+
Files.createDirectories(outputDirectory);
246+
}
247+
Path outputPath = outputDirectory.resolve(javaFile.typeSpec.name + ".java");
248+
writeStringToFile(outputPath.toFile(), javaFile.toString())
249+
}
250+
251+
private static void writeStringToFile(File file, String data) {
252+
if (!file.getParentFile().exists()) {
253+
file.getParentFile().mkdirs()
254+
}
276255
FileWriter writer
277256
try {
278-
writer = new FileWriter(stringFile)
279-
writer.write(sb.toString())
257+
writer = new FileWriter(file, Charset.forName("UTF-8"))
258+
writer.write(data)
280259
} catch (Exception e) {
281260
e.printStackTrace()
282261
} finally {
@@ -292,7 +271,7 @@ class AndroidJunkCodeTask extends DefaultTask {
292271
* @return
293272
*/
294273
static String generateName(int index) {
295-
def sb = new StringBuffer()
274+
def sb = new StringBuilder()
296275
for (i in 0..4) {
297276
sb.append(abc[random.nextInt(abc.size())])
298277
}
@@ -313,7 +292,7 @@ class AndroidJunkCodeTask extends DefaultTask {
313292
* @return
314293
*/
315294
static String generateColor() {
316-
def sb = new StringBuffer()
295+
def sb = new StringBuilder()
317296
sb.append("#")
318297
for (i in 0..5) {
319298
sb.append(color[random.nextInt(color.size())])
@@ -325,7 +304,7 @@ class AndroidJunkCodeTask extends DefaultTask {
325304
* @return
326305
*/
327306
static String generateId() {
328-
def sb = new StringBuffer()
307+
def sb = new StringBuilder()
329308
for (i in 0..5) {
330309
sb.append(abc[random.nextInt(abc.size())])
331310
}

0 commit comments

Comments
 (0)