FAQ - Programiści aplikacji

Jak mogę włączyć moją aplikację?

Sprawdź politykę włączenia, aby upewnić się, że twoja aplikacja nadaje się do włączenia do oficjalnego repozytorium F-Droid. Najszybszym sposobem na dołączenie aplikacji jest wysłanie żądania scalenia do fdroiddata, zgodnie z tymi instrukcjami. Dostępny jest także Przewodnik szybkiego składania do F-Droid. Żądanie dodania aplikacji można opublikować w narzędziu do śledzenia Requests For Packaging.

Możesz także ustawić własne repozytorium i rozpowszechniać aplikacje samodzielnie, poza repozytorium F-Droid.org.

Jak zmienić opis i dodać meta-informacje, takie jak zrzuty ekranu?

Istnieją trzy lokalizacje, z których pobieramy metadane:

Mimo że nie możesz edytować ostatniego, scalanie żądań z repozytorium metadanych aktualizowanie opisu jest mile widziane. Z drugiej strony zrzuty ekranu są obecnie używane tylko z repozytorium.

Mamy nadzieję, że w przyszłości udostępnimy więcej rzeczy (np. dzienników zmian) bezpośrednio z wcześniejszych wersji, dając deweloperom aplikacji większą kontrolę nad tym, jak ich aplikacja jest wyświetlana w F-Droid. Zawsze jednak będziemy mieć minimalne, autorytatywne repozytorium metadanych.

Jak mogę licencjonować moją aplikację?

Istnieją ogólnie dwie kategorie: copyleft i permissive, przy czym GPLv3 i Apachev2 są najbardziej popularne. Wybierz pierwsze, jeśli chcesz, aby instrumenty pochodne miały tę samą licencję, a drugie, jeśli pozwolisz na jakiekolwiek ponowne użycie.

Całkowita licencja musi być zgodna z licencją komponentów. Przyznamy jednak pewną elastyczność, jeśli chodzi o zasoby i zasoby; więc jeśli masz na przykład muzykę z licencją niekomercyjną Creative Commons (tj. niewolną licencję), zaakceptujemy ją. Ważną rzeczą jest umieszczanie informacji o prawach autorskich na temat zasobów, a także kodu źródłowego, w nagłówkach plików i/lub w pliku README. Pomocna jest kopia licencji w katalogu głównym repozytorium (pliki LICENSE lub COPYING). Pamiętaj także o prawach autorskich i licencji dotyczących zewnętrznych zasobów lub programów, a jeśli łączy się z darmową usługą, rozważ skorzystanie z Affero GPL. Więcej informacji można znaleźć w Polityce włączenia.

W jaki sposób obsługiwane są darowizny?

Na stronie internetowej oraz w kliencie F-Droid udostępniamy linki do darowizn na Twój projekt. Idealnie powinieneś mieć dedykowaną stronę wyjaśniającą, jak i dlaczego przekazać darowiznę dla twojego projektu, abyśmy mogli połączyć się bezpośrednio z nią. Pamiętaj, że większość użytkowników prawdopodobnie uzyska dostęp do tego prosto z klienta F-Droid na urządzeniu z systemem Android. Powinieneś również mieć dostęp do tych informacji z poziomu swojej aplikacji.

We have fields in our metadata for Bitcoin, Litecoin, Open Collective and Liberapay donations. Be sure to contact us if there is a change to any of those or if you stop accepting them; if you accept new methods you can contact us about that too.

Jeśli Twoja aplikacja znajduje się w naszym repozytorium, ale brakuje nam którejś z powyższych informacji, upewnij się, że wiemy o tym.

Czy moja aplikacja będzie budowana ze źródła?

Tak. We wszystkich, z wyjątkiem bardzo niewielu przypadków (ze względów technicznych lub historycznych), wszystkie aplikacje budujemy bezpośrednio z kodu źródłowego. Gwarantuje to, że kod źródłowy jest dostępny dla wersji, którą zainstalowali ludzie. Chociaż nie sugerujemy, że Twój kod źródłowy jest niekompletny, nieopublikowany lub nieaktualny, dzieje się sporo.

A co z wersjami?

Android zna dwie informacje o wersji: versionName (ciąg znaków skierowany do użytkownika) i versionCode (liczba całkowita, która jest porównywana w celu określenia, co tak naprawdę jest aktualizacją). Dodatkowe informacje można znaleźć w Dokumentacji programistycznej Androida. Upewnij się, że nie masz sprzecznych informacji (np. Niedopasowanie AndroidManifest.xml i build.gradle).

