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
"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.
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:
- adding a non-reproducible version to AndroidManifest.xml
- different binary releases with the same version number
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
- 1. Jak mogę tworzyć aplikacje na Androida z wielu komputerów?
- 2. Jak tworzyć aplikacje na Androida o niskim rozmiarze?
- 3. Aplikacje fraktalne na Androida
- 4. Czy mogę tworzyć aplikacje dla Androida w Perlu?
- 5. Jak uruchamiać aplikacje na Androida w mojej aplikacji na Androida?
- 6. Korzystając z aplikacji AppMobi, mogę bezpłatnie tworzyć aplikacje na Androida i aplikacje na iPhone'a (oprócz kosztów Google/Apple)?
- 7. Jak tworzyć aplikacje mobilne w Zend Studio 10
- 8. Mierzony czas na aplikacje na Androida
- 9. Jak popularne aplikacje na Androida łączą się z serwerem?
- 10. Proguard nie kasował aplikacje na Androida
- 11. Jak mogę zainstalować aplikację java między kompilacjami?
- 12. Twórz aplikacje na Androida za pomocą Xcode?
- 13. Jak utrzymać, że aplikacje na Androida są zawsze zalogowane?
- 14. Jak tworzyć niezależne aplikacje .NET za pomocą Visual Studio?
- 15. Jak tworzyć interaktywne wykresy dotykowe dla Androida
- 16. Czy możesz zbudować aplikacje Natywne na Androida (na Androida) na Ubuntu?
- 17. Aplikacje na komputer JavaScript?
- 18. Nowa licencja na aplikacje na Androida i stare - wątpliwości
- 19. Możliwość używania karmy z kompilacjami TFS
- 20. W jaki sposób będą odtwarzane aplikacje rodzime i aplikacje błyskawiczne na Androida? jakieś pomysły?
- 21. Jak tworzyć wykresy z Plotly na Django?
- 22. Aplikacje w wierszu poleceń w C++ na Androida?
- 23. Jak pakować aplikacje z rubinowymi butami na OSX 10.7
- 24. Aplikacje na Androida będą działać tylko w interfejsie API 25
- 25. Czy mimo to można pisać aplikacje na Androida w PHP?
- 26. Czy rakieta może tworzyć wizualnie wspaniałe aplikacje na równi z komercyjnym oprogramowaniem?
- 27. Jak stworzyć aplikację na Androida przy użyciu HTML 5
- 28. W jaki sposób Xamarin na Androida (Mono na Androida) porównuje się do rodzimego programowania Androida?
- 29. Rozwijanie aplikacji na Androida bez urządzenia z Androidem
- 30. Jak przenieść aplikacje C# z Windowsa na Linux?