allenymt / PrivacySentry

Android隐私合规整改检测工具,注解+Asm修改字节码的检测方案
MIT License
2.05k stars 262 forks source link

加了检测的库,会影响判断是否在主进程 #101

Closed LIUPING789 closed 1 year ago

LIUPING789 commented 1 year ago
//--------------------------------------合规检测依赖----------------------------------------------
//TODO 用来检测合规问题.媒体不需要的话可以不用添加以下依赖
def privacyVersion = "1.2.7"
implementation "com.github.allenymt.PrivacySentry:hook-sentry:$privacyVersion"
implementation "com.github.allenymt.PrivacySentry:privacy-annotation:$privacyVersion"
//如果不想使用库中本身的代理方法,可以不引入这个aar,自己实现
implementation "com.github.allenymt.PrivacySentry:privacy-proxy:$privacyVersion"
// 1.2.3 新增类替换,主要是为了hook构造函数的参数
implementation "com.github.allenymt.PrivacySentry:privacy-replace:$privacyVersion"

现象:如果加了以上库,会影响之前主线程的判断,不加没有问题。

判断主线程代码如下:

if (ProcessUtil.isMainProcess(DemoApplication.getContext())) { //do in something

}

LIUPING789 commented 1 year ago
// 包名判断是否为主进程
public static boolean isMainProcess(Context context) {
    if (context == null) {
        return false;
    }
    return context.getPackageName().equals(getCurrentProcessName(context));
}

// 获取当前进程名
public static String getCurrentProcessName(Context context) {
    if (context == null) return "";

    int pid = android.os.Process.myPid();

    String processName = "";
    ActivityManager manager = (ActivityManager) context.getSystemService(
            Context.ACTIVITY_SERVICE
    );
    for (ActivityManager.RunningAppProcessInfo process : manager.getRunningAppProcesses()) {
        if (process.pid == pid) {
            processName = process.processName;
        }
    }

    return processName;
} 

对应工具类中的方法

allenymt commented 1 year ago

这个调用应该是在 隐私协议同意之前掉的吧,也就是在PrivacySentry.Privacy.updatePrivacyShow()之前调用,原因是这个类里的getRunningAppProcesses方法做了拦截

allenymt commented 1 year ago

可以参考 这个类里的判断主进程方法,可以绕过getRunningAppProcesses

LIUPING789 commented 1 year ago

好的,已解决。