2012-03-26 134 views
11

我注意到,如果我編譯一個Android應用程序兩次,一個接着一個,沒有任何變化,這兩個APK文件有兩個不同的MD5校驗和。未簽名和簽名APK文件都會產生相同的結果。Android APK文件的MD5校驗和不同。爲什麼?

你可以打開它作爲一個ZIP文件,其中的內容有兩個文件中相同的MD5校驗和,所以我很好奇。

還有什麼?這兩個APK文件有什麼不同?

+0

也許APK文件存儲編譯時間的時間戳?我會查看APK格式的規範,看看是否存在類似的內容... – 2012-03-26 07:43:45

+0

聽起來很可能。無法找到APK格式的詳細信息。 APK與JAR有什麼不同?我會想象它會有一些額外的。 – 2012-03-26 08:12:46

+0

apk文件實際上是zip文件與特定的文件內容,就像.jar – reox 2012-03-26 08:14:24

回答

0

也許「簽名」的事情使MD5校驗和不同?

+0

編輯。事實證明,這發生在簽名和未簽名的APK。 – 2012-03-26 07:08:15

12

ZIP文件格式存儲其頭內的最後修改日期:http://en.wikipedia.org/wiki/Zip_(file_format)#File_headers

所以MD5校驗不同,因爲頭是略低不同。

+0

因此,如果您編譯APK,提取內容,創建它們的ZIP,將其重命名爲APK,它會運行?今天晚上我們試試這個吧,然後再給人類做同樣的基本事情。 – 2012-03-26 15:52:03

+0

其實是的! 'unzip test.apk; rm test.apk; zip -r test.zip ./*; mv test。{zip,apk}; adb install test.apk'工程。即使MD5總和也不同:950b9077d8a2a3be45ba207c0c0a2251 test.apk e0ae339a5ecd3080f8359fc06a4c3e29 test.zip.apk – reox 2012-03-27 06:48:27