Skip to content

Commit

Permalink
Release 3.3.4
Browse files Browse the repository at this point in the history
  • Loading branch information
weiqiangliu committed Mar 13, 2021
1 parent 3e27f31 commit 99bc63d
Show file tree
Hide file tree
Showing 5 changed files with 93 additions and 4 deletions.
2 changes: 1 addition & 1 deletion plugin/ext.gradle
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
project.ext {
pluginVersion = '3.3.3'
pluginVersion = '3.3.4'
Properties properties = new Properties()
if (project.file('local.properties').exists()) {
properties.load(project.file('local.properties').newDataInputStream())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ import org.objectweb.asm.MethodVisitor
import org.objectweb.asm.Opcodes
import org.objectweb.asm.Type

import com.sensorsdata.analytics.android.plugin.hook.SensorsPushInjected

class SensorsAnalyticsClassVisitor extends ClassVisitor {
private String mClassName
private String mSuperName
Expand Down Expand Up @@ -234,6 +236,12 @@ class SensorsAnalyticsClassVisitor extends ClassVisitor {
protected void onMethodEnter() {
super.onMethodEnter()
nameDesc = name + desc
// Hook Push
if (!SensorsAnalyticsUtil.isStatic(access) && !transformHelper.extension.disableTrackPush) {
SensorsPushInjected.handleJPush(methodVisitor, mSuperName, mClassName, nameDesc)
SensorsPushInjected.handleMeizuPush(methodVisitor, mSuperName, mClassName, nameDesc)
}

pubAndNoStaticAccess = SensorsAnalyticsUtil.isPublic(access) && !SensorsAnalyticsUtil.isStatic(access)
protectedAndNotStaticAccess = SensorsAnalyticsUtil.isProtected(access) && !SensorsAnalyticsUtil.isStatic(access)
if (pubAndNoStaticAccess) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ class SensorsAnalyticsExtension {
public boolean autoHandleWebView = true
public boolean addUCJavaScriptInterface = false
public boolean lambdaParamOptimize = false

public boolean disableTrackPush = false
public ArrayList<String> exclude = []
public ArrayList<String> include = []

Expand Down Expand Up @@ -64,6 +64,7 @@ class SensorsAnalyticsExtension {
return "\tdebug=" + debug + "\n" +
"\tdisableJar=" + disableJar + "\n" +
"\tuseInclude=" + useInclude + "\n" +
"\tdisableTrackPush=" + disableTrackPush + "\n" +
"\tautoHandleWebView=" + autoHandleWebView + "\n" +
"\taddUCJavaScriptInterface=" + addUCJavaScriptInterface + "\n" +
"\tlambdaParamOptimize=" + lambdaParamOptimize + "\n" +
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,8 @@ import java.util.jar.JarOutputStream

class SensorsAnalyticsTransform extends Transform {
private SensorsAnalyticsTransformHelper transformHelper
public static final String VERSION = "3.3.3"
public static final String MIN_SDK_VERSION = "4.3.2"
public static final String VERSION = "3.3.4"
public static final String MIN_SDK_VERSION = "5.1.0"
private WaitableExecutor waitableExecutor
private URLClassLoader urlClassLoader

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
package com.sensorsdata.analytics.android.plugin.hook;

import com.sensorsdata.analytics.android.plugin.Logger;

import org.objectweb.asm.Label;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes;

public class SensorsPushInjected {
/**
* Hook 极光推送
*
* @param methodVisitor MethodVisitor
* @param superName 父类名
* @param className 类名
* @param nameDesc 描述
*/
public static void handleJPush(MethodVisitor methodVisitor, String superName, String className, String nameDesc) {
try {
if ("cn/jpush/android/service/JPushMessageReceiver".equals(superName)
&& "onNotifyMessageOpened(Landroid/content/Context;Lcn/jpush/android/api/NotificationMessage;)V".equals(nameDesc)) {
Logger.info("JPush hook " + className + "," + nameDesc);
Label l1 = new Label();
// 参数空判断
methodVisitor.visitVarInsn(Opcodes.ALOAD, 1);
methodVisitor.visitJumpInsn(Opcodes.IFNULL, l1);
methodVisitor.visitVarInsn(Opcodes.ALOAD, 2);
methodVisitor.visitJumpInsn(Opcodes.IFNULL, l1);
// 读取参数
methodVisitor.visitVarInsn(Opcodes.ALOAD, 2);
methodVisitor.visitFieldInsn(Opcodes.GETFIELD, "cn/jpush/android/api/NotificationMessage", "notificationExtras", "Ljava/lang/String;");
methodVisitor.visitVarInsn(Opcodes.ALOAD, 2);
methodVisitor.visitFieldInsn(Opcodes.GETFIELD, "cn/jpush/android/api/NotificationMessage", "notificationTitle", "Ljava/lang/String;");
methodVisitor.visitVarInsn(Opcodes.ALOAD, 2);
methodVisitor.visitFieldInsn(Opcodes.GETFIELD, "cn/jpush/android/api/NotificationMessage", "notificationContent", "Ljava/lang/String;");
methodVisitor.visitInsn(Opcodes.ACONST_NULL);
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);
methodVisitor.visitLabel(l1);
}
} catch (Throwable e) {
e.printStackTrace();
}
}

/**
* Hook 魅族推送
*
* @param methodVisitor MethodVisitor
* @param superName 父类名
* @param className 类名
* @param nameDesc 描述
*/
public static void handleMeizuPush(MethodVisitor methodVisitor, String superName, String className, String nameDesc) {
try {
if ("onNotificationClicked(Landroid/content/Context;Lcom/meizu/cloud/pushsdk/handler/MzPushMessage;)V".equals(nameDesc)
&& "com/meizu/cloud/pushsdk/MzPushMessageReceiver".equals(superName)) {
Logger.info("Meizu hook " + className + "," + nameDesc);
methodVisitor.visitVarInsn(Opcodes.ALOAD, 1);
Label l1 = new Label();
// 参数空判断
methodVisitor.visitJumpInsn(Opcodes.IFNULL, l1);
methodVisitor.visitVarInsn(Opcodes.ALOAD, 2);
methodVisitor.visitJumpInsn(Opcodes.IFNULL, l1);
// 读取参数
methodVisitor.visitVarInsn(Opcodes.ALOAD, 2);
methodVisitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "com/meizu/cloud/pushsdk/handler/MzPushMessage", "getSelfDefineContentString", "()Ljava/lang/String;", false);
methodVisitor.visitVarInsn(Opcodes.ALOAD, 2);
methodVisitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "com/meizu/cloud/pushsdk/handler/MzPushMessage", "getTitle", "()Ljava/lang/String;", false);
methodVisitor.visitVarInsn(Opcodes.ALOAD, 2);
methodVisitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "com/meizu/cloud/pushsdk/handler/MzPushMessage", "getContent", "()Ljava/lang/String;", false);
methodVisitor.visitInsn(Opcodes.ACONST_NULL);
methodVisitor.visitMethodInsn(Opcodes.INVOKESTATIC, "com/sensorsdata/analytics/android/sdk/aop/push/PushAutoTrackHelper",
"trackMeizuAppOpenNotification", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V", false);
methodVisitor.visitLabel(l1);
}
} catch (Throwable e) {
e.printStackTrace();
}
}
}

0 comments on commit 99bc63d

Please sign in to comment.