获取第 3 方应用的清单文件

CL2*_*L22 2 android android-manifest

应用程序允许您浏览应用程序的清单文件。它是如何做到的?我在操作系统的 API 中找不到任何用于获取另一个应用程序清单文件的内容。

CL2*_*L22 7

首先,您可以获得如下所示的应用程序列表:

PackageManager pm = getActivity().getPackageManager();
List<ApplicationInfo> apps = pm.getInstalledApplications(
        PackageManager.GET_META_DATA | PackageManager.GET_SHARED_LIBRARY_FILES
    );
Run Code Online (Sandbox Code Playgroud)

然后可以从以下位置获取 APK 的位置:

apps.get(x).publicSourceDir
Run Code Online (Sandbox Code Playgroud)

上面将有一个值,例如:

/data/app/com.example.someonesapp.apk
Run Code Online (Sandbox Code Playgroud)

从那里可以从 .apk 访问清单文件,如下所示:

try {
    ZipFile apk = new ZipFile("/data/app/com.example.someonesapp.apk");
    ZipEntry manifest = apk.getEntry("AndroidManifest.xml");
    if (manifest != null){
        Log.d("ManifestGetter", "Manifest size = " + manifest.getSize());
        InputStream stream = apk.getInputStream(manifest);
        // do stuff with the file here e.g. get contents
        stream.close();
    }
    apk.close();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} 
Run Code Online (Sandbox Code Playgroud)

最重要的是,不需要 root