1. Ein paar Worte
2. Details
Android SDK
Platzieren Sie Ihr Android SDK in Ihrem Heimverzeichnis oder an anderen Orten, die nicht mit der App zusammenhängen. Einige IDEs verbinden den SDK bei der Installation und platzieren das SDK in demselben Verzeichnis der IDE. Wenn Sie die IDE ein Upgrade (neu installieren) oder die IDE ersetzen müssen, finden Sie etwas Schlimmes. Wenn Ihre IDE unter einem Benutzerkonto anstelle von Root ausgeführt wird, legen Sie den SDK nicht in das Verzeichnis auf Systemebene auf, da ansonsten bei der Verwendung eine sudo-Berechtigung erforderlich ist.
System aufbauen
Die Standardauswahl ist Gradle. Ant hat viele Einschränkungen und ist zu groß. Mit Gradle können Sie es leicht tun:
- verschiedene Geschmacksrichtungen oder Anwendungsvarianten kompilieren
-Erstellen Sie einfache Klassen -Skript -Aufgaben
-Manage und laden Sie Abhängigkeiten herunter und laden Sie sie herunter
-Custom Keystores
-usw
Das Gradle-Plug-In für Android wird auch von Google als neues Standardkompilierungssystem bezeichnet, und Google wird weiterhin aktualisiert.
Projektstruktur
Es gibt zwei beliebte Optionen: die alte Ant & Eclipse ADT -Projektstruktur; Die neue Projektstruktur von Gradle & Android Studio. Sie sollten das letztere wählen. Wenn Ihr Projekt eine alte Struktur verwendet, ersetzen Sie sie.
Alte Struktur
Altstruktur ├─ Vermögenswerte├─ libs├─ res├fornen src│ └─ com/futurice/project ├─ AndroidManifest.xml├─ Build.gradle├fornen
Neue Struktur
new-structure ├─ library-foobar├─ app│ ├─ libs│ ├─ src│ ├─ androidTest│ │ │ └─ java│ │ │ └─ com/futurice/project│ │ └─ main│ ├─ java│ │ └─ main│ ├─ java│ │ └─ com/futurice/project│ │ ├─ res│ │ └─ AndroidManifest.xml│ ├─ Build.gradle│ └─ Proguard-Rules.Pro├─ Build.gradle└└ orts.gradle
Der Hauptunterschied zwischen der neuen Struktur ist die Aufteilung des "Quellcodesatzes" (Haupt-, AndroidTest), das das Konzept von Gradle ist.
Die Verwendung der "App" der höchsten Ebene "App" ist hilfreich, um Ihre App von anderen von Ihrer App verwiesenen Bibliotheksprojekten (z. B. Bibliotheks-Foobar) zu unterscheiden. Anschließend hält Gradle den Index der Anwendung für diese Bibliotheken und App/Build.gradle kann auf diese Bibliotheken verweisen.
Gradle -Konfiguration
Allgemeine Architektur Bitte folgen Sie den Google -Leitfaden zu Gradle for Android.
Kleine Aufgaben (Skripte), Sie können mit Gradle kleine Aufgaben anstelle von Shell, Python oder Perl usw. erstellen. Weitere Informationen finden Sie in der Dokumentation von Gradle.
Passwort. In Ihrem Anwendungsaufbau müssen Sie SigningConfigs für die Veröffentlichungskompilierung definieren. Die Details sind wie folgt:
Schreiben Sie nicht wie Folgendes, es wird in Ihrem Versionskontrollsystem angezeigt:
SigningConfigs {Release {StoreFile -Datei ("MyApp.KeyStore") StorePassword "Passwort123" Keyalias "TheKey" Tastaturword "Password789"}}Stattdessen sollten Sie eine Gradle.Properties -Datei erstellen, die dem Versionskontrollsystem nicht hinzugefügt wird.
Keystore_password = password123key_password = password789
Diese Datei wird automatisch von Gradle importiert, sodass Sie sie in Build verwenden können. Gradle wie folgt:
SigningConfigs {Release {try {storeFile -Datei ("MyApp.KeyStore") StorePaswordKeyStore_Password Keyalias "TheKey" KeypasswordKey_Password} catch (ex) {geworfene WorderwInvaliduserDataException ("Sie sollten Keystore_password und Key_Password in Gradle.Properties definieren.(Wenn Sie Maven verwenden, lesen Sie bitte das Originaldokument.)
Bibliothek
Jackson ist eine Java -Bibliothek, die Objekte und JSON -Daten ineinander umwandeln kann. GSON ist auch eine ähnlich gute Wahl. Wir sind jedoch der Meinung, dass Jsckson besser ist, da es mehrere Möglichkeiten unterstützt, JSON zu verarbeiten: Streaming, Speicherbaummodell und das Steuern von JSON-Pojo-Datenbindung. Aber denken Sie daran, Jackson ist größer als GSON. Sie sollten es also als Sie möchten, wenn Sie ein Grenzwert von 65.000 Methoden vermeiden möchten, ist es am besten, GSON zu verwenden. Andere Optionen: Json-Smart und Boon JSON
Netzwerk, Cache und Bilder. Verwenden Sie Volley oder Nachrüstung. Volley kann auch zum Laden und Cache -Bildern verwendet werden. Wenn Sie sich für Nachrüstung entscheiden, können Sie Picasso verwenden, um Bilder zu laden und zu zwischenstrahlen. Verwenden Sie dann OKHTTP, um eine gültige HTTP -Anforderung durchzuführen. Diese drei Typen: Nachrüst, Picasso und Okhttp stammen alle aus derselben Firma, sodass sie sich gegenseitig ergänzen. OKHTTP kann zur Verbindung zur Volleye verwendet werden.
Rxjava ist eine reaktionsschnelle Programmierbibliothek, mit anderen Worten, behandelt asynchrone Ereignisse. (Weitere Informationen finden Sie im Originaldokument)
Retrolambda ist eine Java -Bibliothek, mit der Sie vor JDK8 Lambda -Ausdrücke auf Android oder anderen Plattformen verwenden können. (Weitere Informationen finden Sie im Originaldokument)
Denken Sie schließlich an die Einschränkungen der DEX -Methode und verwenden Sie nicht zu viele Bibliotheken. (Die Android-Anwendungen in DEX-Dateien haben eine maximale Begrenzung: 65535 Referenzmethoden [1] [2] [3] Wenn Sie das Grenzwert überschreiten, tritt ein schwerwiegender Fehler auf. Daher wird nicht zu viele Bibliotheken verwendet, verwenden Sie die Dex-Methoden-Counts-Tools, um zu entscheiden, welche Klassen anhand der Grenze eingehalten werden können, um die Guava-Bibliothek zu vermeiden, da es mehr mit der Guava-Bibliothek verwendet werden.
Aktivitäten und Fragmente
Fragmente sollten die Standardoption für Ihre UI -Schnittstelle für Android -Bereitstellungen sein. Fragmente können in Ihrer Bewerbung wiederverwendet werden. Wir empfehlen, Fragmente anstelle von Aktivitäten zu verwenden, um Schnittstellen basierend auf den folgenden Punkten zu zeichnen:
Java -Paketstruktur
Die Java-Struktur in Android-Anwendungen liegt in der Nähe der MVC-Struktur (Modell-View-Controller). In Android sind Fragment und Aktivität tatsächlich Controller -Klassen. Aus einer anderen Perspektive sind sie Teil der Benutzerinteraktion, dh sie gehören zur View View -Klasse.
Daher fällt es uns schwer zu unterscheiden, ob ein Fragment (oder eine Aktivität) ein Controller oder eine Ansicht ist. Aus der Perspektive von Java -Paketen sollten wir also besser Fragmente in ihre eigenen Fragmentepakete einfügen, und dann befindet sich die Aktivität im fortschrittlichsten Paket (folgen Sie den oben genannten Vorschlägen). Wenn Sie 2 oder mehr Aktivitäten durchführen möchten, erstellen Sie natürlich ein Aktivitätenpaket.
Auf diese Weise sieht die gesamte Struktur wie eine typische MVC -Struktur aus. Ein Models -Paket enthält Pojos, mit dem JSON -Daten, die von der API -Schnittstelle erhalten wurden, konvertieren, und ein View -Paket enthält Ansichten, Benachrichtigungen, Aktionsbalkenansichten, Widgets usw. Adapter sind eine Zwischenschicht, die sich zwischen Daten und Ansichten befindet. In der Regel müssen sie die View -Ansicht jedoch über GetView () ausgeben, damit Sie Adapter im Unterpackungsort des Views -Pakets platzieren können.
Einige Controller-Klassen auf Anwendungsebene, die nur zum Android-System gehören, sollten im Manager-Paket platziert werden. Verschiedene Datenverarbeitungsklassen wie Dateutils können in das Utils -Paket platziert werden. Klassen, die mit dem Hintergrundserver interagieren, sollten im Netzwerkpaket platziert werden.
Kurz gesagt, die Gesamtarchitektur von der Interaktion mit dem Server bis zur Interaktion mit dem Benutzer kann wie folgt gestaltet werden:
com.futurice.project ├─ Netzwerk ├─ Modelle ├─ Manager ├─ Utils.
Benennung von Ressourcendateien
Folgen Sie der Präfixkonvention, ähnlich wie beispielsweise type_foo_bar.xml, wie z.
Organisieren Sie Layoutdateien
Wenn Sie nicht wissen, wie Sie eine Layout -XML -Datei normalisieren, können Sie sich auf die folgenden Konventionen verweisen:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" Android: layout_Height = "match_parent" android: layout_height = "match_parent" android: orientation = "vertikal"> <textView Android: id = "@+id/name" android: layout_width = "match_parent" android: layout_hight = "wrade_content" android "android" android "android" android "android" android "android" und "true_content" und "true_content" und "true_content" und "true_content) Android: text = "@string/name" style = "@style/FancyText"/> <include layout = "@layout/rendable_part"/> </linearlayout>