1
1
package cn.hx.plugin.junkcode.task
2
2
3
3
import cn.hx.plugin.junkcode.ext.JunkCodeConfig
4
- import cn.hx.plugin.junkcode.template.ManifestTemplate
5
4
import cn.hx.plugin.junkcode.template.ResTemplate
6
5
import com.squareup.javapoet.ClassName
7
6
import com.squareup.javapoet.JavaFile
8
7
import com.squareup.javapoet.MethodSpec
9
8
import com.squareup.javapoet.TypeSpec
10
- import groovy.text.GStringTemplateEngine
11
9
import org.gradle.api.DefaultTask
12
10
import org.gradle.api.tasks.Input
13
11
import org.gradle.api.tasks.Nested
@@ -32,11 +30,16 @@ class AndroidJunkCodeTask extends DefaultTask {
32
30
@OutputDirectory
33
31
File outDir
34
32
33
+ private List<String > activityList = new ArrayList<> ()
34
+ private List<String > stringList = new ArrayList<> ()
35
+
35
36
@TaskAction
36
37
void generateJunkCode () {
37
38
if (outDir. exists()) {
38
39
outDir. deleteDir()
39
40
}
41
+ activityList. clear()
42
+ stringList. clear()
40
43
// 通过成类
41
44
generateClasses()
42
45
// 生成资源
@@ -75,6 +78,8 @@ class AndroidJunkCodeTask extends DefaultTask {
75
78
fileBuilder. build(). writeTo(javaDir)
76
79
}
77
80
}
81
+ // 所有Activity生成完了
82
+ generateManifest()
78
83
}
79
84
80
85
/**
@@ -158,7 +163,7 @@ class AndroidJunkCodeTask extends DefaultTask {
158
163
def fileBuilder = JavaFile . builder(packageName, typeBuilder. build())
159
164
fileBuilder. build(). writeTo(javaDir)
160
165
}
161
- addToManifestByFileIo(className, packageName)
166
+ activityList . add( packageName + " . " + className )
162
167
}
163
168
164
169
/**
@@ -172,10 +177,9 @@ class AndroidJunkCodeTask extends DefaultTask {
172
177
}
173
178
// 生成string
174
179
for (int i = 0 ; i < config. stringCount; i++ ) {
175
- def name = " ${ config.resPrefix.toLowerCase()}${ generateName(i)} "
176
- def value = name
177
- addStringByFileIo(name, value)
180
+ stringList. add(" ${ config.resPrefix.toLowerCase()}${ generateName(i)} " )
178
181
}
182
+ generateStringsFile()
179
183
}
180
184
181
185
/**
@@ -187,9 +191,6 @@ class AndroidJunkCodeTask extends DefaultTask {
187
191
if (! drawableFile. getParentFile(). exists()) {
188
192
drawableFile. getParentFile(). mkdirs()
189
193
}
190
- if (! drawableFile. exists()) {
191
- drawableFile. createNewFile()
192
- }
193
194
FileWriter writer
194
195
try {
195
196
writer = new FileWriter (drawableFile)
@@ -214,9 +215,6 @@ class AndroidJunkCodeTask extends DefaultTask {
214
215
if (! layoutFile. getParentFile(). exists()) {
215
216
layoutFile. getParentFile(). mkdirs()
216
217
}
217
- if (! layoutFile. exists()) {
218
- layoutFile. createNewFile()
219
- }
220
218
FileWriter writer
221
219
try {
222
220
writer = new FileWriter (layoutFile)
@@ -233,138 +231,61 @@ class AndroidJunkCodeTask extends DefaultTask {
233
231
234
232
235
233
/**
236
- * 通过文件读写流的方式将新创建的Activity加入清单文件
237
- *
238
- * @param activityName
239
- * @param packageName
234
+ * 生成Manifest
240
235
*/
241
- void addToManifestByFileIo ( String activityName , String packageName ) {
236
+ void generateManifest ( ) {
242
237
def manifestFile = new File (outDir, " AndroidManifest.xml" )
243
238
if (! manifestFile. getParentFile(). exists()) {
244
239
manifestFile. getParentFile(). mkdirs()
245
240
}
246
- if (! manifestFile. exists()) {
247
- def template = ManifestTemplate . TEMPLATE
248
- FileWriter writer
249
- try {
250
- writer = new FileWriter (manifestFile)
251
- writer. write(template. toString())
252
- } catch (Exception e) {
253
- e. printStackTrace()
254
- } finally {
255
- if (writer != null ) {
256
- writer. close()
257
- }
258
- }
241
+ StringBuilder sb = new StringBuilder ()
242
+ sb. append(" <manifest xmlns:android=\" http://schemas.android.com/apk/res/android\" >\n " )
243
+ sb. append(" <application>\n " )
244
+ for (i in 0 .. < activityList. size()) {
245
+ sb. append(" <activity android:name=\" ${ activityList.get(i)} \" />\n " )
259
246
}
260
- FileReader reader
247
+ sb. append(" </application>\n " )
248
+ sb. append(" </manifest>" )
261
249
FileWriter writer
262
250
try {
263
- reader = new FileReader (manifestFile)
264
- StringBuilder sb = new StringBuilder ()
265
- // 每一行的内容
266
- String line = " "
267
- while ((line = reader. readLine()) != null ) {
268
- // 找到application节点的末尾
269
- if (line. contains(" </application>" )) {
270
- // 在application节点最后插入新创建的activity节点
271
- def binding = [
272
- packageName : packageName,
273
- activityName : activityName,
274
- ]
275
- def template = makeTemplate(ManifestTemplate . ACTIVITY_NODE , binding)
276
- sb. append(template. toString() + " \n " )
277
- }
278
- sb. append(line + " \n " )
279
- }
280
- String content = sb. toString()
281
251
writer = new FileWriter (manifestFile)
282
- writer. write(content )
252
+ writer. write(sb . toString() )
283
253
} catch (Exception e) {
284
254
e. printStackTrace()
285
255
} finally {
286
- if (reader != null ) {
287
- reader. close()
288
- }
289
256
if (writer != null ) {
290
257
writer. close()
291
258
}
292
259
}
293
260
}
294
261
295
262
/**
296
- * 将string写入strings.xml
297
- * @param name
298
- * @param value
263
+ * 生成strings.xml
299
264
*/
300
- void addStringByFileIo (String name , String value ) {
301
- // 生成string
265
+ void generateStringsFile () {
302
266
def stringFile = new File (outDir, " res/values/strings.xml" )
303
267
if (! stringFile. getParentFile(). exists()) {
304
268
stringFile. getParentFile(). mkdirs()
305
269
}
306
- if (! stringFile. exists()) {
307
- stringFile. createNewFile()
308
- FileWriter writer
309
- try {
310
- writer = new FileWriter (stringFile)
311
- def template = ResTemplate . TEMPLATE
312
- writer. write(template. toString())
313
- } catch (Exception e) {
314
- e. printStackTrace()
315
- } finally {
316
- if (writer != null ) {
317
- writer. close()
318
- }
319
- }
270
+ StringBuilder sb = new StringBuilder ()
271
+ sb. append(" <resources>\n " )
272
+ for (i in 0 .. < stringList. size()) {
273
+ sb. append(" <string name=\" ${ stringList.get(i)} \" >${ stringList.get(i)} </string>\n " )
320
274
}
321
- FileReader reader
275
+ sb . append( " </resources> \n " )
322
276
FileWriter writer
323
277
try {
324
- reader = new FileReader (stringFile)
325
- StringBuilder sb = new StringBuilder ()
326
- // 每一行的内容
327
- String line = " "
328
- while ((line = reader. readLine()) != null ) {
329
- // 找到resources节点的末尾
330
- if (line. contains(" </resources>" )) {
331
- // 在resources节点最后插入新创建的string节点
332
- def binding = [
333
- stringName : name,
334
- stringValue : value,
335
- ]
336
- def template = makeTemplate(ResTemplate . STRING_NODE , binding)
337
- sb. append(template. toString() + " \n " )
338
- }
339
- sb. append(line + " \n " )
340
- }
341
- String content = sb. toString()
342
278
writer = new FileWriter (stringFile)
343
- writer. write(content )
279
+ writer. write(sb . toString() )
344
280
} catch (Exception e) {
345
281
e. printStackTrace()
346
282
} finally {
347
- if (reader != null ) {
348
- reader. close()
349
- }
350
283
if (writer != null ) {
351
284
writer. close()
352
285
}
353
286
}
354
287
}
355
288
356
- /**
357
- * 加载模板
358
- *
359
- * @param template
360
- * @param binding
361
- * @return
362
- */
363
- static def makeTemplate (def template , def binding ) {
364
- def engine = new GStringTemplateEngine ()
365
- return engine. createTemplate(template). make(binding)
366
- }
367
-
368
289
/**
369
290
* 生成名称
370
291
* @param index
0 commit comments