@@ -257,21 +257,17 @@ class SensorsAnalyticsClassVisitor extends ClassVisitor {
257257 methodVisitor. visitVarInsn(ILOAD , 3 )
258258 methodVisitor. visitVarInsn(ISTORE , third)
259259 localIds. add(third)
260- } else if (nameDesc == ' setUserVisibleHint(Z)V' && pubAndNoStaticAccess) {
261- isSetUserVisibleHint = true
262- variableID = newLocal(Type . getObjectType(" java/lang/Integer" ))
263- methodVisitor. visitVarInsn(ILOAD , 1 )
264- methodVisitor. visitVarInsn(ISTORE , variableID)
265- } else if (nameDesc == ' onViewCreated(Landroid/view/View;Landroid/os/Bundle;)V' && pubAndNoStaticAccess) {
260+ } else if (pubAndNoStaticAccess && SensorsAnalyticsUtil . isInstanceOfFragment(mSuperName)
261+ && SensorsAnalyticsHookConfig . FRAGMENT_METHODS . get(nameDesc) != null ) {
262+ SensorsAnalyticsMethodCell sensorsAnalyticsMethodCell = SensorsAnalyticsHookConfig . FRAGMENT_METHODS . get(nameDesc)
266263 localIds = new ArrayList<> ()
267- int localId = newLocal(Type . getObjectType(" java/lang/Integer" ))
268- methodVisitor. visitVarInsn(ALOAD , 1 )
269- methodVisitor. visitVarInsn(ASTORE , localId)
270- localIds. add(localId)
271- localId = newLocal(Type . getObjectType(" java/lang/Integer" ))
272- methodVisitor. visitVarInsn(ALOAD , 2 )
273- methodVisitor. visitVarInsn(ASTORE , localId)
274- localIds. add(localId)
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)
270+ }
275271 } else if (nameDesc == " onCheckedChanged(Landroid/widget/RadioGroup;I)V" && pubAndNoStaticAccess) {
276272 localIds = new ArrayList<> ()
277273 int firstLocalId = newLocal(Type . getObjectType(" android/widget/RadioGroup" ))
@@ -308,19 +304,16 @@ class SensorsAnalyticsClassVisitor extends ClassVisitor {
308304 methodVisitor. visitVarInsn(ALOAD , 1 )
309305 methodVisitor. visitVarInsn(ASTORE , secondLocalId)
310306 localIds. add(secondLocalId)
311- } else if (! transformHelper . isHookOnMethodEnter && nameDesc == " onMenuItemClick(Landroid/view/MenuItem;)Z" && pubAndNoStaticAccess) {
307+ } else if (nameDesc == " onMenuItemClick(Landroid/view/MenuItem;)Z" && pubAndNoStaticAccess) {
312308 localIds = new ArrayList<> ()
313309 int firstLocalId = newLocal(Type . getObjectType(" android/view/MenuItem" ))
314310 methodVisitor. visitVarInsn(ALOAD , 1 )
315311 methodVisitor. visitVarInsn(ASTORE , firstLocalId)
316312 localIds. add(firstLocalId)
317313 }
318- if (transformHelper. isHookOnMethodEnter) {
319- handleCode()
320- }
321314
322315 // Lambda 参数优化部分,对现有参数进行复制
323- if (! transformHelper . isHookOnMethodEnter && transformHelper. extension. lambdaEnabled) {
316+ if (transformHelper. extension. lambdaEnabled) {
324317 SensorsAnalyticsMethodCell lambdaMethodCell = mLambdaMethodCells. get(nameDesc)
325318 if (lambdaMethodCell != null ) {
326319 // 判断是否是在采样中,在采样中才会处理或者开关打开也统一处理
@@ -350,6 +343,10 @@ class SensorsAnalyticsClassVisitor extends ClassVisitor {
350343 }
351344 }
352345 }
346+
347+ if (transformHelper. isHookOnMethodEnter) {
348+ handleCode()
349+ }
353350 }
354351
355352 @Override
@@ -384,19 +381,11 @@ class SensorsAnalyticsClassVisitor extends ClassVisitor {
384381 SensorsAnalyticsMethodCell sensorsAnalyticsMethodCell = SensorsAnalyticsHookConfig . FRAGMENT_METHODS . get(nameDesc)
385382 if (sensorsAnalyticsMethodCell != null ) {
386383 visitedFragMethods. add(nameDesc)
387- if (isSetUserVisibleHint) {
388- methodVisitor. visitVarInsn(ALOAD , 0 )
389- methodVisitor. visitVarInsn(ILOAD , variableID)
390- methodVisitor. visitMethodInsn(Opcodes . INVOKESTATIC , SensorsAnalyticsHookConfig . SENSORS_ANALYTICS_API , sensorsAnalyticsMethodCell. agentName, sensorsAnalyticsMethodCell. agentDesc, false )
391- } else if (localIds != null ) {
392- methodVisitor. visitVarInsn(ALOAD , 0 )
393- for (localId in localIds) {
394- methodVisitor. visitVarInsn(ALOAD , localId)
395- }
396- methodVisitor. visitMethodInsn(Opcodes . INVOKESTATIC , SensorsAnalyticsHookConfig . SENSORS_ANALYTICS_API , sensorsAnalyticsMethodCell. agentName, sensorsAnalyticsMethodCell. agentDesc, false )
397- } else {
398- visitMethodWithLoadedParams(methodVisitor, Opcodes . INVOKESTATIC , SensorsAnalyticsHookConfig . SENSORS_ANALYTICS_API , sensorsAnalyticsMethodCell. agentName, sensorsAnalyticsMethodCell. agentDesc, sensorsAnalyticsMethodCell. paramsStart, sensorsAnalyticsMethodCell. paramsCount, sensorsAnalyticsMethodCell. opcodes)
384+ methodVisitor. visitVarInsn(ALOAD , 0 )
385+ for (int i = 1 ; i < sensorsAnalyticsMethodCell. paramsCount; i++ ) {
386+ methodVisitor. visitVarInsn(sensorsAnalyticsMethodCell. opcodes. get(i), localIds[i - 1 ])
399387 }
388+ methodVisitor. visitMethodInsn(INVOKESTATIC , SensorsAnalyticsHookConfig . SENSORS_ANALYTICS_API , sensorsAnalyticsMethodCell. agentName, sensorsAnalyticsMethodCell. agentDesc, false )
400389 isHasTracked = true
401390 return
402391 }
0 commit comments