Jak używać bibliotek F-Droid, takich jak CalyxOS
Posted on 2023-05-02 by
Kiedy zbudowaliśmy klienta F-Droid nowej generacji, przepisaliśmy nasz kod, aby pasował do bibliotek wielokrotnego użytku, aby inne projekty mogły korzystać z technologii F-Droid przy minimalnym wysiłku.
Biblioteki
Do tej pory opublikowaliśmy trzy biblioteki. Dwie z nich są napisane w wieloplatformowym Kotlinie, więc mogą być używane również poza Androidem. Na przykład, można ich użyć do napisania wiersza poleceń lub nawet klienta iOS.
Sprawdź README, aby dowiedzieć się, jak włączyć je do swojego projektu.
Pobierz bibliotekę
Ta biblioteka zawiera wszystko, czego potrzebujesz do pobierania repozytoriów F-Droid oraz zawartych w nich plików APK i obrazów. Obsługuje wznawianie pobierania, kopie lustrzane repozytorium i zajmuje się specjalnymi przypadkami HTTP, które może napotkać klient F-Droid.
Wersja biblioteki na Androida dba również o odrzucanie TLS starszych niż
1.2, a także słabych szyfrów. Zapobiega wyciekom DNS podczas używania Tora
jako serwera proxy i wykorzystuje krótki limit czasu sesji TLS, aby zapobiec
śledzeniu i ponownemu użyciu klucza. Jeśli używasz Glide jako modułu
ładującego obrazy, jest on również dostarczany ze specjalnym ModelLoader
do użycia z Glide.
Szczegółowe informacje można znaleźć w dokumentacji API. Sprawdź przykład jak F-Droid przełączył się na bibliotekę bazy danych.
Biblioteka indeksów
Wieloplatformowa biblioteka indeksów zapewnia wszystko, czego potrzebujesz do obsługi indeksów repozytoriów F-Droid. Oczywiście istnieje parser do wewnętrznego odczytu i reprezentacji indeksów. W przypadku indeksów w wersji 1 dostępny jest również kreator, którego F-Droid używa do tworzenia własnych pobliskich repozytoriów wymiany. Obie wersje posiadają weryfikator podpisów, dzięki czemu zawsze możesz upewnić się, że repozytorium jest poprawnie podpisane przed przystąpieniem do pracy z jego danymi.
Oprócz tych podstaw, biblioteka zawiera również wiele przydatnych klas, które pomagają wybrać najlepsze tłumaczenie w oparciu o lokalizację użytkownika, sprawdzić, czy aplikacja jest kompatybilna z bieżącym urządzeniem i sprawdzić, czy aplikacja ma aktualizację dostępną w indeksie repozytorium. Istnieją klasy do przetwarzania strumieni danych indeksu, więc nie trzeba ładować całego indeksu do pamięci, co może być problemem na urządzeniach z małą ilością pamięci RAM. Jeśli wolisz pracować wewnętrznie tylko z formatem wersji 2, biblioteka zawiera konwerter indeksów, który może konwertować format wersji 1 na wersję 2.
Klienci F-Droid, którzy chcą skorzystać z aktualizacji delta wersji 2, również znajdują do tego pomocne klasy, więc nie muszą sami wymyślać koła na nowo.
Szczegółowe informacje można znaleźć w dokumentacji API. Sprawdź na przykładzie jak F-Droid przełączył się na bibliotekę indeksów.
Biblioteka bazy danych
Jeśli chcesz zachować informacje o repozytorium F-Droid w swojej aplikacji na Androida, ta biblioteka jest dla Ciebie. Przechowuje ona informacje związane z F-Droid, takie jak repozytoria, aplikacje i ich wersje. Następnie umożliwia zadawanie zapytań i wyszukiwanie ich. Pod maską wykorzystuje bazę danych Room, która z kolei korzysta z sqlite.
Oprócz klas związanych z bazami danych biblioteka ta zawiera obecnie również klasy związane z aktualizacją repozytoriów, dzięki czemu informacje pobrane z Internetu (za pomocą biblioteki downloader) mogą być przesyłane strumieniowo bezpośrednio do bazy danych.
Szczegółowe informacje można znaleźć w dokumentacji API. Sprawdź przykład jak F-Droid przełączył się na bibliotekę bazy danych.
CalyxOS
Pierwszym znanym użytkownikiem tych nowych bibliotek jest CalyxOS, który już używa ich w dwóch swoich aplikacjach. Dzięki bibliotekom mogą skupić swój wysiłek programistyczny na samych aplikacjach i nie muszą ponownie implementować bitów związanych z F-Droid.
Pierwsza aplikacja jest używana jako część kreatora konfiguracji, który pojawia się po początkowej instalacji. Pozwala użytkownikowi zainstalować dodatkowe aplikacje na zasadzie opt-in, więc nie muszą być dostarczane jako nieusuwalne aplikacje systemowe. Zaletą dla CalyxOS jest to, że mogą ładować te aplikacje z repozytorium F-Droid w Internecie bez konieczności wysyłania plików APK w ramach ich pamięci ROM, utrzymując minimalny rozmiar.
To jest ich metoda, aby uzyskać reprezentację indeksu z pliku, korzystając z biblioteki indeksów:
fun getIndex(file: File): IndexV2 = file.inputStream().use { inputStream ->
IndexParser.parseV2(inputStream)
}
Druga aplikacja wykorzystuje F-Droid do aktualizowania własnych niezbędnych aplikacji. Przy minimalnym interfejsie użytkownika jego głównym celem jest regularne sprawdzanie dostępności aktualizacji i instalowanie ich w tle, gdy tylko będą dostępne.
Aplikacja korzysta z UpdateChecker
biblioteki indeksów, aby sprawdzić, czy
dostępne są aktualizacje:
private fun getUpdate(packageName: String, packageVersions: List<PackageVersionV2>): PackageVersionV2? {
val packageInfo = packageManager.getPackageInfo(packageName, GET_SIGNATURES)
return updateChecker.getUpdate(packageVersions, packageInfo)
}
Obie te aplikacje nie muszą przechowywać żadnych danych, więc używają tylko biblioteki pobierania i indeksu.
Ta praca została sfinansowana z grantu FFDW-DVD