该项测试(Android Google Test Suite 5.0_r1新增的)是检查哪些apk添加了android.permission.INSTALL_PACKAGES权限(安装apk权限),有源码的apk只需将AndroidManifest.xml里对应权限去掉(但静默安就没权限了),没源码内置的第三方apk就麻烦了。
下面介绍修改framework绕过该项的fail,类似GTS:com.google.android.permission.gts.DefaultPermissionGrantPolicyTest#testDefaultGrants修改方法。
首先确认该测试的具体apk(testcases/GtsInstallPackagesWhitelistDeviceTestCases.apk),再反编译该apk并阅读代码
.line 58 invoke-virtual {v0, v1}, Landroid/content/pm/PackageManager;->getInstalledPackages(I)Ljava/util/List; 将getInstalledPackages返回的List<PackageInfo>把要绕过的apk删掉,再返回给...TestCases.apk,同上一篇修改ApplicationPackageManager,java /** @hide */ @Override public List<PackageInfo> getInstalledPackages(int flags, int userId) { try { String taker = mContext.getPackageName(); ParceledListSlice<PackageInfo> slice = mPM.getInstalledPackages(flags, userId); List<PackageInfo> list = slice.getList(); if ("com.google.android.installpackageswhitelist.gts".equals(taker)) { String[] whiteLists = new String[] {"com.telcel.contenedor", "com.facebook.system", "com.portal", "com.naranya.claroapps", "com.android.systemui"}; Iterator<PackageInfo> it = list.iterator(); while(it.hasNext()) { PackageInfo pi = it.next(); String packageName = pi.packageName; if (Arrays.asList(whiteLists).contains(packageName)) { Log.i(TAG, "getInstalledPackages remove packageName"); it.remove(); } } } return list; } catch (RemoteException e) { throw new RuntimeException("Package manager has died", e); } }