2010-08-02 88 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(); 
}