2010-08-02 42 views
2

有沒有辦法使用Android API讀取當前正在運行的應用程序的META-INF \ MANIFEST.MF文件?正在讀取android MANIFEST.MF文件

我想讀取SHA1的classes.dex文件,並將其用作我的一個資產的加密密鑰。

我不能使用.apk文件的簽名,因爲每次我創建一個新的apk時,我都需要重新加密我的資源並將其放入apk文件,這需要重新簽名.apk,並且它變成了雞和蛋的問題。

回答

6

我找到了一種方法來做到這一點。我將.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"); 
0

使用下面的方法來檢測外部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(); 
}