簡體   English   中英

如何在Android設備中安裝的應用程序的AndroidManifest.xml文件中獲取權限?

[英]How do I get permissions only in AndroidManifest.xml file for installed apps in android device?

我正在開發一個可以進行基於權限的搜索的Android應用程序。 我有一個代碼,用於解析apk文件中的AndroidManifest.xml文件。

此代碼解析xml文件並輸出如下結果:

android.permission.WRITE_EXTERNAL_STORAGE
android.permission.READ_CONTACTS
android.permission.WRITE_CONTACTS
android.permission.ACCESS_NETWORK_STATE
android.permission.INTERNET

我有一個名為PInfo的模型。 此模型具有名為權限的ArrayList。 當您在Android上獲得“PackageInfo”權限時,它會給出以下結果。

android.permission.WRITE_EXTERNAL_STORAGE
android.permission.READ_CONTACTS
android.permission.WRITE_CONTACTS
android.permission.ACCESS_NETWORK_STATE
android.permission.INTERNET
android.permission.WAKE_LOCK
com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE
com.google.android.c2dm.permission.RECEIVE
android.permission.READ_EXTERNAL_STORAGE

AndroidManifest.xml文件:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.omfaer.minion">
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        <uses-permission android:name="android.permission.READ_CONTACTS" />
        <uses-permission android:name="android.permission.WRITE_CONTACTS" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
        <uses-permission android:name="android.permission.INTERNET"/>
        <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
            <activity android:name="com.omfaer.minion.activities.MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />

                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>

            <activity
                android:name="com.omfaer.minion.activities.HomeActivity"
                android:label="@string/app_name">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.DEFAULT" />
                </intent-filter>
            </activity>

            <activity android:name=".activities.WallpapersActivity"/>

            <provider
                android:exported="false"
                android:grantUriPermissions="true"
                android:authorities="${applicationId}.provider"
                android:name="android.support.v4.content.FileProvider">

                <meta-data
                    android:name="android.support.FILE_PROVIDER_PATHS"
                    android:resource="@xml/provider_path"
                    />

            </provider>
        </application>

    </manifest>

PackageInfo代碼:

    List<PackageInfo> packs = context.getPackageManager().getInstalledPackages(context.getPackageManager().GET_PERMISSIONS);

    for (int i = 0; i < packs.size(); i++) {
        PackageInfo p = packs.get(i);

        PInfo deviceApps = new PInfo();
        deviceApps.appName = p.applicationInfo.loadLabel(context.getPackageManager()).toString();
        deviceApps.appPackage = p.packageName;
        deviceApps.appIconId = p.applicationInfo.icon;
        StringBuilder strBuilderPermissions = new StringBuilder();
        try {
            if (p.requestedPermissions != null) {
                for (String perms : p.requestedPermissions) {
                    deviceApps.permissions.add(perms);
                }
            }
        } catch (Exception e) {
            //Log.v("PUCA for  add permissions ", e.toString());
        }
    }

我想在Android端得到這個結果。

android.permission.WRITE_EXTERNAL_STORAGE
android.permission.READ_CONTACTS
android.permission.WRITE_CONTACTS
android.permission.ACCESS_NETWORK_STATE
android.permission.INTERNET

這應該為數千個應用程序提供准確的結果。 我能怎么做?

根據官方文件

您的APK文件只能包含一個AndroidManifest.xml文件,但您的Android Studio項目可能包含多個 - 由主要源集,構建變體和導入的庫提供。 因此,在構建應用程序時,Gradle構建會將所有清單文件合並到一個打包到APK中的清單文件中。

您附加的清單文件是您的清單,但是當android編譯您的項目時,它會將其他清單合並到您的清單中。 例如,如果您實現一個庫,它的清單將合並到您的apk文件中。 找到你的apk的清單文件嘗試反編譯它( 這里 )並讀取該文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM