web-dev-qa-db-ja.com

Android権限のリストはどこで入手できますか

有効なAndroid権限のリストを取得しようとしています。「公式」権限は http://developer.Android.com/reference/Android/Manifest。 permission.html ですが、まだまだあるようです。

例えば

Android.permission.READ_SETTINGS
Android.permission.ACCESS_LOCATION
Android.permission.ACCESS_GPS

com.Android.vending.CHECK_LICENSE

com.Android.browser.permission.READ_HISTORY_BOOKMARKS
com.Android.browser.permission.WRITE_HISTORY_BOOKMARKS

com.google.Android.googleapps.permission.GOOGLE_AUTH
com.google.Android.googleapps.permission.GOOGLE_AUTH.OTHER_SERVICES

com.google.Android.c2dm.permission.RECEIVE

そのようなリストはどこで入手できますか?これらの権限の説明はどこで入手できますか?

26
Scolytus

すべてのアクセス許可の包括的な「リスト」などはありません。新しい権限は、独自の権限を適用したいアプリケーションで定義できます: https://developer.Android.com/guide/topics/security/security.html#declaring

Manifest.permissionクラスには「システム」権限がリストされており、すでにご存じでしょう。リストにある他の項目は、システム権限ではなく、特定のアプリに固有のものであるか、古い名前です(ACCESS_LOCATIONやACCESS_GPSは1.0より前の名前など)。

ソース内の<permission Android:name=などのgrepは、含まれているすべてのアプリの権限(オープンソースアプリの場合)を明らかにしますが、一般的には、ドキュメント化された権限名に固執する必要があります。

14
Charlie Collins

adb Shell pm list permissions -s

これはあなたが探しているものかもしれません。

21
mkozak

次のスニペットを使用して、デバイスで宣言されているすべての権限を取得します。

Context context = this;
PackageManager pm = context.getPackageManager();
CharSequence csPermissionGroupLabel;
CharSequence csPermissionLabel;

List<PermissionGroupInfo> lstGroups = pm.getAllPermissionGroups(0);
for (PermissionGroupInfo pgi : lstGroups) {
    csPermissionGroupLabel = pgi.loadLabel(pm);
    Log.e("perm", pgi.name + ": " + csPermissionGroupLabel.toString());

    try {
        List<PermissionInfo> lstPermissions = pm.queryPermissionsByGroup(pgi.name, 0);
        for (PermissionInfo pi : lstPermissions) {
            csPermissionLabel = pi.loadLabel(pm);
            Log.e("perm", "   " + pi.name + ": " + csPermissionLabel.toString());
        }
    } catch (Exception ex) {
        ex.printStackTrace();
    }
}
12
Nir Pear

スマートフォンのすべての権限を一覧表示するには

adb Shell pm list permissions -g

-s引数は短い要約です

5

そのようなリストはどこで入手できますか?

できません。

これらの権限の説明はどこで入手できますか?

それらの権限が文書化されているところはどこでも。多くの場合、それらは文書化されていないため、使用しないでください。

たとえば、最初の3つはAndroid数年前、IIRCから削除されました。最後の1つは C2DMドキュメント に記載されています。

4
CommonsWare

確かに「もっと多くの許可」があります。 リンクした参照 は単なる「公式リスト」です。それでも、それはかなり不完全です。私は既存のアクセス許可、その目的、およびエンドユーザーに与える影響について、約1年ほど調査してきました。開発者がどのようにして必要なものを見つけるのか、本当に不思議に思っています。多くの権限について、Google検索はいくつかのアプリのManifestファイルのコンテンツを生成しただけなので( "uses…")、良い推測はその一部のようです。

それに加えて、「公式のアクセス許可」(または「Androidコアのアクセス許可」)の横に、各開発者は自分のアプリに対して独自に定義できます(- Charlie Collins ですでに指摘されています his答え )。

調査中、私はいくつかの情報源(一緒にリストしたもの)からの発見をリストに設定し、見つけた説明を追加しました。このリストは、エンドユーザーに重点を置いていますが、開発者にとって役立つ場合があります。 my siteAndroidの権限の説明 –二か国語(英語とドイツ語)で確認できます。リストには、「コア権限」と、選択されたいくつかのアプリ固有のもの(ほとんどの場合、より頻繁に遭遇するもの:Googleアプリ、またはTaskerK-9 Mail)。繰り返しますが、これはもちろん完全ではありません。「完全なリスト」はユニコーンと同じくらいありそうです(公開された日はおそらくすでに古くなっています)。


編集:

別のコメントで求められたように:new権限でパッケージをインストールしたが、まだどのリストにも含まれておらず、その新しい「技術名」を知りたい場合権限があれば、ADB経由でデバイスからその情報を取得できます。

adb Shell dumpsys package com.foo.bar

(もちろん、com.foo.barを問題のパッケージの名前に置き換えます)。出力で、行grantedPermissions:までスキップします。その下には、「完全表記」での許可があります。 Android.permission.INTERNET、1行に1つ。それを簡単にするために:

adb Shell dumpsys package com.foo.bar |egrep -A99999 "grantedPermissions:"
4
Izzy

私はこれが遅い投稿であることを知っていますが、これは同じ質問をしている将来の人々のためのリファレンスです。

ここ は、すべてのビルトイン権限のリストですAndroid 7.0(Nougatただし、独自の権限を作成することは可能ですので、リストにはそれらのすべてが含まれていません。

それが役に立てば幸い:)

2
Aaron Esau

次のコードを使用して、デバイスのすべての権限を取得できます。

public static List<PermissionInfo> getAllPermissions(Context context) {
    PackageManager pm = context.getPackageManager();
    List<PermissionInfo> permissions = new ArrayList<>();

    List<PermissionGroupInfo> groupList = pm.getAllPermissionGroups(0);
    groupList.add(null); // ungrouped permissions

    for (PermissionGroupInfo permissionGroup : groupList) {
        String name = permissionGroup == null ? null : permissionGroup.name;
        try {
            permissions.addAll(pm.queryPermissionsByGroup(name, 0));
        } catch (PackageManager.NameNotFoundException ignored) {
        }
    }

    return permissions;
}
2
Jared Rummler