@@ -13,6 +13,9 @@ import org.gradle.api.tasks.OutputDirectory
1313import org.gradle.api.tasks.TaskAction
1414
1515import javax.lang.model.element.Modifier
16+ import java.nio.charset.Charset
17+ import java.nio.file.Files
18+ import java.nio.file.Path
1619
1720class 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