@@ -42,11 +42,10 @@ import java.util.concurrent.Callable
4242import java.util.jar.JarEntry
4343import java.util.jar.JarFile
4444import java.util.jar.JarOutputStream
45- import java.util.zip.ZipEntry
4645
4746class SensorsAnalyticsTransform extends Transform {
4847 private SensorsAnalyticsTransformHelper transformHelper
49- public static final String VERSION = " 3.1.2 "
48+ public static final String VERSION = " 3.1.3 "
5049 public static final String MIN_SDK_VERSION = " 3.0.0"
5150 private WaitableExecutor waitableExecutor
5251
@@ -114,67 +113,17 @@ class SensorsAnalyticsTransform extends Transform {
114113
115114 // 遍历目录
116115 input. directoryInputs. each { DirectoryInput directoryInput ->
117- // Logger.info("||-->开始遍历特定目录 ${dest.absolutePath}")
118- File dir = directoryInput. file
119- File dest = outputProvider. getContentLocation(directoryInput. getName(),
120- directoryInput. getContentTypes(), directoryInput. getScopes(),
121- Format . DIRECTORY )
122- FileUtils . forceMkdir(dest)
123- String srcDirPath = dir. absolutePath
124- String destDirPath = dest. absolutePath
125- if (isIncremental) {
126- Map<File , Status > fileStatusMap = directoryInput. getChangedFiles()
127- for (Map.Entry < File , Status > changedFile : fileStatusMap. entrySet()) {
128- Status status = changedFile. getValue()
129- File inputFile = changedFile. getKey()
130- String destFilePath = inputFile. absolutePath. replace(srcDirPath, destDirPath)
131- File destFile = new File (destFilePath)
132- switch (status) {
133- case Status . NOTCHANGED :
134- break
135- case Status . REMOVED :
136- Logger . info(" 目录 status = $status :$inputFile . absolutePath " )
137- if (destFile. exists()) {
138- // noinspection ResultOfMethodCallIgnored
139- destFile. delete()
140- }
141- break
142- case Status . ADDED :
143- case Status . CHANGED :
144- Logger . info(" 目录 status = $status :$inputFile . absolutePath " )
145- File modified = modifyClassFile(dir, inputFile, context. getTemporaryDir())
146- if (destFile. exists()) {
147- destFile. delete()
148- }
149- if (modified != null ) {
150- FileUtils . copyFile(modified, destFile)
151- modified. delete()
152- } else {
153- FileUtils . copyFile(inputFile, destFile)
154- }
155- break
156- default :
157- break
116+ if (waitableExecutor) {
117+ waitableExecutor. execute(new Callable<Object > () {
118+ @Override
119+ Object call () throws Exception {
120+ forEachDirectory(isIncremental, directoryInput, outputProvider, context)
121+ return null
158122 }
159- }
123+ })
160124 } else {
161- FileUtils . copyDirectory(dir, dest)
162- dir. traverse(type : FileType . FILES , nameFilter : ~/ .*\. class/ ) {
163- File inputFile ->
164- if (waitableExecutor) {
165- waitableExecutor. execute(new Callable<Object > () {
166- @Override
167- Object call () throws Exception {
168- forEachDir(dir, inputFile, context, srcDirPath, destDirPath)
169- return null
170- }
171- })
172- } else {
173- forEachDir(dir, inputFile, context, srcDirPath, destDirPath)
174- }
175- }
125+ forEachDirectory(isIncremental, directoryInput, outputProvider, context)
176126 }
177-
178127 }
179128 }
180129 if (waitableExecutor) {
@@ -184,6 +133,58 @@ class SensorsAnalyticsTransform extends Transform {
184133 println (" [SensorsAnalytics]: 此次编译共耗时:${ System.currentTimeMillis() - startTime} 毫秒" )
185134 }
186135
136+ void forEachDirectory (boolean isIncremental , DirectoryInput directoryInput , TransformOutputProvider outputProvider , Context context ){
137+ File dir = directoryInput. file
138+ File dest = outputProvider. getContentLocation(directoryInput. getName(),
139+ directoryInput. getContentTypes(), directoryInput. getScopes(),
140+ Format . DIRECTORY )
141+ FileUtils . forceMkdir(dest)
142+ String srcDirPath = dir. absolutePath
143+ String destDirPath = dest. absolutePath
144+ if (isIncremental) {
145+ Map<File , Status > fileStatusMap = directoryInput. getChangedFiles()
146+ for (Map.Entry < File , Status > changedFile : fileStatusMap. entrySet()) {
147+ Status status = changedFile. getValue()
148+ File inputFile = changedFile. getKey()
149+ String destFilePath = inputFile. absolutePath. replace(srcDirPath, destDirPath)
150+ File destFile = new File (destFilePath)
151+ switch (status) {
152+ case Status . NOTCHANGED :
153+ break
154+ case Status . REMOVED :
155+ Logger . info(" 目录 status = $status :$inputFile . absolutePath " )
156+ if (destFile. exists()) {
157+ // noinspection ResultOfMethodCallIgnored
158+ destFile. delete()
159+ }
160+ break
161+ case Status . ADDED :
162+ case Status . CHANGED :
163+ Logger . info(" 目录 status = $status :$inputFile . absolutePath " )
164+ File modified = modifyClassFile(dir, inputFile, context. getTemporaryDir())
165+ if (destFile. exists()) {
166+ destFile. delete()
167+ }
168+ if (modified != null ) {
169+ FileUtils . copyFile(modified, destFile)
170+ modified. delete()
171+ } else {
172+ FileUtils . copyFile(inputFile, destFile)
173+ }
174+ break
175+ default :
176+ break
177+ }
178+ }
179+ } else {
180+ FileUtils . copyDirectory(dir, dest)
181+ dir. traverse(type : FileType . FILES , nameFilter : ~/ .*\. class/ ) {
182+ File inputFile ->
183+ forEachDir(dir, inputFile, context, srcDirPath, destDirPath)
184+ }
185+ }
186+ }
187+
187188 void forEachDir (File dir , File inputFile , Context context , String srcDirPath , String destDirPath ) {
188189 File modified = modifyClassFile(dir, inputFile, context. getTemporaryDir())
189190 if (modified != null ) {
@@ -197,14 +198,8 @@ class SensorsAnalyticsTransform extends Transform {
197198 }
198199
199200 void forEachJar (boolean isIncremental , JarInput jarInput , TransformOutputProvider outputProvider , Context context ) {
200- String destName = jarInput. file. name
201- // 截取文件路径的 md5 值重命名输出文件,因为可能同名,会覆盖
202- def hexName = DigestUtils . md5Hex(jarInput. file. absolutePath). substring(0 , 8 )
203- if (destName. endsWith(" .jar" )) {
204- destName = destName. substring(0 , destName. length() - 4 )
205- }
206201 // 获得输出文件
207- File destFile = outputProvider. getContentLocation(destName + " _ " + hexName , jarInput. contentTypes, jarInput. scopes, Format . JAR )
202+ File destFile = outputProvider. getContentLocation(jarInput . name , jarInput. contentTypes, jarInput. scopes, Format . JAR )
208203 if (isIncremental) {
209204 Status status = jarInput. getStatus()
210205 switch (status) {
@@ -279,13 +274,14 @@ class SensorsAnalyticsTransform extends Transform {
279274 // ignore
280275 } else {
281276 String className
282- ZipEntry zipEntry = new ZipEntry (entryName)
283- jarOutputStream. putNextEntry(zipEntry )
277+ JarEntry entry = new JarEntry (entryName)
278+ jarOutputStream. putNextEntry(entry )
284279 byte [] modifiedClassBytes = null
285- byte [] sourceClassBytes = null
280+ byte [] sourceClassBytes
286281 try {
287282 sourceClassBytes = IOUtils . toByteArray(inputStream)
288283 } catch (Exception e) {
284+ e. printStackTrace()
289285 return null
290286 }
291287 if (entryName. endsWith(" .class" )) {
0 commit comments