Tencent / tinker

Tinker is a hot-fix solution library for Android, it supports dex, library and resources update without reinstall apk.
Other
17.15k stars 3.34k forks source link

sdk 里面 activityManager.getRunningAppProcesses是隐私调用方法 #1600

Open hanbinbin opened 3 years ago

hanbinbin commented 3 years ago

sdk 里面 activityManager.getRunningAppProcesses是隐私调用方法,国家安全部门规定不允许调用,你们有时间升级下版本吗?

sailor1861 commented 3 years ago

+1; 有替代方案吗?

hanbinbin commented 3 years ago

我们公司内部SDK有替代方案,具体代码下面已经给出;不只是getRunningAppProcesses不让使用,getInstalledPackages,getInstalledApplications,getRunningTasks这几个方法都不让使用,不过在当前SDK里面只是用了getRunningAppProcesses

Java Code :

public static String getProcessNameByPid(int pid) { try (BufferedReader br = new BufferedReader(new FileReader("/proc/" + pid + "/cmdline"))) { return br.readLine().replace('\u0000', ' ').trim(); } catch (Throwable e) { e.printStackTrace(); } return null; }

Kotlin Code:

fun getProcessNameByPid(pid: Int): String? { try { BufferedReader(FileReader("/proc/$pid/cmdline")).use { br -> return br.readLine().trim { c -> c.isWhitespace() || c == '\u0000' } } } catch (e: Throwable) { e.printStackTrace() return null } }

int pid = Process.myPid();

代码亲测有效,你们也可以测试看下,谢谢

xingfeng2010 commented 2 years ago

同问,有替代方案吗? 顶上去

alen252 commented 2 years ago

ghost commented 2 years ago

我的方案是修改tinker的源码,保证第一次安装或者第一次升级到新版本时,用户未同意用户协议时,不执行Tinker 相关代码。

在TinkerApplication中增加存储在SharedPreferences的隐私协议标记,默认是false。这个标记相关的set get代码就放在TinkerApplication类中实现。 根据状态决定是否执行TinkerApplication的loadTinker方法。 在你app的ApplicationLike的onBaseContextAttached方法中同样读取这个标记,决定是否执行Tinker的方法,然后尝试更新标记。 用户同意用户协议时更新隐私协议状态标记。

fine1021 commented 2 years ago

https://github.com/Tencent/tinker/issues/1577#issuecomment-888286708

试试这个方法

ye1088 commented 5 months ago

赞一个

jacklongway commented 5 months ago

您好!很高兴收到您的邮件,稍后查看。

canlan818 commented 5 months ago

这是来自QQ邮箱的自动回复邮件。您好,来信已收到,谢谢您,我会及时回复您的!O(∩_∩)O~