2013-10-22 30 views
5

Z mojego doświadczenia wynika, że ​​rekompilacja kodu źródłowego dla tej samej aplikacji dla systemu Android nie spowoduje wygenerowania tego samego pliku binarnego za każdym razem. Powtarzalna kompilacja jest dla deweloperów bardzo łatwa do zrozumienia, ale myślę, że najważniejszą korzyścią wynikającą z powtarzalnego procesu budowania jest bezpieczeństwo. W aplikacjach open source na Androida, w jaki sposób możemy zweryfikować wyprodukowany plik binarny (.apk) jest naprawdę skompilowany z recenzowanego kodu źródłowego? Czy istnieje sposób na generowanie odtwarzalnych kompilacji z zestawu SDK lub Java w systemie Android?Jak tworzyć aplikacje na Androida z odtwarzalnymi kompilacjami?

Odpowiedz

2

"Powtarzalna"/"deterministyczna" kompilacja odnosi się do procesów kompilacji, w których kompilator wyprowadza plik binarny, który jest zawsze identyczny, przy identycznych plikach wejściowych/systemie kompilacji/chroot. (Artykuł, z którym się łączysz, mówi o możliwości zbudowania/uruchomienia tej samej wersji aplikacji, przeciwko której zgłoszono błąd, co jest czymś innym. Zobacz this description o tym, jak Tor tworzy deterministyczne kompilacje.)

Pakiety Java wydają się być bardzo trudne do pracy, ponieważ sygnatury czasowe są obecne w wielu, wielu miejscach. Jedną rzeczą, którą można wypróbować, zamiast dokładnej zgodności binarnej, jest dekompilacja dwóch plików .apk i sprawdzenie, czy ten dekompilowany wynik jest identyczny.

1

Projekt F-Droid od kilku lat pracuje nad odtwarzalnymi kompilacjami dla systemu Android. Problemy specyficzne dla systemu Android są śledzone pod numerem https://f-droid.org/docs/Reproducible_Builds. Nadal jest to skomplikowany proces, zwłaszcza jeśli aplikacja zawiera kod NDK. Jeśli aplikacja to tylko Java, jest kilka prostych kroków, które ułatwią ci przejście, np. Przed przeglądaniem plików PNG i zobowiązaniem ich do wydania git.

Google nie ułatwiają odtworzyć pliki APK w dłuższej perspektywie, ponieważ robią dużo przypadkowych małych zmian, takich jak:

pewno sprawdzić out diffoscope, aby zobaczyć różnice między dwoma kompilacjami. Możesz zobaczyć wiele przykładowych danych wyjściowych pod adresem https://verification.f-droid.org

Powiązane problemy