Staramy się budować tylko to, co wydawałoby się być wydaniem. Powinny one mieć pasujące nazwy wersji i, co ważniejsze, pasujące kody wersji do wydań, które sam tworzysz, i być zbudowane z tego samego kodu. Oczywiście zadanie to jest łatwiejsze, jeśli historia kodu źródłowego jest jasna - na przykład, jeśli wydania są oznaczone lub oznaczone w inny sposób. Jeśli dodasz tag, upewnij się, że zachowujesz ten sam schemat oznaczania, np. jeśli zaczniesz używać prefiksu “v”, używaj tego dalej.

Staramy się nie budować z losowej wersji repozytorium.

Czy muszę powiedzieć, kiedy aktualizuję?

Będziemy wykrywać nowe wersje Twojej aplikacji i odpowiednio aktualizować nasze metadane, co spowoduje, że sprawdzimy kod i dodamy nowe kompilacje do naszego systemu. Znaczniki znacznie ułatwiają dodawanie nowych wersji, ale pamiętaj o każdorazowym przesuwaniu tagów do repozytorium początkowego. Oczywiście, jeśli przeniesiesz kod źródłowy do innej witryny, powinieneś nam powiedzieć. Obecnie istnieją pewne problemy związane z wykrywaniem nowych wersji podczas przenoszenia pliku AndroidManifest.xml, więc jeśli jest jakaś pilna potrzeba, możesz nas o tym powiadomić.

Niektórzy programiści aplikacji przesyłają nam żądania scalenia wraz ze wszystkimi istotnymi danymi kompilacji po ich wydaniu. Nie musisz tego robić, ale może to przyspieszyć. Historycznie, jako mały projekt społecznościowy, wolimy przetwarzać aktualizacje, niż byśmy chcieli, ale sytuacja ta cały czas się poprawia.

Nasze sprawdzenia aktualizacji są głupie i po prostu zeskrobujemy pliki kompilacji: Nie uruchamiamy żadnego kodu kompilacji, więc nie używaj wersji czasowej lub innego rodzaju obliczania twojej wersji w czasie kompilacji (np. przenosząc je do wielu wywrotek, które łączą się podczas kompilacji lub nawet mając do tego złożone wywołania funkcji).

Opublikowalem nowe wydanie. Dlaczego nie znajduje się w repozytorium?

Gdy wykryjemy nową wersję, może minąć kilka dni, zanim trafi ona do repozytorium, ponieważ proces kompilacji ma wiele kroków i jest uruchamiany tylko raz dziennie. Przed zakończeniem kompilacji strona monitora dla Twojej aplikacji wyświetli ją w F-Droid Monitor - Potrzebna aktualizacja. Dopóki tekst pod Wersje stwierdzający „Obecna (zalecana) wersja to xxx (kod wersji yyy)” zawiera numery wersji odpowiadające najnowszej wersji, wykryliśmy to i pakiet APK powinien być wkrótce dostępny. Po prostu daj mu trochę czasu.

Innym powodem może być to, że aplikacja nie została skompilowana. Możesz oglądać proces kompilacji na F-Droid Monitor - Running i poprzedni cykl w Build.

A co z podpisywaniem?

Packages not setup for reproducible builds are signed by F-Droid keys. F-Droid will generate a new key for each app that is included. All of the different APKs built from different versions of an app will be signed by the same app key. But do note: if an app is also distributed in an APK signed by the developer, like in the Google Play Store, then the F-Droid APK will have a different signature.

System operacyjny Android wymaga, aby aplikacja została zaktualizowana, nosi ten sam podpis, co aktualnie zainstalowana wersja. Chroni to przed nieumyślną instalacją niezaufanej lub niechcianej aktualizacji, a także chroni prywatne dane aplikacji, do których ma dostęp tylko ta aplikacja (lub aplikacja, która uzyskała dostęp root).

Ta sytuacja stanowi niewielką niedogodność dla użytkowników, którzy chcą przejść z wersji podpisanej przez jedną ze stron do wersji podpisanej przez inną. Na przykład, jeśli użytkownik uruchamia wersję, którą zainstalował przez F-Droid, a później chciałby przejść do wersji, którą podpisujesz i rozpowszechniasz za pośrednictwem innego kanału, musieliby podjąć dodatkowy krok odinstalowania i ponownego zainstalowania aplikacji. Samo to nie wystarcza, aby zakwalifikować się jako niewielka niedogodność - jednak konsekwencje dezinstalacji polegają na tym, że prywatne dane aplikacji są usuwane (ponownie, to jest ze względów bezpieczeństwa), więc użytkownik prawdopodobnie będzie chciał to najpierw wyeksportować, i ponownie go zaimportuj.

