Android パーミッションの調査を行っていたところ、AndroidManifest.xml ファイルによると、パーミッションとしてのみ宣言されているアプリケーションに遭遇しWRITE_EXTERNAL_STORAGE
ました。Android マーケットもこれを報告するだけです。aapt ツールを使用して uses-permission をダンプすると、1 つの権限のみが報告されます。
ただし、Android デバイス (またはエミュレーター) で実行されるコードでは、次のようにします。
PackageManager pm = getPackageManager();
List<PackageInfo> pkgList = pm.getInstalledPackages(PackageManager.GET_PERMISSIONS | PackageManager.GET_SIGNATURES);
...
PackageInfo p = pkgList.get(i); // where i is the index of the apk in question
String[] perms = p.requestedPermissions;
この APK に対する 2 つのアクセス許可READ_PHONE_STATE
と、マニフェスト内のアクセス許可を取得しWRITE_EXTERNAL_STORAGE
ます。「アプリの管理」画面を見て、これの詳細を選択すると、追加のREAD_PHONE_STATE
権限も表示されます。
Android マニフェストで必要とされないアクセス許可が (コード内、機能の使用などによって) 「暗示」される可能性がある場合はありますか? aapt
別の言い方をすれば、APIが 1 つのアクセス許可セットを返し、 API が別のセットを返すのはなぜgetPackageManager().getPackageInfo()
でしょうか?
編集:
「より良い」用語で検索すると、探していた答えが見つかりました: Android のアクセス許可: 電話: 電話の状態と ID を読み取る
要するに、以前のバージョンの SDK でコンパイルされた APK は、一部の権限を無料で継承していました...