Skip to content

Commit 20cf377

Browse files
author
dengshiwei
committed
Release 3.1.9
1 parent f9fb081 commit 20cf377

File tree

6 files changed

+97
-32
lines changed

6 files changed

+97
-32
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.1.8'
2+
pluginVersion = '3.1.9'
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: 42 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -254,13 +254,54 @@ class SensorsAnalyticsClassVisitor extends ClassVisitor {
254254
methodVisitor.visitVarInsn(ASTORE, localId)
255255
localIds.add(localId)
256256
}
257+
if (transformHelper.isHookOnMethodEnter) {
258+
handleCode()
259+
}
257260
}
258261

259262
@Override
260263
protected void onMethodExit(int opcode) {
261264
super.onMethodExit(opcode)
265+
if (!transformHelper.isHookOnMethodEnter) {
266+
handleCode()
267+
}
268+
}
262269

263-
if (isSensorsDataIgnoreTrackOnClick || isHasInstrumented || classNameAnalytics.isSensorsDataAPI) {
270+
void handleCode(){
271+
if (isHasInstrumented || classNameAnalytics.isSensorsDataAPI) {
272+
return
273+
}
274+
275+
/**
276+
* Fragment
277+
* 目前支持以下 Fragment 页面浏览事件:
278+
* android/app/Fragment,android/app/ListFragment, android/app/DialogFragment,
279+
* android/support/v4/app/Fragment,android/support/v4/app/ListFragment,android/support/v4/app/DialogFragment,
280+
* androidx/fragment/app/Fragment,androidx/fragment/app/ListFragment,androidx/fragment/app/DialogFragment
281+
*/
282+
if (SensorsAnalyticsUtil.isInstanceOfFragment(mSuperName)) {
283+
SensorsAnalyticsMethodCell sensorsAnalyticsMethodCell = SensorsAnalyticsHookConfig.FRAGMENT_METHODS.get(nameDesc)
284+
if (sensorsAnalyticsMethodCell != null) {
285+
visitedFragMethods.add(nameDesc)
286+
if (isSetUserVisibleHint) {
287+
methodVisitor.visitVarInsn(ALOAD, 0)
288+
methodVisitor.visitVarInsn(ILOAD, variableID)
289+
methodVisitor.visitMethodInsn(Opcodes.INVOKESTATIC, SensorsAnalyticsHookConfig.SENSORS_ANALYTICS_API, sensorsAnalyticsMethodCell.agentName, sensorsAnalyticsMethodCell.agentDesc, false)
290+
} else if (localIds != null){
291+
methodVisitor.visitVarInsn(ALOAD, 0)
292+
for (localId in localIds) {
293+
methodVisitor.visitVarInsn(ALOAD, localId)
294+
}
295+
methodVisitor.visitMethodInsn(Opcodes.INVOKESTATIC, SensorsAnalyticsHookConfig.SENSORS_ANALYTICS_API, sensorsAnalyticsMethodCell.agentName, sensorsAnalyticsMethodCell.agentDesc, false)
296+
} else {
297+
visitMethodWithLoadedParams(methodVisitor, Opcodes.INVOKESTATIC, SensorsAnalyticsHookConfig.SENSORS_ANALYTICS_API, sensorsAnalyticsMethodCell.agentName, sensorsAnalyticsMethodCell.agentDesc, sensorsAnalyticsMethodCell.paramsStart, sensorsAnalyticsMethodCell.paramsCount, sensorsAnalyticsMethodCell.opcodes)
298+
}
299+
isHasTracked = true
300+
return
301+
}
302+
}
303+
304+
if (isSensorsDataIgnoreTrackOnClick) {
264305
return
265306
}
266307

@@ -320,34 +361,6 @@ class SensorsAnalyticsClassVisitor extends ClassVisitor {
320361
return
321362
}
322363

323-
/**
324-
* Fragment
325-
* 目前支持以下 Fragment 页面浏览事件:
326-
* android/app/Fragment,android/app/ListFragment, android/app/DialogFragment,
327-
* android/support/v4/app/Fragment,android/support/v4/app/ListFragment,android/support/v4/app/DialogFragment,
328-
* androidx/fragment/app/Fragment,androidx/fragment/app/ListFragment,androidx/fragment/app/DialogFragment
329-
*/
330-
if (SensorsAnalyticsUtil.isInstanceOfFragment(mSuperName)) {
331-
SensorsAnalyticsMethodCell sensorsAnalyticsMethodCell = SensorsAnalyticsHookConfig.FRAGMENT_METHODS.get(nameDesc)
332-
if (sensorsAnalyticsMethodCell != null) {
333-
visitedFragMethods.add(nameDesc)
334-
if (isSetUserVisibleHint) {
335-
methodVisitor.visitVarInsn(ALOAD, 0)
336-
methodVisitor.visitVarInsn(ILOAD, variableID)
337-
methodVisitor.visitMethodInsn(Opcodes.INVOKESTATIC, SensorsAnalyticsHookConfig.SENSORS_ANALYTICS_API, sensorsAnalyticsMethodCell.agentName, sensorsAnalyticsMethodCell.agentDesc, false)
338-
} else if (localIds != null){
339-
methodVisitor.visitVarInsn(ALOAD, 0)
340-
for (localId in localIds) {
341-
methodVisitor.visitVarInsn(ALOAD, localId)
342-
}
343-
methodVisitor.visitMethodInsn(Opcodes.INVOKESTATIC, SensorsAnalyticsHookConfig.SENSORS_ANALYTICS_API, sensorsAnalyticsMethodCell.agentName, sensorsAnalyticsMethodCell.agentDesc, false)
344-
} else {
345-
visitMethodWithLoadedParams(methodVisitor, Opcodes.INVOKESTATIC, SensorsAnalyticsHookConfig.SENSORS_ANALYTICS_API, sensorsAnalyticsMethodCell.agentName, sensorsAnalyticsMethodCell.agentDesc, sensorsAnalyticsMethodCell.paramsStart, sensorsAnalyticsMethodCell.paramsCount, sensorsAnalyticsMethodCell.opcodes)
346-
}
347-
isHasTracked = true
348-
return
349-
}
350-
}
351364

352365
/**
353366
* Menu

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

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,30 @@ class SensorsAnalyticsHookConfig {
144144
'(Landroid/content/DialogInterface;I)V',
145145
1, 2,
146146
[Opcodes.ALOAD, Opcodes.ILOAD]))
147-
// Todo: 扩展
147+
addInterfaceMethod(new SensorsAnalyticsMethodCell(
148+
'onMenuItemClick',
149+
'(Landroid/view/MenuItem;)Z',
150+
'android/widget/PopupMenu$OnMenuItemClickListener',
151+
'trackMenuItem',
152+
'(Landroid/view/MenuItem;)V',
153+
1, 1,
154+
[Opcodes.ALOAD]))
155+
addInterfaceMethod(new SensorsAnalyticsMethodCell(
156+
'onMenuItemClick',
157+
'(Landroid/view/MenuItem;)Z',
158+
'androidx/appcompat/widget/PopupMenu$OnMenuItemClickListener',
159+
'trackMenuItem',
160+
'(Landroid/view/MenuItem;)V',
161+
1, 1,
162+
[Opcodes.ALOAD]))
163+
addInterfaceMethod(new SensorsAnalyticsMethodCell(
164+
'onMenuItemClick',
165+
'(Landroid/view/MenuItem;)Z',
166+
'android/support/v7/widget/PopupMenu$OnMenuItemClickListener',
167+
'trackMenuItem',
168+
'(Landroid/view/MenuItem;)V',
169+
1, 1,
170+
[Opcodes.ALOAD]))
148171
}
149172

150173
static void addInterfaceMethod(SensorsAnalyticsMethodCell sensorsAnalyticsMethodCell) {
@@ -319,6 +342,30 @@ class SensorsAnalyticsHookConfig {
319342
'(Landroid/content/DialogInterface;I)V',
320343
1, 2,
321344
[Opcodes.ALOAD, Opcodes.ILOAD]))
345+
addLambdaMethod(new SensorsAnalyticsMethodCell(
346+
'onMenuItemClick',
347+
'(Landroid/view/MenuItem;)Z',
348+
'Landroid/widget/PopupMenu$OnMenuItemClickListener;',
349+
'trackMenuItem',
350+
'(Landroid/view/MenuItem;)V',
351+
1, 1,
352+
[Opcodes.ALOAD]))
353+
addLambdaMethod(new SensorsAnalyticsMethodCell(
354+
'onMenuItemClick',
355+
'(Landroid/view/MenuItem;)Z',
356+
'Landroidx/appcompat/widget/PopupMenu$OnMenuItemClickListener;',
357+
'trackMenuItem',
358+
'(Landroid/view/MenuItem;)V',
359+
1, 1,
360+
[Opcodes.ALOAD]))
361+
addLambdaMethod(new SensorsAnalyticsMethodCell(
362+
'onMenuItemClick',
363+
'(Landroid/view/MenuItem;)Z',
364+
'Landroid/support/v7/widget/PopupMenu$OnMenuItemClickListener;',
365+
'trackMenuItem',
366+
'(Landroid/view/MenuItem;)V',
367+
1, 1,
368+
[Opcodes.ALOAD]))
322369

323370
// Todo: 扩展
324371
}

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,19 +33,22 @@ class SensorsAnalyticsPlugin implements Plugin<Project> {
3333
boolean disableSensorsAnalyticsPlugin = false
3434
boolean disableSensorsAnalyticsMultiThreadBuild = false
3535
boolean disableSensorsAnalyticsIncrementalBuild = false
36+
boolean isHookOnMethodEnter = false
3637
Properties properties = new Properties()
3738
if (project.rootProject.file('gradle.properties').exists()) {
3839
properties.load(project.rootProject.file('gradle.properties').newDataInputStream())
3940
disableSensorsAnalyticsPlugin = Boolean.parseBoolean(properties.getProperty("sensorsAnalytics.disablePlugin", "false")) ||
4041
Boolean.parseBoolean(properties.getProperty("disableSensorsAnalyticsPlugin", "false"))
4142
disableSensorsAnalyticsMultiThreadBuild = Boolean.parseBoolean(properties.getProperty("sensorsAnalytics.disableMultiThreadBuild", "false"))
4243
disableSensorsAnalyticsIncrementalBuild = Boolean.parseBoolean(properties.getProperty("sensorsAnalytics.disableIncrementalBuild", "false"))
44+
isHookOnMethodEnter = Boolean.parseBoolean(properties.getProperty("sensorsAnalytics.isHookOnMethodEnter", "false"))
4345
}
4446
if (!disableSensorsAnalyticsPlugin) {
4547
AppExtension appExtension = project.extensions.findByType(AppExtension.class)
4648
SensorsAnalyticsTransformHelper transformHelper = new SensorsAnalyticsTransformHelper(extension)
4749
transformHelper.disableSensorsAnalyticsIncremental = disableSensorsAnalyticsIncrementalBuild
4850
transformHelper.disableSensorsAnalyticsMultiThread = disableSensorsAnalyticsMultiThreadBuild
51+
transformHelper.isHookOnMethodEnter = isHookOnMethodEnter
4952
appExtension.registerTransform(new SensorsAnalyticsTransform(transformHelper))
5053
project.afterEvaluate {
5154
Logger.setDebug(extension.debug)

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

Lines changed: 2 additions & 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.1.8"
48+
public static final String VERSION = "3.1.9"
4949
public static final String MIN_SDK_VERSION = "3.0.0"
5050
private WaitableExecutor waitableExecutor
5151

@@ -89,6 +89,7 @@ class SensorsAnalyticsTransform extends Transform {
8989
println("[SensorsAnalytics]: 是否开启多线程编译:${!transformHelper.disableSensorsAnalyticsMultiThread}")
9090
println("[SensorsAnalytics]: 是否开启增量编译:${!transformHelper.disableSensorsAnalyticsIncremental}")
9191
println("[SensorsAnalytics]: 此次是否增量编译:$isIncremental")
92+
println("[SensorsAnalytics]: 是否在方法进入时插入代码:${transformHelper.isHookOnMethodEnter}")
9293
long startTime = System.currentTimeMillis()
9394
if (!isIncremental) {
9495
outputProvider.deleteAll()

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
SensorsAnalyticsSDKHookConfig sensorsAnalyticsHookConfig
2424
boolean disableSensorsAnalyticsMultiThread
2525
boolean disableSensorsAnalyticsIncremental
26+
boolean isHookOnMethodEnter
2627
HashSet<String> exclude = ['com.sensorsdata.analytics.android.sdk', 'android.support', 'androidx', 'com.qiyukf', 'android.arch', 'com.google.android']
2728
HashSet<String> include = ['butterknife.internal.DebouncingOnClickListener',
2829
'com.jakewharton.rxbinding.view.ViewClickOnSubscribe',

0 commit comments

Comments
 (0)