We also support and encourage you to setup apps to be ready for reproducible builds, so we can build a version from source and check against your official release. If they match (ignoring the signature) we can then publish your official APK with your signature used. This is a tedious task, since we have to standardize on the build parameters and tools, but it should be worth it in the long run. We also try to verify our own builds and get a lot of binary differences, see our verification server results. However, things will improve over time.

Czy można dołączyć pliki APK podpisane przez mój klucz?

Tak, w przypadku odtwarzalnych kompilacji F-Droid umieści podpisane pliki APK w oficjalnym repozytorium F-Droid po ich zweryfikowaniu. Jeśli to się nie powiedzie (np. aplikacja nie może być zbudowana w odtwarzalny sposób lub gdy chcesz dystrybuować aplikację z zamkniętymi komponentami lub kluczami API itp.), możesz umieścić dowolny plik APK we własnym “F-Droid binary repo”, a ludzie mogą dodać twoje repo do swojego klienta F-Droid, aby uzyskać twoje pliki APK.

Czy wymagane są powtarzalne kompilacje?

No. But we do consider them best practice and hope you’ll consider trying to make your app reproducible. See our Submitting to F-Droid: Quick Start Guide for more information.

Jak mogę poradzić sobie z “fsck error in packed object” dla mojej aplikacji?

W celu zapewnienia, że nasz buildserver pobiera dokładnie te same zatwierdzenia, które zostały wprowadzone do git, git fsck jest domyślnie włączony za każdym razem, gdy pobierane są nowe zatwierdzenia. Włączenie git fsck zapewnia, że zatwierdzenia pasują do ich sumy kontrolnej SHA1. Czasami repozytoria git mają uszkodzone, ale użyteczne zatwierdzenia, których nie można zmienić, ponieważ cała historia jest oparta na uszkodzonym zatwierdzeniu. Dla takich przypadków mamy funkcjonalność skipList w fdroiddata

Czy mogę uruchomić własne repozytorium pakietów F-Droid?

Tak! Możesz także skonfigurować i uruchomić własne repozytorium aplikacji F-Droid i innych pakietów. Jeśli udostępniasz też własną aplikację za pośrednictwem innych sklepów z aplikacjami, takich jak Google Play, zalecamy włączenie tych wersji do własnego repozytorium binarnego, między innymi z tego powodu zapewni źródło plików APK dla odtwarzalnych wersji. To repozytorium może być “proste repozytorium binarne”, które nie korzysta z systemu budowania fdroidserver lub możesz obsługiwać własne lustro pełnego repozytorium F-Droid.org.

Czy mogę zobaczyć, kto instaluje moją aplikację?

Nie. Chociaż informacje i metryki dotyczące instalacji byłyby dla Ciebie interesujące i przydatne, wymagałoby to również śledzenia i monitorowania naszych użytkowników, czego nie zrobimy. Nie mamy żadnych informacji o tym, jakie aplikacje lub wersje ludzie instalują, czy nadal je instalują, jakie inne oprogramowanie lub wersję systemu operacyjnego uruchamiają, ani o niczym innym, więc nie możemy przekazać Ci tych informacji.

Czy mogę śledzić użytkowników z mojej aplikacji?

Możesz, ale jeśli umieścisz w aplikacji dowolne śledzenie lub analitykę (nawet wysyłanie raportów o awariach), musi to być coś, co użytkownik jawnie wybiera na - tzn. pytasz ich o pierwsze uruchomienie, zanim wyślesz coś gdziekolwiek lub istnieje preferencja domyślnie wyłączona. We wszystkich innych przypadkach możemy nadal dołączać tę aplikację, ale zostanie ona oznaczona za pomocą naszego “Śledzenia” niepożądanych funkcji, co oznacza, że użytkownicy zobaczą ją tylko wtedy, gdy zdecydują się wyświetlić takie aplikacje.

Ponadto należy pamiętać, że biblioteki analityczne firm trzecich, które mają postać zastrzeżonego oprogramowania (na przykład Google Analytics lub Flurry), są tutaj niedopuszczalne.

