Android 7.0&9.0ソースコードを変更してダイナミック権限を削除&権限ホワイトリスト設定
3806 ワード
最近、会社は多くのサードパーティのアプリを統合しており、多くのアプリが動的権限申請を行っていないため、6.0より大きいシステムでは実行できないという問題が多く、同社は譲歩し、AndroidManifestに応用すれば弾窓に行くことにした.xmlが申請する権限はすべて使用できる.
プリインストールされたサードパーティ製appには、adb pushからpri-appの下に、packageの下にコードを直接コンパイルしたappの2種類があります.私たちはすべてのappが確認ボックスをポップアップしないようにします.
具体的な修正は以下の通りです.
文章中の各修正箇所は、パッケージ名がホワイトリストにあるか否かを判断することによって、どのような権限を与えるかを決定することができる.
Android 7.0修正ファイルのパスは以下の通りです.
PackageManagerServices.JAvaには次の4つの権限があります.
具体的な修正方法は以下の通りGRANT_DENIED ,GRANT_RUNTIMEをGRANT_に置き換えるINSTALLでOK
Android 9.0は7.0と同じパスですが、具体的なコードに違いがあります.
修正する方法名:grantPermissions//ここでgrantは同意または付与の意味ですこのgrantPermissions方法にはパラメータがあります:PackageParser.Package pkgは、pkgでパッケージ名を取得でき、現在のappで申請するすべての権限などの情報が必要です.
システムのソースコードを修正した後、コンパイル、書き込み、起動を行うシステムでは、危険権限を要求するとダイアログボックスの確認がポップアップされず、直接権限を取得できます.
この方法にはAndroidManifestが必要であることを覚えておいてください.xmlに権限を追加します.
プリインストールされたサードパーティ製appには、adb pushからpri-appの下に、packageの下にコードを直接コンパイルしたappの2種類があります.私たちはすべてのappが確認ボックスをポップアップしないようにします.
具体的な修正は以下の通りです.
文章中の各修正箇所は、パッケージ名がホワイトリストにあるか否かを判断することによって、どのような権限を与えるかを決定することができる.
Android 7.0修正ファイルのパスは以下の通りです.
framework/base/services/core/java/com/android/server/pm/PackageManagerService.java
PackageManagerServices.JAvaには次の4つの権限があります.
/** Permission grant: not grant the permission. */
private static final int GRANT_DENIED = 1;
/** Permission grant: grant the permission as an install permission. */
private static final int GRANT_INSTALL = 2;
/** Permission grant: grant the permission as a runtime one. */
private static final int GRANT_RUNTIME = 3;
/** Permission grant: grant as runtime a permission that was granted as an install time one. */
private static final int GRANT_UPGRADE = 4; ,
具体的な修正方法は以下の通りGRANT_DENIED ,GRANT_RUNTIMEをGRANT_に置き換えるINSTALLでOK
private void grantPermissionsLPw(PackageParser.Package pkg, boolean replace,
String packageOfInterest) {
........... ...........
switch (level) {
........... ...........
case PermissionInfo.PROTECTION_DANGEROUS: {
if (!appSupportsRuntimePermissions && !mPermissionReviewRequired
&& !Build.PERMISSIONS_REVIEW_REQUIRED) {
........... ...........
} else {
// For modern apps keep runtime permissions unchanged.
------- GRANT_RUNTIME GRANT_INSTALL -------
//grant = GRANT_RUNTIME;
grant = GRANT_INSTALL;
}
} break;
}
if (grant != GRANT_DENIED) {
if (!isSystemApp(ps) && ps.installPermissionsFixed) {
if (!allowedSig && !origPermissions.hasInstallPermission(perm)) {
if (!isNewPlatformPermissionForPackage(perm, pkg)) {
//grant = GRANT_DENIED;
------- GRANT_DENIED GRANT_INSTALL -------
grant = GRANT_INSTALL;
}
}
}
........... ...........
}
Android 9.0は7.0と同じパスですが、具体的なコードに違いがあります.
frameworks\base\services\core\java\com\android\server\pm\permission\PermissionManagerService.java
修正する方法名:grantPermissions//ここでgrantは同意または付与の意味ですこのgrantPermissions方法にはパラメータがあります:PackageParser.Package pkgは、pkgでパッケージ名を取得でき、現在のappで申請するすべての権限などの情報が必要です.
// IMPORTANT: There are two types of permissions: install and runtime.( install runtime )
final int N = pkg.requestedPermissions.size();// AndroidManifest
for (int i = 0; i < N; i++) { // ,
*********************
int grant = GRANT_DENIED; //
if (bp.isNormal()) {
grant = GRANT_INSTALL; // ,
} else if (bp.isRuntime()) { //
//grant = GRANT_DENIED;//
grant = GRANT_INSTALL; // ,
}
システムのソースコードを修正した後、コンパイル、書き込み、起動を行うシステムでは、危険権限を要求するとダイアログボックスの確認がポップアップされず、直接権限を取得できます.
この方法にはAndroidManifestが必要であることを覚えておいてください.xmlに権限を追加します.