Skip to content

Commit 0a2e3d5

Browse files
committed
Release 3.0.2
1 parent d7f0e90 commit 0a2e3d5

File tree

10 files changed

+138
-98
lines changed

10 files changed

+138
-98
lines changed

aop/build.gradle

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ buildscript {
1717
apply plugin: 'groovy'
1818
apply plugin: 'maven'
1919

20-
targetCompatibility = JavaVersion.VERSION_1_7
21-
sourceCompatibility = JavaVersion.VERSION_1_7
20+
targetCompatibility = JavaVersion.VERSION_1_8
21+
sourceCompatibility = JavaVersion.VERSION_1_8
2222

2323

2424
dependencies {
@@ -29,10 +29,15 @@ dependencies {
2929
}
3030

3131
implementation gradleApi()
32-
implementation localGroovy()
32+
// implementation localGroovy()
3333
compile 'org.ow2.asm:asm:6.0'
3434
compile 'org.ow2.asm:asm-commons:6.0'
35-
compileOnly 'com.android.tools.build:gradle:3.0.0'
35+
compile 'org.ow2.asm:asm-analysis:6.0'
36+
compile 'org.ow2.asm:asm-util:6.0'
37+
compile 'org.ow2.asm:asm-tree:6.0'
38+
compileOnly 'com.android.tools.build:gradle:3.2.1', {
39+
exclude group:'org.ow2.asm'
40+
}
3641
}
3742

3843
apply from: 'bintray.gradle'

aop/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.0.1'
2+
pluginVersion = '3.0.2'
33
Properties properties = new Properties()
44
if (project.file('local.properties').exists()) {
55
properties.load(project.file('local.properties').newDataInputStream())

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

Lines changed: 12 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ class SensorsAnalyticsClassVisitor extends ClassVisitor implements Opcodes {
2525
}
2626

2727
SensorsAnalyticsClassVisitor(final ClassVisitor classVisitor,ClassNameAnalytics classNameAnalytics,SensorsAnalyticsTransformHelper transformHelper) {
28-
super(Opcodes.ASM6, classVisitor)
28+
super(Opcodes.ASM5, classVisitor)
2929
this.classVisitor = classVisitor
3030
this.classNameAnalytics = classNameAnalytics
3131
this.transformHelper = transformHelper
@@ -179,7 +179,7 @@ class SensorsAnalyticsClassVisitor extends ClassVisitor implements Opcodes {
179179
/**
180180
* 在 android.gradle 的 3.2.1 版本中,针对 view 的 setOnClickListener 方法 的 lambda 表达式做特殊处理。
181181
*/
182-
if (transformHelper.lambdaEnabled) {
182+
if (transformHelper.extension.lambdaEnabled) {
183183
if (name.trim().startsWith('lambda$') && SensorsAnalyticsUtil.isPrivate(access) && SensorsAnalyticsUtil.isSynthetic(access)) {
184184
if (desc == '(Landroid/view/MenuItem;)Z' && SensorsAnalyticsUtil.isStatic(access)) {
185185
SensorsAnalyticsMethodCell sensorsAnalyticsMethodCell = SensorsAnalyticsHookConfig.sLambdaMethods.get(desc + '2')
@@ -343,16 +343,15 @@ class SensorsAnalyticsClassVisitor extends ClassVisitor implements Opcodes {
343343
if (sensorsAnalyticsMethodCell != null && mInterfaces.contains(sensorsAnalyticsMethodCell.parent)) {
344344
visitMethodWithLoadedParams(methodVisitor, Opcodes.INVOKESTATIC, SensorsAnalyticsHookConfig.sSensorsAnalyticsAPI, sensorsAnalyticsMethodCell.agentName, sensorsAnalyticsMethodCell.agentDesc, sensorsAnalyticsMethodCell.paramsStart, sensorsAnalyticsMethodCell.paramsCount, sensorsAnalyticsMethodCell.opcodes)
345345
isHasTracked = true
346+
return
346347
}
347348
}
348349

349-
if (!isHasTracked) {
350-
if (nameDesc == 'onClick(Landroid/view/View;)V') {
351-
methodVisitor.visitVarInsn(ALOAD, 1)
352-
methodVisitor.visitMethodInsn(INVOKESTATIC, SensorsAnalyticsHookConfig.sSensorsAnalyticsAPI, "trackViewOnClick", "(Landroid/view/View;)V", false)
353-
isHasTracked = true
354-
}
355-
}
350+
if (nameDesc == 'onClick(Landroid/view/View;)V') {
351+
methodVisitor.visitVarInsn(ALOAD, 1)
352+
methodVisitor.visitMethodInsn(INVOKESTATIC, SensorsAnalyticsHookConfig.sSensorsAnalyticsAPI, "trackViewOnClick", "(Landroid/view/View;)V", false)
353+
isHasTracked = true
354+
}
356355
}
357356

358357
/**
@@ -369,19 +368,13 @@ class SensorsAnalyticsClassVisitor extends ClassVisitor implements Opcodes {
369368
if (s == 'Lcom/sensorsdata/analytics/android/sdk/SensorsDataTrackViewOnClick;') {
370369
isSensorsDataTrackViewOnClickAnnotation = true
371370
Logger.info("发现 ${name}${desc} 有注解 @SensorsDataTrackViewOnClick")
372-
}
373-
374-
if (s == 'Lcom/sensorsdata/analytics/android/sdk/SensorsDataIgnoreTrackOnClick;') {
371+
} else if (s == 'Lcom/sensorsdata/analytics/android/sdk/SensorsDataIgnoreTrackOnClick;') {
375372
isSensorsDataIgnoreTrackOnClick = true
376373
Logger.info("发现 ${name}${desc} 有注解 @SensorsDataIgnoreTrackOnClick")
377-
}
378-
379-
if (s == 'Lcom/sensorsdata/analytics/android/sdk/SensorsDataInstrumented;') {
374+
} else if (s == 'Lcom/sensorsdata/analytics/android/sdk/SensorsDataInstrumented;') {
380375
isHasInstrumented = true
381-
}
382-
383-
if (s == 'Lcom/sensorsdata/analytics/android/sdk/SensorsDataTrackEvent;') {
384-
return new AnnotationVisitor(Opcodes.ASM6) {
376+
} else if (s == 'Lcom/sensorsdata/analytics/android/sdk/SensorsDataTrackEvent;') {
377+
return new AnnotationVisitor(Opcodes.ASM5) {
385378
@Override
386379
void visit(String key, Object value) {
387380
super.visit(key, value)

aop/src/main/groovy/com/sensorsdata/analytics/android/plugin/SensorsAnalyticsDefaultMethodVisitor.groovy

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
11
package com.sensorsdata.analytics.android.plugin
22

3-
import org.objectweb.asm.*
3+
import org.objectweb.asm.AnnotationVisitor
4+
import org.objectweb.asm.Attribute
5+
import org.objectweb.asm.Label
6+
import org.objectweb.asm.MethodVisitor
47
import org.objectweb.asm.commons.AdviceAdapter
8+
import org.objectweb.asm.Opcodes
59

610
class SensorsAnalyticsDefaultMethodVisitor extends AdviceAdapter {
711

812
String methodName
913

1014
SensorsAnalyticsDefaultMethodVisitor(MethodVisitor mv, int access, String name, String desc) {
11-
super(Opcodes.ASM6, mv, access, name, desc)
15+
super(Opcodes.ASM5, mv, access, name, desc)
1216
methodName = name
1317
Logger.info("开始扫描方法:${Logger.accCode2String(access)} ${methodName}${desc}")
1418
}
@@ -22,8 +26,8 @@ class SensorsAnalyticsDefaultMethodVisitor extends AdviceAdapter {
2226
}
2327

2428
@Override
25-
void visitMethodInsn(int opcode, String owner, String name, String desc) {
26-
super.visitMethodInsn(opcode, owner, name, desc)
29+
void visitMethodInsn(int opcode, String owner, String name, String desc, boolean itf) {
30+
super.visitMethodInsn(opcode, owner, name, desc, itf)
2731
}
2832

2933
@Override

aop/src/main/groovy/com/sensorsdata/analytics/android/plugin/SensorsAnalyticsExtension.groovy

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ class SensorsAnalyticsExtension {
1010
boolean useInclude = false
1111
boolean lambdaEnabled = true
1212

13-
HashSet<String> exclude = []
14-
HashSet<String> include = []
13+
ArrayList<String> exclude = []
14+
ArrayList<String> include = []
1515

1616
SensorsAnalyticsSDKExtension sdk
1717

@@ -22,5 +22,34 @@ class SensorsAnalyticsExtension {
2222
void sdk(Action<? super SensorsAnalyticsSDKExtension> action) {
2323
action.execute(sdk)
2424
}
25+
26+
@Override
27+
String toString() {
28+
StringBuilder excludeBuilder = new StringBuilder()
29+
int length = exclude.size()
30+
for (int i = 0; i < length; i++) {
31+
excludeBuilder.append("'").append(exclude.get(i)).append("'")
32+
if (i != length - 1) {
33+
excludeBuilder.append(",")
34+
}
35+
}
36+
37+
StringBuilder includeBuilder = new StringBuilder()
38+
length = include.size()
39+
for (int i = 0; i < length; i++) {
40+
includeBuilder.append("'").append(include.get(i)).append("'")
41+
if (i != length - 1) {
42+
includeBuilder.append(",")
43+
}
44+
}
45+
return " debug=" + debug + "\n" +
46+
" disableJar=" + disableJar + "\n" +
47+
" useInclude=" + useInclude + "\n" +
48+
" lambdaEnabled=" + lambdaEnabled + "\n" +
49+
" exclude=[" + excludeBuilder.toString() +"]"+ "\n" +
50+
" include=[" + includeBuilder.toString() +"]"+ "\n" +
51+
" sdk {\n" + sdk + "\n"+
52+
"}"
53+
}
2554
}
2655

aop/src/main/groovy/com/sensorsdata/analytics/android/plugin/SensorsAnalyticsPlugin.groovy

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,25 @@ class SensorsAnalyticsPlugin implements Plugin<Project> {
1212
Instantiator ins = ((DefaultGradle) project.getGradle()).getServices().get(
1313
Instantiator)
1414
def args = [ins] as Object[]
15-
Object extension = project.extensions.create("sensorsAnalytics", SensorsAnalyticsExtension,args)
15+
SensorsAnalyticsExtension extension = project.extensions.create("sensorsAnalytics", SensorsAnalyticsExtension,args)
1616

1717
boolean disableSensorsAnalyticsPlugin = false
18+
boolean disableSensorsAnalyticsPluginNew = false
19+
boolean disableSensorsAnalyticsMultiThread = false
20+
boolean disableSensorsAnalyticsIncremental = false
1821
Properties properties = new Properties()
1922
if (project.rootProject.file('gradle.properties').exists()) {
2023
properties.load(project.rootProject.file('gradle.properties').newDataInputStream())
2124
disableSensorsAnalyticsPlugin = Boolean.parseBoolean(properties.getProperty("disableSensorsAnalyticsPlugin", "false"))
25+
disableSensorsAnalyticsPluginNew = Boolean.parseBoolean(properties.getProperty("sensorsAnalytics.disablePlugin", "false"))
26+
disableSensorsAnalyticsMultiThread = Boolean.parseBoolean(properties.getProperty("sensorsAnalytics.disableMultiThread", "false"))
27+
disableSensorsAnalyticsIncremental = Boolean.parseBoolean(properties.getProperty("sensorsAnalytics.disableIncremental", "false"))
2228
}
23-
if (!disableSensorsAnalyticsPlugin) {
29+
if (!disableSensorsAnalyticsPlugin && !disableSensorsAnalyticsPluginNew) {
2430
AppExtension appExtension = project.extensions.findByType(AppExtension.class)
2531
SensorsAnalyticsTransformHelper transformHelper = new SensorsAnalyticsTransformHelper(extension)
32+
transformHelper.disableSensorsAnalyticsIncremental = disableSensorsAnalyticsIncremental
33+
transformHelper.disableSensorsAnalyticsMultiThread = disableSensorsAnalyticsMultiThread
2634
appExtension.registerTransform(new SensorsAnalyticsTransform(transformHelper))
2735

2836
project.afterEvaluate {

aop/src/main/groovy/com/sensorsdata/analytics/android/plugin/SensorsAnalyticsSDKExtension.groovy

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,15 @@ class SensorsAnalyticsSDKExtension {
88
boolean disableAndroidID = false
99
boolean disableMacAddress = false
1010
boolean disableCarrier = false
11+
12+
@Override
13+
String toString() {
14+
return " disableIMEI=" + disableIMEI + "\n" +
15+
" disableLog=" + disableLog + "\n" +
16+
" disableJsInterface=" + disableJsInterface + "\n" +
17+
" disableAndroidID=" + disableAndroidID + "\n" +
18+
" disableMacAddress=" + disableMacAddress + "\n" +
19+
" disableCarrier=" + disableCarrier
20+
}
1121
}
1222

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

Lines changed: 48 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,15 @@ import java.util.zip.ZipEntry
2828

2929
class SensorsAnalyticsTransform extends Transform {
3030
private SensorsAnalyticsTransformHelper transformHelper
31-
public static final String VERSION = "3.0.1"
31+
public static final String VERSION = "3.0.2"
3232
public static final String MIN_SDK_VERSION = "3.0.0"
3333
private WaitableExecutor waitableExecutor
3434

3535
SensorsAnalyticsTransform(SensorsAnalyticsTransformHelper transformHelper) {
3636
this.transformHelper = transformHelper
37-
this.waitableExecutor = WaitableExecutor.useGlobalSharedThreadPool()
37+
if (!transformHelper.disableSensorsAnalyticsMultiThread) {
38+
waitableExecutor = WaitableExecutor.useGlobalSharedThreadPool()
39+
}
3840
}
3941

4042
@Override
@@ -54,12 +56,12 @@ class SensorsAnalyticsTransform extends Transform {
5456

5557
@Override
5658
boolean isIncremental() {
57-
return true
59+
return !transformHelper.disableSensorsAnalyticsIncremental
5860
}
5961

6062
@Override
6163
boolean isCacheable() {
62-
return true
64+
return !transformHelper.disableSensorsAnalyticsIncremental
6365
}
6466
/**
6567
* 打印提示信息
@@ -83,10 +85,10 @@ class SensorsAnalyticsTransform extends Transform {
8385
* 打印提示信息
8486
*/
8587
printCopyRight()
86-
8788
transformHelper.onTransform()
88-
89-
println("[SensorsAnalytics]: 是否增量编译:$isIncremental")
89+
println("[SensorsAnalytics]: 是否开启多线程编译:${!transformHelper.disableSensorsAnalyticsMultiThread}")
90+
println("[SensorsAnalytics]: 是否开启增量编译:${!transformHelper.disableSensorsAnalyticsIncremental}")
91+
println("[SensorsAnalytics]: 此次是否增量编译:$isIncremental")
9092
long startTime = System.currentTimeMillis()
9193
if (!isIncremental) {
9294
outputProvider.deleteAll()
@@ -99,13 +101,17 @@ class SensorsAnalyticsTransform extends Transform {
99101
* 遍历 jar
100102
*/
101103
input.jarInputs.each { JarInput jarInput ->
102-
waitableExecutor.execute(new Callable<Object>() {
103-
@Override
104-
Object call() throws Exception {
105-
forEachJar(isIncremental, jarInput, outputProvider, context)
106-
return null
107-
}
108-
})
104+
if (waitableExecutor) {
105+
waitableExecutor.execute(new Callable<Object>() {
106+
@Override
107+
Object call() throws Exception {
108+
forEachJar(isIncremental, jarInput, outputProvider, context)
109+
return null
110+
}
111+
})
112+
} else {
113+
forEachJar(isIncremental, jarInput, outputProvider, context)
114+
}
109115
}
110116

111117
/**
@@ -160,32 +166,41 @@ class SensorsAnalyticsTransform extends Transform {
160166
FileUtils.copyDirectory(dir, dest)
161167
dir.traverse(type: FileType.FILES, nameFilter: ~/.*\.class/) {
162168
File inputFile ->
163-
waitableExecutor.execute(new Callable<Object>() {
164-
@Override
165-
Object call() throws Exception {
166-
File modified = modifyClassFile(dir, inputFile, context.getTemporaryDir())
167-
if (modified != null) {
168-
File target = new File(inputFile.absolutePath.replace(srcDirPath, destDirPath))
169-
if (target.exists()) {
170-
target.delete()
171-
}
172-
FileUtils.copyFile(modified, target)
173-
modified.delete()
169+
if (waitableExecutor) {
170+
waitableExecutor.execute(new Callable<Object>() {
171+
@Override
172+
Object call() throws Exception {
173+
forEachDir(dir, inputFile, context, srcDirPath, destDirPath)
174+
return null
174175
}
175-
return null
176-
}
177-
})
176+
})
177+
} else {
178+
forEachDir(dir,inputFile,context,srcDirPath,destDirPath)
179+
}
178180
}
179181
}
180182

181183
}
182184
}
183-
184-
waitableExecutor.waitForTasksWithQuickFail(true)
185+
if (waitableExecutor) {
186+
waitableExecutor.waitForTasksWithQuickFail(true)
187+
}
185188

186189
println("[SensorsAnalytics]: 此次编译共耗时:${System.currentTimeMillis() - startTime}毫秒")
187190
}
188191

192+
void forEachDir(File dir , File inputFile, Context context ,String srcDirPath, String destDirPath) {
193+
File modified = modifyClassFile(dir, inputFile, context.getTemporaryDir())
194+
if (modified != null) {
195+
File target = new File(inputFile.absolutePath.replace(srcDirPath, destDirPath))
196+
if (target.exists()) {
197+
target.delete()
198+
}
199+
FileUtils.copyFile(modified, target)
200+
modified.delete()
201+
}
202+
}
203+
189204
void forEachJar(boolean isIncremental,JarInput jarInput,TransformOutputProvider outputProvider,Context context){
190205
String destName = jarInput.file.name
191206
/**
@@ -223,7 +238,7 @@ class SensorsAnalyticsTransform extends Transform {
223238

224239
void transformJar(File dest,JarInput jarInput,Context context) {
225240
def modifiedJar = null
226-
if (!transformHelper.disableJar || jarInput.file.absolutePath.contains('SensorsAnalyticsSDK')) {
241+
if (!transformHelper.extension.disableJar || jarInput.file.absolutePath.contains('SensorsAnalyticsSDK')) {
227242
Logger.info("开始遍历 jar:" + jarInput.file.absolutePath)
228243
modifiedJar = modifyJarFile(jarInput.file, context.getTemporaryDir())
229244
Logger.info("结束遍历 jar:" + jarInput.file.absolutePath)
@@ -310,7 +325,7 @@ class SensorsAnalyticsTransform extends Transform {
310325
throw e
311326
} catch (Exception ex) {
312327
ex.printStackTrace()
313-
if (transformHelper.debug) {
328+
if (transformHelper.extension.debug) {
314329
throw new Error()
315330
}
316331
return srcByteCode
@@ -330,7 +345,7 @@ class SensorsAnalyticsTransform extends Transform {
330345
throw e
331346
} catch(Exception ex) {
332347
ex.printStackTrace()
333-
if (transformHelper.debug) {
348+
if (transformHelper.extension.debug) {
334349
throw new Error()
335350
}
336351
return srcClass

0 commit comments

Comments
 (0)