Skip to content

Commit 99bc63d

Browse files
author
weiqiangliu
committed
Release 3.3.4
1 parent 3e27f31 commit 99bc63d

File tree

5 files changed

+93
-4
lines changed

5 files changed

+93
-4
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.3'
2+
pluginVersion = '3.3.4'
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: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ import org.objectweb.asm.MethodVisitor
2424
import org.objectweb.asm.Opcodes
2525
import org.objectweb.asm.Type
2626

27+
import com.sensorsdata.analytics.android.plugin.hook.SensorsPushInjected
28+
2729
class SensorsAnalyticsClassVisitor extends ClassVisitor {
2830
private String mClassName
2931
private String mSuperName
@@ -234,6 +236,12 @@ class SensorsAnalyticsClassVisitor extends ClassVisitor {
234236
protected void onMethodEnter() {
235237
super.onMethodEnter()
236238
nameDesc = name + desc
239+
// Hook Push
240+
if (!SensorsAnalyticsUtil.isStatic(access) && !transformHelper.extension.disableTrackPush) {
241+
SensorsPushInjected.handleJPush(methodVisitor, mSuperName, mClassName, nameDesc)
242+
SensorsPushInjected.handleMeizuPush(methodVisitor, mSuperName, mClassName, nameDesc)
243+
}
244+
237245
pubAndNoStaticAccess = SensorsAnalyticsUtil.isPublic(access) && !SensorsAnalyticsUtil.isStatic(access)
238246
protectedAndNotStaticAccess = SensorsAnalyticsUtil.isProtected(access) && !SensorsAnalyticsUtil.isStatic(access)
239247
if (pubAndNoStaticAccess) {

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class SensorsAnalyticsExtension {
2828
public boolean autoHandleWebView = true
2929
public boolean addUCJavaScriptInterface = false
3030
public boolean lambdaParamOptimize = false
31-
31+
public boolean disableTrackPush = false
3232
public ArrayList<String> exclude = []
3333
public ArrayList<String> include = []
3434

@@ -64,6 +64,7 @@ class SensorsAnalyticsExtension {
6464
return "\tdebug=" + debug + "\n" +
6565
"\tdisableJar=" + disableJar + "\n" +
6666
"\tuseInclude=" + useInclude + "\n" +
67+
"\tdisableTrackPush=" + disableTrackPush + "\n" +
6768
"\tautoHandleWebView=" + autoHandleWebView + "\n" +
6869
"\taddUCJavaScriptInterface=" + addUCJavaScriptInterface + "\n" +
6970
"\tlambdaParamOptimize=" + lambdaParamOptimize + "\n" +

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@ import java.util.jar.JarOutputStream
4545

4646
class SensorsAnalyticsTransform extends Transform {
4747
private SensorsAnalyticsTransformHelper transformHelper
48-
public static final String VERSION = "3.3.3"
49-
public static final String MIN_SDK_VERSION = "4.3.2"
48+
public static final String VERSION = "3.3.4"
49+
public static final String MIN_SDK_VERSION = "5.1.0"
5050
private WaitableExecutor waitableExecutor
5151
private URLClassLoader urlClassLoader
5252

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package com.sensorsdata.analytics.android.plugin.hook;
2+
3+
import com.sensorsdata.analytics.android.plugin.Logger;
4+
5+
import org.objectweb.asm.Label;
6+
import org.objectweb.asm.MethodVisitor;
7+
import org.objectweb.asm.Opcodes;
8+
9+
public class SensorsPushInjected {
10+
/**
11+
* Hook 极光推送
12+
*
13+
* @param methodVisitor MethodVisitor
14+
* @param superName 父类名
15+
* @param className 类名
16+
* @param nameDesc 描述
17+
*/
18+
public static void handleJPush(MethodVisitor methodVisitor, String superName, String className, String nameDesc) {
19+
try {
20+
if ("cn/jpush/android/service/JPushMessageReceiver".equals(superName)
21+
&& "onNotifyMessageOpened(Landroid/content/Context;Lcn/jpush/android/api/NotificationMessage;)V".equals(nameDesc)) {
22+
Logger.info("JPush hook " + className + "," + nameDesc);
23+
Label l1 = new Label();
24+
// 参数空判断
25+
methodVisitor.visitVarInsn(Opcodes.ALOAD, 1);
26+
methodVisitor.visitJumpInsn(Opcodes.IFNULL, l1);
27+
methodVisitor.visitVarInsn(Opcodes.ALOAD, 2);
28+
methodVisitor.visitJumpInsn(Opcodes.IFNULL, l1);
29+
// 读取参数
30+
methodVisitor.visitVarInsn(Opcodes.ALOAD, 2);
31+
methodVisitor.visitFieldInsn(Opcodes.GETFIELD, "cn/jpush/android/api/NotificationMessage", "notificationExtras", "Ljava/lang/String;");
32+
methodVisitor.visitVarInsn(Opcodes.ALOAD, 2);
33+
methodVisitor.visitFieldInsn(Opcodes.GETFIELD, "cn/jpush/android/api/NotificationMessage", "notificationTitle", "Ljava/lang/String;");
34+
methodVisitor.visitVarInsn(Opcodes.ALOAD, 2);
35+
methodVisitor.visitFieldInsn(Opcodes.GETFIELD, "cn/jpush/android/api/NotificationMessage", "notificationContent", "Ljava/lang/String;");
36+
methodVisitor.visitInsn(Opcodes.ACONST_NULL);
37+
methodVisitor.visitMethodInsn(Opcodes.INVOKESTATIC, "com/sensorsdata/analytics/android/sdk/aop/push/PushAutoTrackHelper", "trackJPushAppOpenNotification", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V", false);
38+
methodVisitor.visitLabel(l1);
39+
}
40+
} catch (Throwable e) {
41+
e.printStackTrace();
42+
}
43+
}
44+
45+
/**
46+
* Hook 魅族推送
47+
*
48+
* @param methodVisitor MethodVisitor
49+
* @param superName 父类名
50+
* @param className 类名
51+
* @param nameDesc 描述
52+
*/
53+
public static void handleMeizuPush(MethodVisitor methodVisitor, String superName, String className, String nameDesc) {
54+
try {
55+
if ("onNotificationClicked(Landroid/content/Context;Lcom/meizu/cloud/pushsdk/handler/MzPushMessage;)V".equals(nameDesc)
56+
&& "com/meizu/cloud/pushsdk/MzPushMessageReceiver".equals(superName)) {
57+
Logger.info("Meizu hook " + className + "," + nameDesc);
58+
methodVisitor.visitVarInsn(Opcodes.ALOAD, 1);
59+
Label l1 = new Label();
60+
// 参数空判断
61+
methodVisitor.visitJumpInsn(Opcodes.IFNULL, l1);
62+
methodVisitor.visitVarInsn(Opcodes.ALOAD, 2);
63+
methodVisitor.visitJumpInsn(Opcodes.IFNULL, l1);
64+
// 读取参数
65+
methodVisitor.visitVarInsn(Opcodes.ALOAD, 2);
66+
methodVisitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "com/meizu/cloud/pushsdk/handler/MzPushMessage", "getSelfDefineContentString", "()Ljava/lang/String;", false);
67+
methodVisitor.visitVarInsn(Opcodes.ALOAD, 2);
68+
methodVisitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "com/meizu/cloud/pushsdk/handler/MzPushMessage", "getTitle", "()Ljava/lang/String;", false);
69+
methodVisitor.visitVarInsn(Opcodes.ALOAD, 2);
70+
methodVisitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "com/meizu/cloud/pushsdk/handler/MzPushMessage", "getContent", "()Ljava/lang/String;", false);
71+
methodVisitor.visitInsn(Opcodes.ACONST_NULL);
72+
methodVisitor.visitMethodInsn(Opcodes.INVOKESTATIC, "com/sensorsdata/analytics/android/sdk/aop/push/PushAutoTrackHelper",
73+
"trackMeizuAppOpenNotification", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V", false);
74+
methodVisitor.visitLabel(l1);
75+
}
76+
} catch (Throwable e) {
77+
e.printStackTrace();
78+
}
79+
}
80+
}

0 commit comments

Comments
 (0)