it-swarm-ja.tech

Android permissions:電話の呼び出し:電話の状態とIDを読み取る

私のAndroidアプリは電話とは関係ありませんが、テストデバイスにデバッグビルドをインストールすると、「電話:電話の状態とIDの読み取り」権限が必要になることがわかります。 (AndroidManifest.xmlではこれについて言及していません)。

最小限の許可を取得したいのですが、これを取り除く方法を誰かが知っているのだろうか?私はBuild.MODELBuild.VERSION.*などからいくつかのものを記録していた部分をコメントアウトしました。 「。しかし、どちらも必要な許可を削除するようには見えませんでした。

私はこのバグレポートを見つけました: http://code.google.com/p/Android/issues/detail?id=4101 しかし、それはからアクセス許可が正しいことについてのメモでworking-as-intendedとマークされていますそれ以外の市場ではありません。これは他の人の経験ですか? (それをテストするためだけに市場に公開する必要はありません。)そうでなければ、アプリがこの許可を必要としないようにする呼び出しを避けることができるAPIがあるかどうか誰もが知っていますか?

ありがとう!

69
Mike Kale

(他の誰かがこの問題に遭遇して検索する場合に備えて、自分の質問に答えます。)

AndroidソースでPackageParser.Javaを掘り下げて、システムが自動的に割り当てることを発見しました

Android.permission.WRITE_EXTERNAL_STORAGE and 
Android.permission.READ_PHONE_STATE

4(ドーナツ)未満のtargetSdkバージョンを宣言するアプリに。これには互換性の理由が必要です。おそらく、古いバージョンを対象とするアプリは、明示的に宣言せずにこれらの権限を持っていると想定できます。したがって、これらのアクセス許可を暗黙的にアプリに追加したくない場合は、AndroidManifest.xmlに次のようなセクションを追加します

<uses-sdk Android:minSdkVersion="4" Android:targetSdkVersion="4" />

それだけです。

楽しんでください、マイク

89
Mike Kale

Android 1.6の変更ログ: http://developer.Android.com/sdk/Android-1.6.html#api

WRITE_EXTERNAL_STORAGE:アプリケーションが外部ストレージに書き込むことを許可します。 APIレベル3以下を使用するアプリケーションには、この許可が暗黙的に付与されます(これはユーザーに表示されます); APIレベル4以上を使用するアプリケーションは、この許可を明示的に要求する必要があります。

しかし、それはそのうちの1つにすぎません。何らかの理由で、公式の変更ログにはREAD_PHONE_STATEに関する情報がありません。詳細はここでクリアされます: http://blogs.zdnet.com/Burnette/?p=1369&page=

新しい許可。 1.6プログラムは、SDカードの内容を変更できるようにWRITE_EXTERNAL_STORAGEパーミッションを明示的に要求する必要があり、READ_PHONE_STATE電話状態情報を取得できるようにする権限。 以前のバージョンを対象とするアプリは、常にこれらの権限を暗黙的に要求します。

ご覧のとおり、1.6以上を実行している携帯電話にインストールした場合、これらの権限を要求せずに1.5以前を対象にしたアプリを公開する方法はありません。

24
Mark B