أين يمكنني الحصول على قائمة أذونات أندرويد

StackOverflow https://stackoverflow.com/questions/4237982

  •  26-09-2019
  •  | 
  •  

سؤال

أحاول الحصول على قائمة بأذونات 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

أين يمكنني الحصول على مثل هذه القائمة؟ من أين أحصل على وصف لهذه الأذونات؟

هل كانت مفيدة؟

المحلول

لا يوجد شيء مثل "قائمة" شاملة لجميع الأذونات. يمكن تعريف أذونات جديدة من خلال أي تطبيق يريد إنفاذها: https://developer.android.com/guide/topics/security/security.html#declaring.

ال Manifest.permission يسرد الفصل أذونات "النظام" ، وأنت على دراية بها بالفعل. الأشياء الأخرى التي أدرجتها ليست أذونات النظام ، بل هي خاصة بتطبيقات معينة ، أو أسماء قديمة (Access_location و Access_GPs كانت أسماء ما قبل 1.0 ، على سبيل المثال).

جريب لشيء مثل <permission android:name= في المصدر ، يكشف عن جميع أذونات التطبيق المضمنة (لتطبيقات المصدر المفتوح) ، ولكن بشكل عام يجب أن تلتزم بأسماء الإذن الموثقة.

نصائح أخرى

adb shell pm list permissions -s

قد يكون هذا ما تبحث عنه.

استخدم المقتطف التالي للحصول على جميع الأذونات المعلنة على جهازك:

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();
    }
}

لسرد جميع الأذونات على هاتفك

adb shell pm list permissions -g

حجة -S هي ملخص قصير

أين يمكنني الحصول على مثل هذه القائمة؟

لا يمكنك.

من أين أحصل على وصف لهذه الأذونات؟

أينما تم توثيق هذه الأذونات. في كثير من الحالات ، فهي غير موثقة وبالتالي لا ينبغي استخدامها.

على سبيل المثال ، تمت إزالة الثلاثة الأولى من Android قبل عامين ، IIRC. تم توثيق آخر واحد في توثيق C2DM.

هناك بالتأكيد "المزيد من الأذونات هناك". ال المرجع الذي ربطته هي مجرد "القائمة الرسمية" - وحتى لذلك ، إنها غير مكتملة تمامًا. لقد بحثت عن الأذونات الحالية ، وما هي عليه ، وما هي الآثار التي لديهم على المستخدم النهائي ، لمدة عام تقريبًا-وأتساءل حقًا كيف يجد المطورون ما يحتاجون إليه. يبدو أن التخمين الجيد جزء منه ، كما بالنسبة للعديد من الأذونات ، حيث أسفر بحث Google عن العديد من التطبيقات Manifest الملفات ("يستخدم ...").

يضاف إلى ذلك ، بجانب "الأذونات الرسمية" (أو بالأحرى "أذونات Android الأساسية") ، يمكن لكل مطور تحديدها لتطبيقه (مثل تشارلي كولينز أشار بالفعل في إجابته).

أثناء بحثي ، قمت بإعداد قائمة مع النتائج التي توصلت إليها من عدة مصادر (التي أدرجتها على طول) - إضافة أي تفسيرات يمكنني العثور عليها. تركز هذه القائمة على المستخدم النهائي ، لكنها قد تكون مفيدة للمطورين. يمكنك العثور عليه في موقعي: أذونات أندرويد شرح -ثنائية اللغة (الإنجليزية والألمانية). تتضمن القائمة "الإذن الأساسي" بالإضافة إلى بعض التطبيقات المحددة الخاصة بالتطبيق (معظمها تواجه تلك المواجهة بشكل متكرر: أعلنت تطبيقات Google ، أو تطبيقات شهيرة مثل تاسكر و K-9 البريد). مرة أخرى ، هذا بالطبع بعيد عن اكتماله - "القائمة الكاملة" على الأرجح مثل وحيد القرن (اليوم الذي تم نشره على الأرجح سيكون قديمًا بالفعل).


تعديل:

كما طلب في تعليق آخر: إذا قمت بتثبيت حزمة مع أ الجديد إذن لم يتم تغطيته بعد من قبل أي قائمة ، وتريد معرفة "الاسم الفني" لهذا الإذن الجديد ، يمكنك استرداد هذه المعلومات من جهازك عبر ADB:

adb shell dumpsys package com.foo.bar

(بالطبع استبدل com.foo.bar مع اسم الحزمة المعنية). في الإخراج ، انتقل إلى الخط grantedPermissions:. أدناه يأتي الأذونات في "تدوين كامل" ، على سبيل المثال android.permission.INTERNET, ، واحد في كل سطر. لتسهيل ذلك:

adb shell dumpsys package com.foo.bar |egrep -A99999 "grantedPermissions:"

يمكنك الحصول على جميع الأذونات على جهاز باستخدام الرمز التالي:

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;
}

أعلم أن هذا منشور متأخر ، لكن هذا مرجع أكثر للأشخاص في المستقبل الذين لديهم نفس السؤال.

هنا هي قائمة كل واحد مدمج إذن في Android 7.0 (Nougat). ومع ذلك ، هو هو من الممكن إنشاء أذوناتك الخاصة ، بحيث لا تحتوي هذه القائمة على جميعها هناك.

امل ان يساعد :)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top