Czy mogę dołączyć reklamy?

Tak ale:

  1. Wielu użytkowników nie lubi reklam i uważa je za natarczywe. Zgłaszamy aplikacje zawierające reklamy, aby inni wiedzieli, co otrzymują. Mogą wybrać, czy te aplikacje będą im pokazywane.
  2. Częste włączanie reklam do aplikacji odbywa się poprzez uwzględnienie prawnie zastrzeżonego oprogramowania w postaci biblioteki binarnej (plik jar). Oczywiście spowodowałoby to, że Twoja aplikacja nie kwalifikuje się do włączenia.

Które biblioteki i zależności są dobre w użyciu?

Aby być FLOSS, cała Twoja aplikacja musi taka być włącznie z zależnościami. Jeśli używasz niewolnych/zastrzeżonych bibliotek, nie możemy skompilować Twojej aplikacji, a zatem nie można jej włączyć do naszego głównego repozytorium (patrz „Czy mogę uruchomić własne repozytorium aplikacji?” w takim przypadku). Niestety, wyklucza to wszelkie biblioteki, które są częścią „repozytorium Google” z menedżera SDK (np. play-services, fabric, firebase) - dozwolone jest tylko „repozytorium obsługi Androida”.

W przypadku zasobów zewnętrznych należy ograniczyć się do „dobrze znanych repozytoriów”, np. Maven Central lub OSS Sonatype (zobacz pełną listę w sekcji „srclib” Build Metadata Reference). Należy pamiętać, że czasami te repozytoria zawierają również repozytoria użytkownika. Nie są one częścią listy zaufanych repozytoriów.

Jeśli potrzebujesz zależności, które nie są dostępne w tych repozytoriach, nie używaj bezpośrednio plików binarnych jar, ale zapewnij łatwy sposób budowania ich ze źródła: np. dostarczając skrypt “pre-build”, włączając je do rzeczywistego procesu kompilacji (gradle task) i włączając źródło biblioteki w projekcie (hard lub przez moduł).

Zamienniki znanych “zwykłych podejrzanych”:

Pamiętaj, że wszystkie poniższe są tylko subiektywnymi sugestiami opartymi na popularności; mogą istnieć inne projekty FOSS, lepiej dostosowane do twoich potrzeb.

  • Crittercism, BugSense — ACRA, Bugmenot, Sentry
  • Google Analytics — Piwik
  • Mapy Google - OpenStreetMap, np. poprzez mapsforge, osmdroid lub maplibre

Czy pakiety SDK i biblioteki Google nie są bezpłatne, oprogramowanie typu open source?

Podczas gdy większość Androida to darmowe oprogramowanie open source, większość z nich wcale nie jest. Pliki binarne systemu Android SDK są udostępniane przez Google na podstawie zastrzeżonej licencji, ale prawie cały kod źródłowy zestawu SDK systemu Android jest dostępny na licencji Apache. Interfejsy API Google używane do tworzenia aplikacji za pomocą usług Google, takich jak Mapy, GCM itp., są bezpłatne, o ile biblioteka jest fabrycznie zainstalowana na urządzeniu. Prawie wszystkie biblioteki Google, takie jak Usługi Play, Google AdMob i GCM, są zastrzeżone i nie mogą być włączone do głównego repozytorium F-Droid.

Z jakiego systemu budowy korzystać?

Mamy dobre wsparcie dla buildów “ant” i “gradle”, podczas gdy “maven” był używany tylko przez krótki okres czasu i zależności. W przypadku innych systemów kompilacji może być konieczne podanie szczegółowych informacji na temat tego, jak sobie z tym poradzić, abyśmy mogli poprawnie skonfigurować aplikację lub nawet włączyć ją do naszych narzędzi serwerowych.

Uwaga specjalna dotycząca aplikacji Cordova/Phonegap/HTML-Apps:

Nie możemy bezpośrednio tworzyć aplikacji Cordova, ale ostatnia wersja pozwala wyeksportować specyficzny dla platformy kod, który można zbudować samodzielnie za pomocą “gradle”. Na razie wymagamy, aby ten kod był obecny i aktualny w źródłowym repozytorium.

Jak mogę usunąć moją aplikację?

