2013-10-22 120 views
5

根據我的經驗,重新編譯同一個Android應用程序的源代碼不會每次都產生相同的二進制文件。對於開發人員來說,可重複構建非常有效,但我認爲可重複構建過程最重要的好處是安全性。在開放源代碼的Android應用程序中,我們如何驗證生成的二進制文件(.apk)是否真的是從回顧的源代碼中編譯的?有什麼方法可以從Android SDK或Java生成可重現的版本?如何使Android應用程序具有可重複的構建?

回答

2

「可再生」 /「確定性」的構建是指構建過程,其中編譯器輸出賦予相同的輸入文件的二進制,始終是相同的,/構建系統/ chroot環境。 (您鏈接的文章實際上是指能夠構建/運行相同版本的應用程序,以便提交錯誤,這是不同的。請參閱this description關於Tor如何制定確定性構建的應用程序。)

Java軟件包似乎很難合作,因爲時間戳存在於許多地方。有一兩件事你可以嘗試,以代替精確的二進制兼容性,是反編譯兩個.apk文件的,並看看是否有反編譯的輸出是相同的。

1

的F-Droid的項目一直致力於建立可重複的Android好幾年了。 Android特定的問題在https://f-droid.org/docs/Reproducible_Builds進行跟蹤。這仍然是一個棘手的過程,尤其是如果應用程序包含NDK代碼。如果應用程序只有Java,那麼有一些相對簡單的步驟可以幫助您,例如預搗弄PNG並將它們提交給git。

谷歌並不能使它容易重現的APK在較長時期內,因爲他們做了很多的隨機變化不大,如:

肯定檢查out diffoscope查看兩個版本之間的差異。你可以在https://verification.f-droid.org

看到很多示例輸出
相關問題