有沒有辦法使用Android API讀取當前正在運行的應用程序的META-INF \ MANIFEST.MF文件?正在讀取android MANIFEST.MF文件
我想讀取SHA1的classes.dex文件,並將其用作我的一個資產的加密密鑰。
我不能使用.apk文件的簽名,因爲每次我創建一個新的apk時,我都需要重新加密我的資源並將其放入apk文件,這需要重新簽名.apk,並且它變成了雞和蛋的問題。
有沒有辦法使用Android API讀取當前正在運行的應用程序的META-INF \ MANIFEST.MF文件?正在讀取android MANIFEST.MF文件
我想讀取SHA1的classes.dex文件,並將其用作我的一個資產的加密密鑰。
我不能使用.apk文件的簽名,因爲每次我創建一個新的apk時,我都需要重新加密我的資源並將其放入apk文件,這需要重新簽名.apk,並且它變成了雞和蛋的問題。
我找到了一種方法來做到這一點。我將.apk文件作爲JarFile運行,然後我可以訪問.apk中的單個文件。我相信這隻適用於運行此代碼的.apk文件。
這就是:
// Get Package Name
String packageName = ctx.getPackageName();
// Get classes.dex file signature
ApplicationInfo ai = ctx.getApplicationInfo();
String source = ai.sourceDir;
JarFile jar = new JarFile(source);
Manifest mf = jar.getManifest();
Map<String, Attributes> map = mf.getEntries();
Attributes a = map.get("classes.dex");
String sha1 = (String)a.getValue("SHA1-Digest");
使用下面的方法來檢測外部JAR/SDK MANIFEST.MF信息。我們可以使用此信息來檢測Jar版本等。使用http://docs.oracle.com/javase/6/docs/api/java/util/jar/Manifest.html
public void getSDKInfo() {
Package package = Manifest.class.getPackage();
String specTitle = package.getSpecificationTitle();
String vendor = package.getSpecificationVendor();
String virsion = package.getSpecificationVersion();
}