Skip to content

Commit 9663400

Browse files
author
weiqiangliu
committed
Release 3.2.13
1 parent 63653ef commit 9663400

File tree

7 files changed

+46
-5
lines changed

7 files changed

+46
-5
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.12'
2+
pluginVersion = '3.2.13'
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/ClassNameAnalytics.groovy

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,18 @@ class ClassNameAnalytics {
2424
boolean isSensorsDataUtils = false
2525
boolean isSALog = false
2626
def methodCells = new ArrayList<SensorsAnalyticsMethodCell>()
27+
boolean isAppWebViewInterface = false
2728

2829
ClassNameAnalytics(String className) {
2930
this.className = className
3031
isSensorsDataAPI = (className == 'com.sensorsdata.analytics.android.sdk.SensorsDataAPI')
3132
isSensorsDataUtils = (className == 'com.sensorsdata.analytics.android.sdk.util.SensorsDataUtils')
3233
isSALog = (className == 'com.sensorsdata.analytics.android.sdk.SALog')
34+
isAppWebViewInterface = (className == 'com.sensorsdata.analytics.android.sdk.AppWebViewInterface')
3335
}
3436

3537
boolean isSDKFile() {
36-
return isSALog || isSensorsDataAPI || isSensorsDataUtils
38+
return isSALog || isSensorsDataAPI || isSensorsDataUtils || isAppWebViewInterface
3739
}
3840

3941
boolean isLeanback() {

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

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,18 +193,21 @@ class SensorsAnalyticsClassVisitor extends ClassVisitor {
193193
//访问权限是public并且非静态
194194
boolean pubAndNoStaticAccess
195195
ArrayList<Integer> localIds
196+
boolean shouldAddUCJS = false
196197

197198
@Override
198199
void visitEnd() {
199200
super.visitEnd()
200-
201201
if (isHasTracked) {
202202
if (transformHelper.extension.lambdaEnabled && mLambdaMethodCells.containsKey(nameDesc)) {
203203
mLambdaMethodCells.remove(nameDesc)
204204
}
205205
visitAnnotation("Lcom/sensorsdata/analytics/android/sdk/SensorsDataInstrumented;", false)
206206
Logger.info("Hooked method: ${name}${desc}\n")
207207
}
208+
if (shouldAddUCJS) {
209+
visitAnnotation("Lcom/uc/webview/export/JavascriptInterface;", true)
210+
}
208211
}
209212

210213
@Override
@@ -278,6 +281,12 @@ class SensorsAnalyticsClassVisitor extends ClassVisitor {
278281
methodVisitor.visitVarInsn(ILOAD, 2)
279282
methodVisitor.visitVarInsn(ISTORE, secondLocalId)
280283
localIds.add(secondLocalId)
284+
} else if (nameDesc == "onCheckedChanged(Landroid/widget/CompoundButton;Z)V" && pubAndNoStaticAccess) {
285+
localIds = new ArrayList<>()
286+
int firstLocalId = newLocal(Type.getObjectType("android/widget/CompoundButton"))
287+
methodVisitor.visitVarInsn(ALOAD, 1)
288+
methodVisitor.visitVarInsn(ASTORE, firstLocalId)
289+
localIds.add(firstLocalId)
281290
} else if (nameDesc == "onClick(Landroid/content/DialogInterface;I)V" && pubAndNoStaticAccess) {
282291
localIds = new ArrayList<>()
283292
int firstLocalId = newLocal(Type.getObjectType("android/content/DialogInterface"))
@@ -521,6 +530,16 @@ class SensorsAnalyticsClassVisitor extends ClassVisitor {
521530
isHasTracked = true
522531
return
523532
}
533+
} else if (mInterfaces.contains('android/widget/CompoundButton$OnCheckedChangeListener')
534+
&& nameDesc == 'onCheckedChanged(Landroid/widget/CompoundButton;Z)V') {
535+
SensorsAnalyticsMethodCell sensorsAnalyticsMethodCell = SensorsAnalyticsHookConfig.INTERFACE_METHODS
536+
.get('android/widget/CompoundButton$OnCheckedChangeListeneronCheckedChanged(Landroid/widget/CompoundButton;Z)V')
537+
if (sensorsAnalyticsMethodCell != null) {
538+
methodVisitor.visitVarInsn(ALOAD, localIds.get(0))
539+
methodVisitor.visitMethodInsn(INVOKESTATIC, SensorsAnalyticsHookConfig.SENSORS_ANALYTICS_API, sensorsAnalyticsMethodCell.agentName, sensorsAnalyticsMethodCell.agentDesc, false)
540+
isHasTracked = true
541+
return
542+
}
524543
} else if (mInterfaces.contains('android/content/DialogInterface$OnClickListener')
525544
&& nameDesc == 'onClick(Landroid/content/DialogInterface;I)V') {
526545
SensorsAnalyticsMethodCell sensorsAnalyticsMethodCell = SensorsAnalyticsHookConfig.INTERFACE_METHODS
@@ -641,6 +660,8 @@ class SensorsAnalyticsClassVisitor extends ClassVisitor {
641660
}
642661
}
643662
}
663+
} else if (classNameAnalytics.isAppWebViewInterface && transformHelper.extension.addUCJavaScriptInterface && s == "Landroid/webkit/JavascriptInterface;") {
664+
shouldAddUCJS = true
644665
}
645666

646667
return super.visitAnnotation(s, b)

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ class SensorsAnalyticsExtension {
2626
public boolean useInclude = false
2727
public boolean lambdaEnabled = true
2828
public boolean autoHandleWebView = true
29+
public boolean addUCJavaScriptInterface = false
2930
public boolean lambdaParamOptimize = false
3031

3132
public ArrayList<String> exclude = []
@@ -64,6 +65,7 @@ class SensorsAnalyticsExtension {
6465
"\tdisableJar=" + disableJar + "\n" +
6566
"\tuseInclude=" + useInclude + "\n" +
6667
"\tautoHandleWebView=" + autoHandleWebView + "\n" +
68+
"\taddUCJavaScriptInterface=" + addUCJavaScriptInterface + "\n" +
6769
"\tlambdaParamOptimize=" + lambdaParamOptimize + "\n" +
6870
"\tlambdaEnabled=" + lambdaEnabled + "\n" +
6971
"\texclude=[" + excludeBuilder.toString() + "]" + "\n" +

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

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,14 @@ class SensorsAnalyticsHookConfig {
299299
'(Landroid/view/View;)V',
300300
1, 1,
301301
[Opcodes.ALOAD]))
302+
SAMPLING_LAMBDA_METHODS.add(new SensorsAnalyticsMethodCell(
303+
'onClick',
304+
'(Landroid/view/View;)V',
305+
'Landroid/view/View$OnClickListener;',
306+
'trackViewOnClick',
307+
'(Landroid/view/View;)V',
308+
1, 1,
309+
[Opcodes.ALOAD]))
302310
addLambdaMethod(new SensorsAnalyticsMethodCell(
303311
'onCheckedChanged',
304312
'(Landroid/widget/CompoundButton;Z)V',
@@ -323,6 +331,14 @@ class SensorsAnalyticsHookConfig {
323331
'(Landroid/widget/RadioGroup;I)V',
324332
1, 2,
325333
[Opcodes.ALOAD, Opcodes.ILOAD]))
334+
SAMPLING_LAMBDA_METHODS.add(new SensorsAnalyticsMethodCell(
335+
'onCheckedChanged',
336+
'(Landroid/widget/RadioGroup;I)V',
337+
'Landroid/widget/RadioGroup$OnCheckedChangeListener;',
338+
'trackRadioGroup',
339+
'(Landroid/widget/RadioGroup;I)V',
340+
1, 2,
341+
[Opcodes.ALOAD, Opcodes.ILOAD]))
326342
addLambdaMethod(new SensorsAnalyticsMethodCell(
327343
'onClick',
328344
'(Landroid/content/DialogInterface;I)V',

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ import java.util.jar.JarOutputStream
4545

4646
class SensorsAnalyticsTransform extends Transform {
4747
private SensorsAnalyticsTransformHelper transformHelper
48-
public static final String VERSION = "3.2.12"
48+
public static final String VERSION = "3.2.13"
4949
public static final String MIN_SDK_VERSION = "4.3.2"
5050
private WaitableExecutor waitableExecutor
5151
private URLClassLoader urlClassLoader

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ class SensorsAnalyticsTransformHelper {
9797
classNameAnalytics.methodCells.addAll(methodCellList)
9898
}
9999
}
100-
if (classNameAnalytics.methodCells.size() > 0 || classNameAnalytics.isSensorsDataAPI) {
100+
if (classNameAnalytics.methodCells.size() > 0 || classNameAnalytics.isSensorsDataAPI || (classNameAnalytics.isAppWebViewInterface && extension.addUCJavaScriptInterface)) {
101101
classNameAnalytics.isShouldModify = true
102102
}
103103
} else if (!classNameAnalytics.isAndroidGenerated()) {

0 commit comments

Comments
 (0)