可以讀取其他應用程序的清單文件:
PackageManager pm = getPackageManager();
List<ApplicationInfo> apps = pm.getInstalledApplications(PackageManager.GET_META_DATA | PackageManager.GET_SHARED_LIBRARY_FILES);
for(ApplicationInfo app : apps){
try {
ZipFile apk = new ZipFile(app.publicSourceDir);
ZipEntry manifest = apk.getEntry("AndroidManifest.xml");
if (manifest != null){
byte[] binaryXml = toByteArray(apk.getInputStream(manifest));
// decode binary Xml
}
apk.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static byte[] toByteArray(InputStream in) throws IOException {
try {
byte[] buf = new byte[1024*8];
try (ByteArrayOutputStream bos = new ByteArrayOutputStream()) {
int len;
while ((len = in.read(buf)) != -1) {
bos.write(buf, 0, len);
}
return bos.toByteArray();
}
} finally {
in.close();
}
}
「問題」是你將得到二進制xml這不僅僅是一個字符串轉換爲字節數組;它是xml文件的壓縮格式。
你需要解壓這個數組得到一個String
然後你可以解析它得到值screenOrientation
。
,我發現這個GIST,沒有工作,但在某些情況下......最困難的部分(binray XML解碼)完成後,你就必須解決這個問題,除了引發IndexOutOfBounds
錯誤。
然後你會得到的字符串是這樣的:
String xml = AndroidXMLDecompress.decompressXML(binaryXml);
我還沒有測試過這個,但是在獎賞結束之前,我會把你的信任放在你身上 – Thaina
我明白了!不用擔心它的工作,正如我所說的唯一棘手的部分是轉換二進制XML - >字符串XML –