根據我的經驗,重新編譯同一個Android應用程序的源代碼不會每次都產生相同的二進制文件。對於開發人員來說,可重複構建非常有效,但我認爲可重複構建過程最重要的好處是安全性。在開放源代碼的Android應用程序中,我們如何驗證生成的二進制文件(.apk
)是否真的是從回顧的源代碼中編譯的?有什麼方法可以從Android SDK或Java生成可重現的版本?如何使Android應用程序具有可重複的構建?
5
A
回答
2
「可再生」 /「確定性」的構建是指構建過程,其中編譯器輸出賦予相同的輸入文件的二進制,始終是相同的,/構建系統/ chroot環境。 (您鏈接的文章實際上是指能夠構建/運行相同版本的應用程序,以便提交錯誤,這是不同的。請參閱this description關於Tor如何制定確定性構建的應用程序。)
Java軟件包似乎很難合作,因爲時間戳存在於許多地方。有一兩件事你可以嘗試,以代替精確的二進制兼容性,是反編譯兩個.apk文件的,並看看是否有反編譯的輸出是相同的。
1
的F-Droid的項目一直致力於建立可重複的Android好幾年了。 Android特定的問題在https://f-droid.org/docs/Reproducible_Builds進行跟蹤。這仍然是一個棘手的過程,尤其是如果應用程序包含NDK代碼。如果應用程序只有Java,那麼有一些相對簡單的步驟可以幫助您,例如預搗弄PNG並將它們提交給git。
谷歌並不能使它容易重現的APK在較長時期內,因爲他們做了很多的隨機變化不大,如:
- adding a non-reproducible version to AndroidManifest.xml
- different binary releases with the same version number
肯定檢查out diffoscope查看兩個版本之間的差異。你可以在https://verification.f-droid.org
看到很多示例輸出相關問題
- 1. Android Studio創建重複應用程序
- 2. 如何構建一個Django可重用的應用程序
- 3. 如何構建具有Google+外觀的網絡應用程序?
- 4. 如何構建具有多項活動的應用程序?
- 5. 構建Android應用程序
- 6. 使用HTML構建Android應用程序
- 7. Android上的可重複使用的聊天應用程序
- 8. 使用平臺工具構建android應用程序
- 9. 使用cmake-gui構建具有makefile的64bit應用程序
- 10. 如何調試使用maven構建的android應用程序
- 11. 如何使用maven構建可運行的JavaFX應用程序?
- 12. 如何爲Android構建可插拔應用程序?
- 13. Android安全:如何使Android應用程序不可複製?
- 14. 如何在Android系統中構建ONLY應用程序構建
- 15. 如何在不構建所有Android的情況下構建AOSP應用程序?
- 16. 如何使可重複的程序
- 17. 如果我使用ReactJS創建Web應用程序,是否可以重新使用代碼來構建具有React Native的移動應用程序?
- 18. 如何使用Necessitas(qt port)構建HelloWorld Android應用程序?
- 19. 如何使用KV語言構建Android應用程序GUI?
- 20. 如何使用Ant構建Android應用程序?
- 21. 我可以使用ammap api來構建android應用程序
- 22. 如何創建iPad應用程序,重用我的JS應用程序構建的Web應用程序
- 23. 構建複雜的iPhone應用程序?
- 24. 如何修復具有現有架構的應用程序的遷移,但未觸及其他應用程序?
- 25. iOS基於現有應用程序構建應用程序擴展。如何避免代碼重複?
- 26. 創建Android應用程序構建
- 27. 重用django的可重複使用的應用程序
- 28. 如何構建Android應用程序的UI應用程序的UI組件
- 29. 有沒有免費的工具來構建AIR應用程序?
- 30. 如何構建反應原生android應用程序的生產?