Skip to content

Commit 6c54b04

Browse files
author
dengshiwei
committed
Release 3.2.5
1 parent d06cde8 commit 6c54b04

File tree

5 files changed

+42
-7
lines changed

5 files changed

+42
-7
lines changed

plugin/ext.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
project.ext {
2-
pluginVersion = '3.2.4'
2+
pluginVersion = '3.2.5'
33
Properties properties = new Properties()
44
if (project.file('local.properties').exists()) {
55
properties.load(project.file('local.properties').newDataInputStream())

plugin/src/main/groovy/com/sensorsdata/analytics/android/plugin/SensorsAnalyticsClassVisitor.groovy

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -467,6 +467,14 @@ class SensorsAnalyticsClassVisitor extends ClassVisitor {
467467
case SensorsAnalyticsTransformHelper.RN_STATE.NOT_FOUND:
468468
break
469469
case SensorsAnalyticsTransformHelper.RN_STATE.HAS_VERSION:
470+
if (transformHelper.rnVersion > '2.0.0' && mSuperName == "com/facebook/react/uimanager/ViewGroupManager"
471+
&& nameDesc == "addView(Landroid/view/ViewGroup;Landroid/view/View;I)V") {
472+
methodVisitor.visitVarInsn(ALOAD, 2)
473+
methodVisitor.visitVarInsn(ILOAD, 3)
474+
methodVisitor.visitMethodInsn(INVOKESTATIC, "com/sensorsdata/analytics/RNAgent", "addView", "(Landroid/view/View;I)V", false)
475+
result = true
476+
}
477+
470478
if (nameDesc == 'handleTouchEvent(Landroid/view/MotionEvent;Lcom/facebook/react/uimanager/events/EventDispatcher;)V' && mClassName == 'com/facebook/react/uimanager/JSTouchDispatcher') {
471479
methodVisitor.visitVarInsn(ALOAD, 0)
472480
methodVisitor.visitVarInsn(ALOAD, 1)

plugin/src/main/groovy/com/sensorsdata/analytics/android/plugin/SensorsAnalyticsTransform.groovy

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,19 +33,20 @@ import groovy.io.FileType
3333
import org.apache.commons.codec.digest.DigestUtils
3434
import org.apache.commons.io.FileUtils
3535
import org.apache.commons.io.IOUtils
36+
import org.apache.commons.io.output.ByteArrayOutputStream
3637
import org.objectweb.asm.ClassReader
3738
import org.objectweb.asm.ClassVisitor
3839
import org.objectweb.asm.ClassWriter
3940

41+
import java.lang.reflect.Field
4042
import java.util.concurrent.Callable
4143
import java.util.jar.JarEntry
4244
import java.util.jar.JarFile
4345
import java.util.jar.JarOutputStream
44-
import java.util.zip.ZipEntry
4546

4647
class SensorsAnalyticsTransform extends Transform {
4748
private SensorsAnalyticsTransformHelper transformHelper
48-
public static final String VERSION = "3.2.4"
49+
public static final String VERSION = "3.2.5"
4950
public static final String MIN_SDK_VERSION = "4.0.7"
5051
private WaitableExecutor waitableExecutor
5152
private URLClassLoader urlClassLoader
@@ -126,7 +127,6 @@ class SensorsAnalyticsTransform extends Transform {
126127
if (waitableExecutor) {
127128
waitableExecutor.waitForTasksWithQuickFail(true)
128129
}
129-
130130
println("[SensorsAnalytics]: 此次编译共耗时:${System.currentTimeMillis() - startTime}毫秒")
131131
}
132132

@@ -176,7 +176,9 @@ class SensorsAnalyticsTransform extends Transform {
176176
try {
177177
Class rnClazz = urlClassLoader.loadClass("com.sensorsdata.analytics.RNSensorsAnalyticsPackage")
178178
try {
179-
rnClazz.getDeclaredField("VERSION")
179+
Field versionField = rnClazz.getDeclaredField("VERSION")
180+
versionField.setAccessible(true)
181+
transformHelper.rnVersion = versionField.get(null) as String
180182
transformHelper.rnState = SensorsAnalyticsTransformHelper.RN_STATE.HAS_VERSION
181183
} catch (Exception e) {
182184
transformHelper.rnState = SensorsAnalyticsTransformHelper.RN_STATE.NO_VERSION
@@ -325,6 +327,7 @@ class SensorsAnalyticsTransform extends Transform {
325327
try {
326328
inputStream = file.getInputStream(jarEntry)
327329
} catch (Exception e) {
330+
IOUtils.closeQuietly(inputStream)
328331
e.printStackTrace()
329332
return null
330333
}
@@ -338,9 +341,11 @@ class SensorsAnalyticsTransform extends Transform {
338341
byte[] sourceClassBytes
339342
try {
340343
jarOutputStream.putNextEntry(entry)
341-
sourceClassBytes = IOUtils.toByteArray(inputStream)
344+
sourceClassBytes = SensorsAnalyticsUtil.toByteArrayAndAutoCloseStream(inputStream)
342345
} catch (Exception e) {
343346
Logger.error("Exception encountered while processing jar: " + jarFile.getAbsolutePath())
347+
IOUtils.closeQuietly(file)
348+
IOUtils.closeQuietly(jarOutputStream)
344349
e.printStackTrace()
345350
return null
346351
}
@@ -394,7 +399,7 @@ class SensorsAnalyticsTransform extends Transform {
394399
String className = path2ClassName(classFile.absolutePath.replace(dir.absolutePath + File.separator, ""))
395400
ClassNameAnalytics classNameAnalytics = transformHelper.analytics(className)
396401
if (classNameAnalytics.isShouldModify) {
397-
byte[] sourceClassBytes = IOUtils.toByteArray(new FileInputStream(classFile))
402+
byte[] sourceClassBytes = SensorsAnalyticsUtil.toByteArrayAndAutoCloseStream(new FileInputStream(classFile))
398403
byte[] modifiedClassBytes = modifyClass(sourceClassBytes, classNameAnalytics)
399404
if (modifiedClassBytes) {
400405
modified = new File(tempDir, className.replace('.', '') + '.class')

plugin/src/main/groovy/com/sensorsdata/analytics/android/plugin/SensorsAnalyticsTransformHelper.groovy

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ class SensorsAnalyticsTransformHelper {
2323
SensorsAnalyticsExtension extension
2424
AppExtension android
2525
RN_STATE rnState = RN_STATE.NOT_FOUND
26+
String rnVersion = ""
2627
SensorsAnalyticsSDKHookConfig sensorsAnalyticsHookConfig
2728
boolean disableSensorsAnalyticsMultiThread
2829
boolean disableSensorsAnalyticsIncremental

plugin/src/main/groovy/com/sensorsdata/analytics/android/plugin/SensorsAnalyticsUtil.groovy

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
package com.sensorsdata.analytics.android.plugin
1818

1919
import groovy.transform.CompileStatic
20+
import org.apache.commons.io.IOUtils
21+
import org.apache.commons.io.output.ByteArrayOutputStream
2022
import org.objectweb.asm.Opcodes
2123

2224
@CompileStatic
@@ -79,4 +81,23 @@ class SensorsAnalyticsUtil {
7981
static boolean isTargetClassInSpecial(String className) {
8082
return specialClass.contains(className)
8183
}
84+
85+
static byte[] toByteArrayAndAutoCloseStream(InputStream input) throws Exception {
86+
ByteArrayOutputStream output = null
87+
try {
88+
output = new ByteArrayOutputStream();
89+
byte[] buffer = new byte[1024 * 4]
90+
int n = 0
91+
while (-1 != (n = input.read(buffer))) {
92+
output.write(buffer, 0, n)
93+
}
94+
output.flush()
95+
return output.toByteArray()
96+
} catch (Exception e) {
97+
throw e
98+
} finally {
99+
IOUtils.closeQuietly(output)
100+
IOUtils.closeQuietly(input)
101+
}
102+
}
82103
}

0 commit comments

Comments
 (0)