1

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 は、一部の権限を無料で継承していました...

4

1 に答える 1

1

私の知る限り、権限は常にマニフェストで明示的に設定する必要があります。

権限によって保護されている機能にアプリケーションがアクセスする必要がある場合は、マニフェスト内の要素でその権限が必要であることを宣言する必要があります。次に、アプリケーションがデバイスにインストールされると、インストーラーは、アプリケーションの証明書に署名した機関をチェックし、場合によってはユーザーに尋ねることによって、要求された許可を与えるかどうかを決定します。アクセス許可が付与されている場合、アプリケーションは保護された機能を使用できます。そうでない場合、それらの機能へのアクセスの試みは、ユーザーへの通知なしに単に失敗します。

ソース

あなたが見ている違いは、アクセス許可のprotectionLevel属性によるものだと思います。「通常」に設定されている権限は、ユーザーが OK する必要がないため、[詳細] セクションに表示されるだけです。

于 2011-11-28T23:19:05.220 に答える