Jako najlepszą praktykę nasz zespół pakowania zazwyczaj upewnia się, że mamy zgodę od programistów głównego nurtu, przed dodaniem aplikacji do oficjalnego repozytorium f-droid.org. Jeśli z jakiegoś powodu chcesz, abyśmy usunęli twoją aplikację z oficjalnego repozytorium f-droid.org, poproś o to nasz zespół pakujący. Prawdopodobnie najszybszym sposobem, aby twoja prośba została rozpatrzona jest otwarcie sprawy na naszym issue tracker. Możesz także skontaktować się z naszym zespołem na naszych innych kanałach komunikacji.

Jak moja aplikacja może zostać usunięta?

Wszelkie zmiany w Twojej aplikacji, które spowodują naruszenie naszej polityki włączenia, spowodują usunięcie lub zarchiwizowanie Twojej aplikacji. Na przykład możesz użyć licencji na przyszłe wersje, która uniemożliwi jej dystrybucję, lub wprowadzić zastrzeżone pliki binarne do kodu źródłowego. Obie te rzeczy zapewnią, że te przyszłe wersje nie pojawią się w naszym repozytorium, ale musiałbyś pójść o wiele dalej (np. poważne luki bezpieczeństwa w poprzednich wersjach, w połączeniu z niepublikowanym kodem źródłowym i niechętną do współpracy postawą), abyśmy faktycznie usunęli całą aplikację.

W niektórych rzadkich przypadkach musimy również stosować się do żądań usunięcia zgodnie z naszymi innymi zasadami. Ogólnie rzecz biorąc, zalecamy trzymanie się z dala od naruszeń znaków towarowych i praw autorskich.

Widzę aplikacje w dużych sklepach, które są rażącymi kopiami. Czy nie byłoby lepiej, gdyby moja aplikacja była zamkniętym źródłem?

Firstly, it depends on the license: unless you apply a copyleft licence like the GPLv3, other people can do whatever they like with the source code (though they may be required to rebrand it). If your app is GPLv3 and no source code is published by the plagiarists; their versions obviously include proprietary ad libraries, or any sign of your authorship was simply removed, those copies are breaking the law and you should demand Google to remove them from their app store. You may threaten them with DMCA or other local laws if you wish. If all else fails, before going proprietary, balance the loss and confusion to the users and maintainers of the free app against the feeling of justice that you’ll get by seeing those illegal clones lose the few cents in ad revenue that they would have got. In the longer run we want to improve donations via F-Droid so you can be supported financially and we already support Bitcoin, Litecoin, Open Collective and Liberapay as well as any other payment method that you can suggest via a website.

W jaki sposób jest zorganizowany przepływ pracy klienta Git w F-Droid?

git umożliwia tony elastyczności w przepływie pracy ludzi, dlatego ważne jest, aby jasno zdefiniować przepływ pracy tej społeczności, aby ludzie wiedzieli, czego się spodziewać. Przepływ pracy git używany przez klienta F-Droid jest stosunkowo prosty i oparty na bardzo typowym przepływie pracy ustalonym przez github.com, gitlab.com i inne podobne. Oto podział tego, co to znaczy:

  • wszystkie prace rozwojowe odbywają się w gałęzi master
  • kod jest przesyłany do włączenia za pośrednictwem żądań scalania (MRs)
  • wydania pojawiają się w krótkotrwałej, stabilnej gałęzi wydania dla każdej wersji głównej (np. stable-0.95, stable-0.96, stable-0.97, itd.)
  • praca, która trafia do gałęzi stabilnego wydania musi być ściśle skupiona i możliwie najmniejsza, aby cykl wydawniczy był jak najkrótszy
  • gałąź master nie może nigdy zostać połączona z żadną gałęzią stabilnego wydania
  • gałęzi stabilnego wydania nie można nigdy łączyć z gałęzią master
  • Żądania scalania dla gałęzi stabilnego wydania mogą zawierać zatwierdzenia z master
  • nie wszystkie commity uwzględnione w gałęzi stabilnego wydania muszą znajdować się w gałęzi master
  • to, co robisz w swoich gałęziach gitów, zależy od ciebie, ale ostateczna prośba o scalenie nie powinna zawierać załączników

Oto dyskusja ze spotkania, w której to omówiliśmy: https://web.archive.org/web/20171220230923/https://botbot.me/freenode/fdroid-dev/2015-08-04/?msg=46407489&page=1

Artykuł zawiera dobrą dyskusję na temat “gałęzi funkcjonalnych” w porównaniu z “gałęziami uwalniania” i gałęziami krótko żyjącymi a długowiecznymi: http://blogs.atlassian.com/2013/11/the-essence-of-branch-based-workflows/