Android M 解决XTS测试三方apk权限和sdk fail

本文介绍了一种针对XTS权限的特殊实现方式,在Android系统的包管理服务中,通过检查调用者的权限并依据白名单来决定是否列出特定的应用程序信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 diff --git a/base/services/core/java/com/android/server/pm/PackageManagerService.java b/base/services/core/java/com/android/server/pm/PackageManagerService.java
2 index 9af1605..cd1ddf3 100644
3 --- a/base/services/core/java/com/android/server/pm/PackageManagerService.java
4 +++ b/base/services/core/java/com/android/server/pm/PackageManagerService.java
5 @@ -5634,12 +5650,43 @@ public class PackageManagerService extends IPackageManager.Stub {
6 }
7 }
8
9 + private static final String XTS_PERM = "com.google.android.xts.permission";
10 + private static final String[] WHITE_LIST = {
11 + "com.package.name",
12 + };
13 @Override
14 public ParceledListSlice<PackageInfo> getInstalledPackages(int flags, int userId) {
15 final boolean listUninstalled = (flags & PackageManager.GET_UNINSTALLED_PACKAGES) != 0;
16
17 enforceCrossUserPermission(Binder.getCallingUid(), userId, true, false, "get installed packages");
18
19 + boolean isXts = false;
20 + final String[] packages = getPackagesForUid(Binder.getCallingUid());
21 + if (packages != null && packages.length > 0) {
22 + if (packages[0].equals(XTS_PERM)) {
23 + isXts = true;
24 + Slog.w(TAG, "XTS, calling package -> " + packages[0] + ", is XTS: " + isXts);
25 + }
26 + }
27 // writer
28 synchronized (mPackages) {
29 ArrayList<PackageInfo> list;
30 @@ -5653,7 +5700,24 @@ public class PackageManagerService extends IPackageManager.Stub {
31 pi = generatePackageInfoFromSettingsLPw(ps.name, flags, userId);
32 }
33 if (pi != null) {
34 +/* Modified for XTS
35 list.add(pi);
36 + */
37 + boolean needToAdd = true;
38 + if (isXts) {
39 + for (int i=0; i<WHITE_LIST.length; ++i) {
40 + if (WHITE_LIST[i].equals(pi.packageName)) {
41 + needToAdd = false;
42 + Slog.w(TAG, "XTS, remove package: " + pi.packageName);
43 + }
44 + }
45 + }
46 +
47 + if (needToAdd) {
48 + list.add(pi);
49 + }
50 }
51 }
52 } else {
53 @@ -5661,7 +5725,24 @@ public class PackageManagerService extends IPackageManager.Stub {
54 for (PackageParser.Package p : mPackages.values()) {
55 PackageInfo pi = generatePackageInfo(p, flags, userId);
56 if (pi != null) {
57 +/* Modified for XTS
58 list.add(pi);
59 + */
60 + boolean needToAdd = true;
61 + if (isXts) {
62 + for (int i=0; i<WHITE_LIST.length; ++i) {
63 + if (WHITE_LIST[i].equals(pi.packageName)) {
64 + needToAdd = false;
65 + Slog.w(TAG, "XTS, remove package: " + pi.packageName);
66 + }
67 + }
68 + }
69 +
70 + if (needToAdd) {
71 + list.add(pi);
72 + }
73 }
74 }
75 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值