2012-05-24 40 views
1

在已簽名的apk中,將會有一個META-INF/MANIFEST.MF文件。而在這個文件中,我們可以找到這樣的消化液:SDK或ADT如何爲Android應用程序包的資源生成SHA1-Digest

名稱:RES /佈局/ main.xml中SHA1-摘要:NJ1YLN3mBEKTPibVXbFO8eRCAr8 =

名稱:AndroidManifest.xml中SHA1-摘要:BlnC6ZBDtQYWeJNiespsQve82wY =

名稱:RES /繪製-MDPI/ic_launcher.png SHA1-摘要: 4ss2KZ3FzkmfE6HAAsVu0aJKx1U =

我已經找到一種方法來生成消化這樣的java:

public static void main(String[] args) throws NoSuchAlgorithmException, Exception { 
    MessageDigest md = MessageDigest.getInstance("sha-1"); 
    FileInputStream in = new FileInputStream("./ic_launcher.png"); 
    int bytes = 0; 
    while ((bytes = in.read()) != -1) { 
     md.update((byte)bytes); 
    } 
    in.close(); 
    byte[] thedigest = md.digest(); 
    System.out.println(Base64Encoder.encode(thedigest)); 
} 

爲了進行測試,我用這個簡單的代碼生成一些摘要,基本都是一樣的apk META-INF/MANIFEST.MF的消化,仍然有少數的例外。這樣PNG文件:enter image description here

在APK摘要此PNG文件是4ss2KZ3FzkmfE6HAAsVu0aJKx1U =,這是從sjmKOs4BYDXg7COdeTc8tIfPBR0 =通過上述我的代碼產生很大的不同。

但是,如何解釋我的代碼生成的近20個摘要與apk中的摘要相同,只有這個Png的摘要是不同的?

您能否告訴我SDK或ADT如何爲Android應用程序包的資源生成SHA1-Digest,或者與我的代碼有什麼不同?

非常感謝!

回答

2

創建APK文件的aapt Android工具會對其輸入進行一些處理。除了將XML資源轉換爲二進制格式外,它還優化了PNG文件。你最有可能採用原始PNG文件的散列,而APK中的PNG文件已經以某種方式處理(壓縮等),並且它的散列(摘要)是不同的。如果您解壓縮導出的APK,並將包中的PNG散列,那麼您應該獲得相同的散列值。

+0

你說得對!我試過了!非常感謝! – hardPass

相關問題