我正在开发一个可以执行基于权限的搜索的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
这应该为数千个应用程序提供准确的结果。我该怎么办?
答案 0 :(得分:0)
您的APK文件只能包含一个AndroidManifest.xml文件,但是您的 Android Studio项目可能包含多个-由主要来源提供 设置,构建变体和导入的库。所以当你建立 应用程序,Gradle构建将所有清单文件合并到一个清单中 打包到您的APK中的文件。
您附加的清单文件是清单,但是当android编译您的项目时,它将合并其他清单到清单中。例如,如果您实现一个库,则其清单将在apk文件中合并到您的清单中。要查找apk的清单文件,请尝试对其进行反编译(here)并读取该文件。