Skip to content

Commit 3e27f31

Browse files
author
weiqiangliu
committed
Release 3.3.3
1 parent cbe8640 commit 3e27f31

File tree

4 files changed

+168
-131
lines changed

4 files changed

+168
-131
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.3.2'
2+
pluginVersion = '3.3.3'
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: 162 additions & 129 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,7 @@ class SensorsAnalyticsClassVisitor extends ClassVisitor {
193193

194194
//访问权限是public并且非静态
195195
boolean pubAndNoStaticAccess
196+
boolean protectedAndNotStaticAccess
196197
ArrayList<Integer> localIds
197198
boolean shouldAddUCJS = false
198199

@@ -234,136 +235,157 @@ class SensorsAnalyticsClassVisitor extends ClassVisitor {
234235
super.onMethodEnter()
235236
nameDesc = name + desc
236237
pubAndNoStaticAccess = SensorsAnalyticsUtil.isPublic(access) && !SensorsAnalyticsUtil.isStatic(access)
237-
if ((nameDesc == 'onClick(Landroid/view/View;)V') && pubAndNoStaticAccess) {
238-
isOnClickMethod = true
239-
variableID = newLocal(Type.getObjectType("java/lang/Integer"))
240-
methodVisitor.visitVarInsn(ALOAD, 1)
241-
methodVisitor.visitVarInsn(ASTORE, variableID)
242-
} else if (nameDesc == 'onItemClick(Landroid/widget/AdapterView;Landroid/view/View;IJ)V' && pubAndNoStaticAccess) {
243-
localIds = new ArrayList<>()
244-
isOnItemClickMethod = true
245-
246-
int first = newLocal(Type.getObjectType("android/widget/AdapterView"))
247-
methodVisitor.visitVarInsn(ALOAD, 1)
248-
methodVisitor.visitVarInsn(ASTORE, first)
249-
localIds.add(first)
250-
251-
int second = newLocal(Type.getObjectType("android/view/View"))
252-
methodVisitor.visitVarInsn(ALOAD, 2)
253-
methodVisitor.visitVarInsn(ASTORE, second)
254-
localIds.add(second)
255-
256-
int third = newLocal(Type.INT_TYPE)
257-
methodVisitor.visitVarInsn(ILOAD, 3)
258-
methodVisitor.visitVarInsn(ISTORE, third)
259-
localIds.add(third)
260-
} else if (pubAndNoStaticAccess && SensorsAnalyticsUtil.isInstanceOfFragment(mSuperName)
261-
&& SensorsAnalyticsHookConfig.FRAGMENT_METHODS.get(nameDesc) != null) {
262-
SensorsAnalyticsMethodCell sensorsAnalyticsMethodCell = SensorsAnalyticsHookConfig.FRAGMENT_METHODS.get(nameDesc)
263-
localIds = new ArrayList<>()
264-
Type[] types = Type.getArgumentTypes(desc)
265-
for (int i = 1; i < sensorsAnalyticsMethodCell.paramsCount; i++) {
266-
int localId = newLocal(types[i - 1])
267-
methodVisitor.visitVarInsn(sensorsAnalyticsMethodCell.opcodes.get(i), i)
268-
methodVisitor.visitVarInsn(SensorsAnalyticsUtil.convertOpcodes(sensorsAnalyticsMethodCell.opcodes.get(i)), localId)
269-
localIds.add(localId)
238+
protectedAndNotStaticAccess = SensorsAnalyticsUtil.isProtected(access) && !SensorsAnalyticsUtil.isStatic(access)
239+
if (pubAndNoStaticAccess) {
240+
if ((nameDesc == 'onClick(Landroid/view/View;)V')) {
241+
isOnClickMethod = true
242+
variableID = newLocal(Type.getObjectType("java/lang/Integer"))
243+
methodVisitor.visitVarInsn(ALOAD, 1)
244+
methodVisitor.visitVarInsn(ASTORE, variableID)
245+
} else if (nameDesc == 'onItemClick(Landroid/widget/AdapterView;Landroid/view/View;IJ)V') {
246+
localIds = new ArrayList<>()
247+
isOnItemClickMethod = true
248+
249+
int first = newLocal(Type.getObjectType("android/widget/AdapterView"))
250+
methodVisitor.visitVarInsn(ALOAD, 1)
251+
methodVisitor.visitVarInsn(ASTORE, first)
252+
localIds.add(first)
253+
254+
int second = newLocal(Type.getObjectType("android/view/View"))
255+
methodVisitor.visitVarInsn(ALOAD, 2)
256+
methodVisitor.visitVarInsn(ASTORE, second)
257+
localIds.add(second)
258+
259+
int third = newLocal(Type.INT_TYPE)
260+
methodVisitor.visitVarInsn(ILOAD, 3)
261+
methodVisitor.visitVarInsn(ISTORE, third)
262+
localIds.add(third)
263+
} else if (SensorsAnalyticsUtil.isInstanceOfFragment(mSuperName)
264+
&& SensorsAnalyticsHookConfig.FRAGMENT_METHODS.get(nameDesc) != null) {
265+
SensorsAnalyticsMethodCell sensorsAnalyticsMethodCell = SensorsAnalyticsHookConfig.FRAGMENT_METHODS.get(nameDesc)
266+
localIds = new ArrayList<>()
267+
Type[] types = Type.getArgumentTypes(desc)
268+
for (int i = 1; i < sensorsAnalyticsMethodCell.paramsCount; i++) {
269+
int localId = newLocal(types[i - 1])
270+
methodVisitor.visitVarInsn(sensorsAnalyticsMethodCell.opcodes.get(i), i)
271+
methodVisitor.visitVarInsn(SensorsAnalyticsUtil.convertOpcodes(sensorsAnalyticsMethodCell.opcodes.get(i)), localId)
272+
localIds.add(localId)
273+
}
274+
} else if (nameDesc == "onCheckedChanged(Landroid/widget/RadioGroup;I)V") {
275+
localIds = new ArrayList<>()
276+
int firstLocalId = newLocal(Type.getObjectType("android/widget/RadioGroup"))
277+
methodVisitor.visitVarInsn(ALOAD, 1)
278+
methodVisitor.visitVarInsn(ASTORE, firstLocalId)
279+
localIds.add(firstLocalId)
280+
int secondLocalId = newLocal(Type.INT_TYPE)
281+
methodVisitor.visitVarInsn(ILOAD, 2)
282+
methodVisitor.visitVarInsn(ISTORE, secondLocalId)
283+
localIds.add(secondLocalId)
284+
} else if (nameDesc == "onCheckedChanged(Landroid/widget/CompoundButton;Z)V") {
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)
290+
} else if (nameDesc == "onClick(Landroid/content/DialogInterface;I)V") {
291+
localIds = new ArrayList<>()
292+
int firstLocalId = newLocal(Type.getObjectType("android/content/DialogInterface"))
293+
methodVisitor.visitVarInsn(ALOAD, 1)
294+
methodVisitor.visitVarInsn(ASTORE, firstLocalId)
295+
localIds.add(firstLocalId)
296+
int secondLocalId = newLocal(Type.INT_TYPE)
297+
methodVisitor.visitVarInsn(ILOAD, 2)
298+
methodVisitor.visitVarInsn(ISTORE, secondLocalId)
299+
localIds.add(secondLocalId)
300+
} else if (SensorsAnalyticsUtil.isTargetMenuMethodDesc(nameDesc)) {
301+
localIds = new ArrayList<>()
302+
int firstLocalId = newLocal(Type.getObjectType("java/lang/Object"))
303+
methodVisitor.visitVarInsn(ALOAD, 0)
304+
methodVisitor.visitVarInsn(ASTORE, firstLocalId)
305+
localIds.add(firstLocalId)
306+
int secondLocalId = newLocal(Type.getObjectType("android/view/MenuItem"))
307+
methodVisitor.visitVarInsn(ALOAD, 1)
308+
methodVisitor.visitVarInsn(ASTORE, secondLocalId)
309+
localIds.add(secondLocalId)
310+
} else if (nameDesc == "onMenuItemClick(Landroid/view/MenuItem;)Z") {
311+
localIds = new ArrayList<>()
312+
int firstLocalId = newLocal(Type.getObjectType("android/view/MenuItem"))
313+
methodVisitor.visitVarInsn(ALOAD, 1)
314+
methodVisitor.visitVarInsn(ASTORE, firstLocalId)
315+
localIds.add(firstLocalId)
316+
} else if (nameDesc == "onGroupClick(Landroid/widget/ExpandableListView;Landroid/view/View;IJ)Z") {
317+
localIds = new ArrayList<>()
318+
int firstLocalId = newLocal(Type.getObjectType("android/widget/ExpandableListView"))
319+
methodVisitor.visitVarInsn(ALOAD, 1)
320+
methodVisitor.visitVarInsn(ASTORE, firstLocalId)
321+
localIds.add(firstLocalId)
322+
323+
int secondLocalId = newLocal(Type.getObjectType("android/view/View"))
324+
methodVisitor.visitVarInsn(ALOAD, 2)
325+
methodVisitor.visitVarInsn(ASTORE, secondLocalId)
326+
localIds.add(secondLocalId)
327+
328+
int thirdLocalId = newLocal(Type.INT_TYPE)
329+
methodVisitor.visitVarInsn(ILOAD, 3)
330+
methodVisitor.visitVarInsn(ISTORE, thirdLocalId)
331+
localIds.add(thirdLocalId)
332+
} else if (nameDesc == "onChildClick(Landroid/widget/ExpandableListView;Landroid/view/View;IIJ)Z") {
333+
localIds = new ArrayList<>()
334+
int firstLocalId = newLocal(Type.getObjectType("android/widget/ExpandableListView"))
335+
methodVisitor.visitVarInsn(ALOAD, 1)
336+
methodVisitor.visitVarInsn(ASTORE, firstLocalId)
337+
localIds.add(firstLocalId)
338+
339+
int secondLocalId = newLocal(Type.getObjectType("android/view/View"))
340+
methodVisitor.visitVarInsn(ALOAD, 2)
341+
methodVisitor.visitVarInsn(ASTORE, secondLocalId)
342+
localIds.add(secondLocalId)
343+
344+
int thirdLocalId = newLocal(Type.INT_TYPE)
345+
methodVisitor.visitVarInsn(ILOAD, 3)
346+
methodVisitor.visitVarInsn(ISTORE, thirdLocalId)
347+
localIds.add(thirdLocalId)
348+
349+
int fourthLocalId = newLocal(Type.INT_TYPE)
350+
methodVisitor.visitVarInsn(ILOAD, 4)
351+
methodVisitor.visitVarInsn(ISTORE, fourthLocalId)
352+
localIds.add(fourthLocalId)
353+
} else if (nameDesc == "onItemSelected(Landroid/widget/AdapterView;Landroid/view/View;IJ)V"
354+
|| nameDesc == "onListItemClick(Landroid/widget/ListView;Landroid/view/View;IJ)V") {
355+
localIds = new ArrayList<>()
356+
int firstLocalId = newLocal(Type.getObjectType("java/lang/Object"))
357+
methodVisitor.visitVarInsn(ALOAD, 1)
358+
methodVisitor.visitVarInsn(ASTORE, firstLocalId)
359+
localIds.add(firstLocalId)
360+
361+
int secondLocalId = newLocal(Type.getObjectType("android/view/View"))
362+
methodVisitor.visitVarInsn(ALOAD, 2)
363+
methodVisitor.visitVarInsn(ASTORE, secondLocalId)
364+
localIds.add(secondLocalId)
365+
366+
int thirdLocalId = newLocal(Type.INT_TYPE)
367+
methodVisitor.visitVarInsn(ILOAD, 3)
368+
methodVisitor.visitVarInsn(ISTORE, thirdLocalId)
369+
localIds.add(thirdLocalId)
370+
}
371+
} else if (protectedAndNotStaticAccess) {
372+
if (nameDesc == "onListItemClick(Landroid/widget/ListView;Landroid/view/View;IJ)V") {
373+
localIds = new ArrayList<>()
374+
int firstLocalId = newLocal(Type.getObjectType("java/lang/Object"))
375+
methodVisitor.visitVarInsn(ALOAD, 1)
376+
methodVisitor.visitVarInsn(ASTORE, firstLocalId)
377+
localIds.add(firstLocalId)
378+
379+
int secondLocalId = newLocal(Type.getObjectType("android/view/View"))
380+
methodVisitor.visitVarInsn(ALOAD, 2)
381+
methodVisitor.visitVarInsn(ASTORE, secondLocalId)
382+
localIds.add(secondLocalId)
383+
384+
int thirdLocalId = newLocal(Type.INT_TYPE)
385+
methodVisitor.visitVarInsn(ILOAD, 3)
386+
methodVisitor.visitVarInsn(ISTORE, thirdLocalId)
387+
localIds.add(thirdLocalId)
270388
}
271-
} else if (nameDesc == "onCheckedChanged(Landroid/widget/RadioGroup;I)V" && pubAndNoStaticAccess) {
272-
localIds = new ArrayList<>()
273-
int firstLocalId = newLocal(Type.getObjectType("android/widget/RadioGroup"))
274-
methodVisitor.visitVarInsn(ALOAD, 1)
275-
methodVisitor.visitVarInsn(ASTORE, firstLocalId)
276-
localIds.add(firstLocalId)
277-
int secondLocalId = newLocal(Type.INT_TYPE)
278-
methodVisitor.visitVarInsn(ILOAD, 2)
279-
methodVisitor.visitVarInsn(ISTORE, secondLocalId)
280-
localIds.add(secondLocalId)
281-
} else if (nameDesc == "onCheckedChanged(Landroid/widget/CompoundButton;Z)V" && pubAndNoStaticAccess) {
282-
localIds = new ArrayList<>()
283-
int firstLocalId = newLocal(Type.getObjectType("android/widget/CompoundButton"))
284-
methodVisitor.visitVarInsn(ALOAD, 1)
285-
methodVisitor.visitVarInsn(ASTORE, firstLocalId)
286-
localIds.add(firstLocalId)
287-
} else if (nameDesc == "onClick(Landroid/content/DialogInterface;I)V" && pubAndNoStaticAccess) {
288-
localIds = new ArrayList<>()
289-
int firstLocalId = newLocal(Type.getObjectType("android/content/DialogInterface"))
290-
methodVisitor.visitVarInsn(ALOAD, 1)
291-
methodVisitor.visitVarInsn(ASTORE, firstLocalId)
292-
localIds.add(firstLocalId)
293-
int secondLocalId = newLocal(Type.INT_TYPE)
294-
methodVisitor.visitVarInsn(ILOAD, 2)
295-
methodVisitor.visitVarInsn(ISTORE, secondLocalId)
296-
localIds.add(secondLocalId)
297-
} else if (SensorsAnalyticsUtil.isTargetMenuMethodDesc(nameDesc) && pubAndNoStaticAccess) {
298-
localIds = new ArrayList<>()
299-
int firstLocalId = newLocal(Type.getObjectType("java/lang/Object"))
300-
methodVisitor.visitVarInsn(ALOAD, 0)
301-
methodVisitor.visitVarInsn(ASTORE, firstLocalId)
302-
localIds.add(firstLocalId)
303-
int secondLocalId = newLocal(Type.getObjectType("android/view/MenuItem"))
304-
methodVisitor.visitVarInsn(ALOAD, 1)
305-
methodVisitor.visitVarInsn(ASTORE, secondLocalId)
306-
localIds.add(secondLocalId)
307-
} else if (nameDesc == "onMenuItemClick(Landroid/view/MenuItem;)Z" && pubAndNoStaticAccess) {
308-
localIds = new ArrayList<>()
309-
int firstLocalId = newLocal(Type.getObjectType("android/view/MenuItem"))
310-
methodVisitor.visitVarInsn(ALOAD, 1)
311-
methodVisitor.visitVarInsn(ASTORE, firstLocalId)
312-
localIds.add(firstLocalId)
313-
} else if (nameDesc == "onGroupClick(Landroid/widget/ExpandableListView;Landroid/view/View;IJ)Z") {
314-
localIds = new ArrayList<>()
315-
int firstLocalId = newLocal(Type.getObjectType("android/widget/ExpandableListView"))
316-
methodVisitor.visitVarInsn(ALOAD, 1)
317-
methodVisitor.visitVarInsn(ASTORE, firstLocalId)
318-
localIds.add(firstLocalId)
319-
320-
int secondLocalId = newLocal(Type.getObjectType("android/view/View"))
321-
methodVisitor.visitVarInsn(ALOAD, 2)
322-
methodVisitor.visitVarInsn(ASTORE, secondLocalId)
323-
localIds.add(secondLocalId)
324-
325-
int thirdLocalId = newLocal(Type.INT_TYPE)
326-
methodVisitor.visitVarInsn(ILOAD, 3)
327-
methodVisitor.visitVarInsn(ISTORE, thirdLocalId)
328-
localIds.add(thirdLocalId)
329-
} else if (nameDesc == "onChildClick(Landroid/widget/ExpandableListView;Landroid/view/View;IIJ)Z") {
330-
localIds = new ArrayList<>()
331-
int firstLocalId = newLocal(Type.getObjectType("android/widget/ExpandableListView"))
332-
methodVisitor.visitVarInsn(ALOAD, 1)
333-
methodVisitor.visitVarInsn(ASTORE, firstLocalId)
334-
localIds.add(firstLocalId)
335-
336-
int secondLocalId = newLocal(Type.getObjectType("android/view/View"))
337-
methodVisitor.visitVarInsn(ALOAD, 2)
338-
methodVisitor.visitVarInsn(ASTORE, secondLocalId)
339-
localIds.add(secondLocalId)
340-
341-
int thirdLocalId = newLocal(Type.INT_TYPE)
342-
methodVisitor.visitVarInsn(ILOAD, 3)
343-
methodVisitor.visitVarInsn(ISTORE, thirdLocalId)
344-
localIds.add(thirdLocalId)
345-
346-
int fourthLocalId = newLocal(Type.INT_TYPE)
347-
methodVisitor.visitVarInsn(ILOAD, 4)
348-
methodVisitor.visitVarInsn(ISTORE, fourthLocalId)
349-
localIds.add(fourthLocalId)
350-
} else if (nameDesc == "onItemSelected(Landroid/widget/AdapterView;Landroid/view/View;IJ)V"
351-
|| nameDesc == "onListItemClick(Landroid/widget/ListView;Landroid/view/View;IJ)V") {
352-
localIds = new ArrayList<>()
353-
int firstLocalId = newLocal(Type.getObjectType("java/lang/Object"))
354-
methodVisitor.visitVarInsn(ALOAD, 1)
355-
methodVisitor.visitVarInsn(ASTORE, firstLocalId)
356-
localIds.add(firstLocalId)
357-
358-
int secondLocalId = newLocal(Type.getObjectType("android/view/View"))
359-
methodVisitor.visitVarInsn(ALOAD, 2)
360-
methodVisitor.visitVarInsn(ASTORE, secondLocalId)
361-
localIds.add(secondLocalId)
362-
363-
int thirdLocalId = newLocal(Type.INT_TYPE)
364-
methodVisitor.visitVarInsn(ILOAD, 3)
365-
methodVisitor.visitVarInsn(ISTORE, thirdLocalId)
366-
localIds.add(thirdLocalId)
367389
}
368390

369391
// Lambda 参数优化部分,对现有参数进行复制
@@ -496,6 +518,17 @@ class SensorsAnalyticsClassVisitor extends ClassVisitor {
496518
}
497519

498520
if (!pubAndNoStaticAccess) {
521+
//如果是 protected 那么也需要处理
522+
if (protectedAndNotStaticAccess) {
523+
if (nameDesc == "onListItemClick(Landroid/widget/ListView;Landroid/view/View;IJ)V") {
524+
methodVisitor.visitVarInsn(ALOAD, localIds.get(0))
525+
methodVisitor.visitVarInsn(ALOAD, localIds.get(1))
526+
methodVisitor.visitVarInsn(ILOAD, localIds.get(2))
527+
methodVisitor.visitMethodInsn(INVOKESTATIC, SensorsAnalyticsHookConfig.SENSORS_ANALYTICS_API, "trackListView", "(Landroid/widget/AdapterView;Landroid/view/View;I)V", false)
528+
isHasTracked = true
529+
return
530+
}
531+
}
499532
return
500533
}
501534

0 commit comments

Comments
 (0)