@@ -56,23 +56,6 @@ androidJunkCode {
5656 resPrefix = "junk_"
5757 drawableCount = 300
5858 stringCount = 300
59-
60- //如果不想用插件默认生成的代码,可通过下面实现自定义。注意,修改生成方式后必须先clean再build才生效
61- typeGenerator = { typeBuilder ->
62- //自定义类实现(类名已经实现随机,Activity类已经实现了onCreate,其它自己实现随机)
63- //注意设置了此实现将忽略methodGenerator
64- //TypeSpec.Builder用法请参考(https://github.com/square/javapoet)
65- }
66- methodGenerator = { methodBuilder ->
67- //自定义方法实现(方法名已经实现随机,其它自己实现随机)
68- //MethodSpec.Builder用法请参考(https://github.com/square/javapoet)
69- }
70- layoutGenerator = { stringBuilder ->
71- //自定义drawable实现(自己实现随机)
72- }
73- drawableGenerator = { stringBuilder ->
74- //自定义layout实现(自己实现随机)
75- }
7659 }
7760 variantConfig {
7861 //注意:这里的debug,release为变体名称,如果没有设置productFlavors就是buildType名称,如果有设置productFlavors就是flavor+buildType,例如(freeRelease、proRelease)
@@ -89,6 +72,177 @@ androidJunkCode {
8972-keep class cn.hx.plugin.ui.** {*;}
9073```
9174
75+ ** 如果不想用插件默认生成的代码,可通过下面实现自定义。注意,修改生成方式后必须先clean再build才生效**
76+
77+ ``` groovy
78+ androidJunkCode {
79+ variantConfig {
80+ release {
81+ packageBase = "cn.hx.plugin.ui"
82+ packageCount = 30
83+ activityCountPerPackage = 30
84+ excludeActivityJavaFile = false
85+ otherCountPerPackage = 50
86+ methodCountPerClass = 20
87+ resPrefix = "junk_"
88+ drawableCount = 300
89+ stringCount = 300
90+
91+ //自定义生成包名(设置此项后packageBase将无效)
92+ //注意,要把生成的包名加入混淆文件
93+ packageCreator = { tuple2 ->
94+ //int:下标 [0,packageCount)
95+ def index = tuple2.first
96+ //StringBuilder: 生成包名格式xx.xx.xx
97+ def packageNameBuilder = tuple2.second
98+ packageNameBuilder.append("cn.hx.package" + index)
99+ }
100+
101+ /**
102+ * 自定义生成Activity
103+ */
104+ activityCreator = { tuple4 ->
105+ //int:下标 [0,activityCountPerPackage)
106+ def index = tuple4.first
107+ //StringBuilder: 生成Activity文件名
108+ def activityNameBuilder = tuple4.second
109+ //StringBuilder: 生成layout文件名
110+ def layoutNameBuilder = tuple4.third
111+ //StringBuilder: 生成layout内容
112+ def layoutContentBuilder = tuple4.fourth
113+
114+ //例
115+ activityNameBuilder.append("Activity${index}")
116+ layoutNameBuilder.append("activity_${index}")
117+ layoutContentBuilder.append('''<?xml version="1.0" encoding="utf-8"?>
118+ <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
119+ android:layout_width="match_parent"
120+ android:layout_height="match_parent"
121+ android:orientation="vertical">
122+
123+ <TextView
124+ android:layout_width="wrap_content"
125+ android:layout_height="wrap_content"
126+ android:layout_gravity="center" />
127+ </LinearLayout>''')
128+ }
129+
130+ //自定义生成类名(Activity除外)
131+ classNameCreator = { tuple2 ->
132+ //int:下标 [0,otherCountPerPackage)
133+ def index = tuple2.first
134+ //StringBuilder: 生成Java文件名
135+ def classNameBuilder = tuple2.second
136+
137+ //例
138+ classNameBuilder.append("Class${index}")
139+ }
140+
141+ //自定义生成方法名
142+ methodNameCreator = { tuple2 ->
143+ //int:下标 [0,methodCountPerClass)
144+ def index = tuple2.first
145+ //StringBuilder: 生成的方法名
146+ def classNameBuilder = tuple2.second
147+
148+ //例
149+ classNameBuilder.append("method${index}")
150+ }
151+
152+ //自定义生成drawable(只支持xml)
153+ drawableCreator = { tuple3 ->
154+ //int:下标 [0,drawableCount)
155+ def index = tuple3.first
156+ //StringBuilder: 生成drawable文件名
157+ def fileNameBuilder = tuple3.second
158+ //StringBuilder: 生成drawable文件内容
159+ def contentBuilder = tuple3.third
160+
161+ //例
162+ fileNameBuilder.append("drawable${index}")
163+ contentBuilder.append('''<?xml version="1.0" encoding="utf-8"?>
164+ <shape xmlns:android="http://schemas.android.com/apk/res/android">
165+ <corners android:radius="4dp" />
166+ <stroke
167+ android:width="1dp"
168+ android:color="#333333" />
169+ </shape>
170+ ''')
171+ }
172+
173+ //自定义生成 string
174+ stringCreator = { tuple3 ->
175+ //int:下标 [0,drawableCount)
176+ def index = tuple3.first
177+ //StringBuilder: 生成string名
178+ def keyBuilder = tuple3.second
179+ //StringBuilder: 生成string值
180+ def valueBuilder = tuple3.third
181+
182+ //例
183+ keyBuilder.append("string${index}")
184+ valueBuilder.append("value${index}")
185+ }
186+
187+ //自定义生成keep.xm
188+ keepCreator = { tuple2 ->
189+ //StringBuilder:生成文件名
190+ def fileNameBuilder = tuple2.first
191+ //StringBuilder: 生成的文件内容
192+ def contentBuilder = tuple2.second
193+
194+ //例
195+ fileNameBuilder.append("android_junk_code_keep")
196+ contentBuilder.append( "<resources xmlns:tools=\"http://schemas.android.com/tools\"\n" +
197+ " tools:keep=\"@layout/junk_*, @drawable/junk_*\" />\n")
198+ }
199+
200+ //自定义类实现(类名已经实现随机,Activity类已经实现了onCreate,其它自己实现随机)
201+ //注意设置了此实现将忽略 methodGenerator,methodCountPerClass
202+ //TypeSpec.Builder用法请参考(https://github.com/square/javapoet)
203+ // typeGenerator = { typeBuilder ->
204+ // //例
205+ // for (i in 0..<10) {
206+ // typeBuilder.addMethod(MethodSpec.methodBuilder("method" + i)
207+ // .addCode("" + "int total = 0;\n" + "for (int i = 0; i < 10; i++) {\n" + " total += i;\n" + "}\n")
208+ // .build())
209+ // }
210+ // }
211+
212+ //自定义方法实现(方法名已经实现随机,其它自己实现随机)
213+ //MethodSpec.Builder用法请参考(https://github.com/square/javapoet)
214+ // methodGenerator = { methodBuilder ->
215+ // //例
216+ // methodBuilder.addCode("" + "int total = 0;\n" + "for (int i = 0; i < 10; i++) {\n" + " total += i;\n" + "}\n")
217+ // }
218+ }
219+ }
220+ }
221+ ```
222+
223+ 如果所有代码生成都不想用插件来完成,可用如下实现。插件只负责把你生成的文件打进包里
224+ ``` groovy
225+ androidJunkCode {
226+ variantConfig {
227+ release {
228+ javaGenerator = { javaDir ->
229+ //File:java目录
230+ //把你生成的所有java文件放到这个目录下
231+ }
232+ resGenerator = { resDir ->
233+ //File:res目录
234+ //把你生成的所有资源文件放到这个目录下
235+ }
236+
237+ manifestGenerator = { manifestFile ->
238+ //File:AndroidManifest.xml文件
239+ //把你生成的AndroidManifest.xml内容写入到这个文件
240+ }
241+ }
242+ }
243+ }
244+ ```
245+
92246### 打包
93247
94248执行配置变体的打包命令:assembleXXX(XXX是你配置的变体,如:assembleRelease、assembleFreeRelease)
0 commit comments