@@ -236,10 +236,23 @@ class SensorsAnalyticsClassVisitor extends ClassVisitor {
236236 methodVisitor. visitVarInsn(ALOAD , 1 )
237237 methodVisitor. visitVarInsn(ASTORE , variableID)
238238 } else if (nameDesc == ' onItemClick(Landroid/widget/AdapterView;Landroid/view/View;IJ)V' && pubAndNoStaticAccess) {
239+ localIds = new ArrayList<> ()
239240 isOnItemClickMethod = true
240- variableID = newLocal(Type . getObjectType(" java/lang/Integer" ))
241+
242+ int first = newLocal(Type . getObjectType(" android/widget/AdapterView" ))
241243 methodVisitor. visitVarInsn(ALOAD , 1 )
242- methodVisitor. visitVarInsn(ASTORE , variableID)
244+ methodVisitor. visitVarInsn(ASTORE , first)
245+ localIds. add(first)
246+
247+ int second = newLocal(Type . getObjectType(" android/view/View" ))
248+ methodVisitor. visitVarInsn(ALOAD , 2 )
249+ methodVisitor. visitVarInsn(ASTORE , second)
250+ localIds. add(second)
251+
252+ int third = newLocal(Type . INT_TYPE )
253+ methodVisitor. visitVarInsn(ILOAD , 3 )
254+ methodVisitor. visitVarInsn(ISTORE , third)
255+ localIds. add(third)
243256 } else if (nameDesc == ' setUserVisibleHint(Z)V' && pubAndNoStaticAccess) {
244257 isSetUserVisibleHint = true
245258 variableID = newLocal(Type . getObjectType(" java/lang/Integer" ))
@@ -265,6 +278,26 @@ class SensorsAnalyticsClassVisitor extends ClassVisitor {
265278 methodVisitor. visitVarInsn(ILOAD , 2 )
266279 methodVisitor. visitVarInsn(ISTORE , secondLocalId)
267280 localIds. add(secondLocalId)
281+ } else if (nameDesc == " onClick(Landroid/content/DialogInterface;I)V" && pubAndNoStaticAccess) {
282+ localIds = new ArrayList<> ()
283+ int firstLocalId = newLocal(Type . getObjectType(" android/content/DialogInterface" ))
284+ methodVisitor. visitVarInsn(ALOAD , 1 )
285+ methodVisitor. visitVarInsn(ASTORE , firstLocalId)
286+ localIds. add(firstLocalId)
287+ int secondLocalId = newLocal(Type . INT_TYPE )
288+ methodVisitor. visitVarInsn(ILOAD , 2 )
289+ methodVisitor. visitVarInsn(ISTORE , secondLocalId)
290+ localIds. add(secondLocalId)
291+ } else if (SensorsAnalyticsUtil . isTargetMenuMethodDesc(nameDesc) && pubAndNoStaticAccess) {
292+ localIds = new ArrayList<> ()
293+ int firstLocalId = newLocal(Type . getObjectType(" java/lang/Object" ))
294+ methodVisitor. visitVarInsn(ALOAD , 0 )
295+ methodVisitor. visitVarInsn(ASTORE , firstLocalId)
296+ localIds. add(firstLocalId)
297+ int secondLocalId = newLocal(Type . getObjectType(" android/view/MenuItem" ))
298+ methodVisitor. visitVarInsn(ALOAD , 1 )
299+ methodVisitor. visitVarInsn(ASTORE , secondLocalId)
300+ localIds. add(secondLocalId)
268301 }
269302 if (transformHelper. isHookOnMethodEnter) {
270303 handleCode()
@@ -370,8 +403,8 @@ class SensorsAnalyticsClassVisitor extends ClassVisitor {
370403 * 目前支持 onContextItemSelected(MenuItem item)、onOptionsItemSelected(MenuItem item)
371404 */
372405 if (SensorsAnalyticsUtil . isTargetMenuMethodDesc(nameDesc)) {
373- methodVisitor. visitVarInsn(ALOAD , 0 )
374- methodVisitor. visitVarInsn(ALOAD , 1 )
406+ methodVisitor. visitVarInsn(ALOAD , localIds[ 0 ] )
407+ methodVisitor. visitVarInsn(ALOAD , localIds[ 1 ] )
375408 methodVisitor. visitMethodInsn(INVOKESTATIC , SensorsAnalyticsHookConfig . SENSORS_ANALYTICS_API , " trackMenuItem" , " (Ljava/lang/Object;Landroid/view/MenuItem;)V" , false )
376409 isHasTracked = true
377410 return
@@ -426,9 +459,9 @@ class SensorsAnalyticsClassVisitor extends ClassVisitor {
426459
427460 if (mInterfaces != null && mInterfaces. length > 0 ) {
428461 if (isOnItemClickMethod && mInterfaces. contains(' android/widget/AdapterView$OnItemClickListener' )) {
429- methodVisitor. visitVarInsn(ALOAD , variableID )
430- methodVisitor. visitVarInsn(ALOAD , 2 )
431- methodVisitor. visitVarInsn(ILOAD , 3 )
462+ methodVisitor. visitVarInsn(ALOAD , localIds . get( 0 ) )
463+ methodVisitor. visitVarInsn(ALOAD , localIds . get( 1 ) )
464+ methodVisitor. visitVarInsn(ILOAD , localIds . get( 2 ) )
432465 methodVisitor. visitMethodInsn(INVOKESTATIC , SensorsAnalyticsHookConfig . SENSORS_ANALYTICS_API , " trackListView" , " (Landroid/widget/AdapterView;Landroid/view/View;I)V" , false )
433466 isHasTracked = true
434467 return
@@ -443,6 +476,17 @@ class SensorsAnalyticsClassVisitor extends ClassVisitor {
443476 isHasTracked = true
444477 return
445478 }
479+ } else if (mInterfaces. contains(' android/content/DialogInterface$OnClickListener' )
480+ && nameDesc == ' onClick(Landroid/content/DialogInterface;I)V' ) {
481+ SensorsAnalyticsMethodCell sensorsAnalyticsMethodCell = SensorsAnalyticsHookConfig . INTERFACE_METHODS
482+ .get(' android/content/DialogInterface$OnClickListeneronClick(Landroid/content/DialogInterface;I)V' )
483+ if (sensorsAnalyticsMethodCell != null ) {
484+ methodVisitor. visitVarInsn(ALOAD , localIds. get(0 ))
485+ methodVisitor. visitVarInsn(ILOAD , localIds. get(1 ))
486+ methodVisitor. visitMethodInsn(INVOKESTATIC , SensorsAnalyticsHookConfig . SENSORS_ANALYTICS_API , sensorsAnalyticsMethodCell. agentName, sensorsAnalyticsMethodCell. agentDesc, false )
487+ isHasTracked = true
488+ return
489+ }
446490 } else {
447491 for (interfaceName in mInterfaces) {
448492 SensorsAnalyticsMethodCell sensorsAnalyticsMethodCell = SensorsAnalyticsHookConfig . INTERFACE_METHODS . get(interfaceName + nameDesc)
0 commit comments