Entwickeln Ihrer ersten Android-Anwendung
Warum interessieren wir uns für Android? Wir kümmern uns um die Android-Plattform, weil sie die am weitesten verbreitete mobile Plattform der Welt ist und für Verbraucher auf der ganzen Welt zugänglich ist. In Volkswirtschaften, in denen der Besitz eines PCS ein Luxus ist, ist die Nutzung mobiler Geräte die Norm – und Android spielt eine wichtige Rolle bei der Verbindung von Menschen miteinander. Wie Sie in diesem Tutorial erfahren werden, verfolgt Android einen anderen Ansatz für Anwendungen. Die Architektur von Android ermöglicht dank der Laufzeitbindung angeforderter Aktionen und des Codes zur Erfüllung dieser Anforderungen eine hochgradig anpassbare Softwareumgebung. Ob es sich um marktorientierte Überlegungen oder die technischen Aspekte von Android handelt, es ist eine Plattform, die es wert ist, untersucht zu werden. Wenn Sie ernsthaft darüber nachdenken, eine mobile Erfahrung für Ihre Plattform zu haben, können Sie Android nicht ignorieren.
Voraussetzungen
Dieses Tutorial erfordert mehrere Technologien, die zusammenarbeiten. Sie benötigen alle für dieses Tutorial.
- Android Studio – Android Studio ist der primäre Ausgangspunkt für die Erstellung von Android–Anwendungen
- Android-Gerät oder Emulator – Sie benötigen entweder ein physisches Android-Gerät oder den Android-Emulator. In jedem Fall hilft Ihnen das Lesen dieses Lernprogramms beim Verständnis der grundlegenden Verbindungspunkte einer Android-Anwendung.
-
Quellcode – Quellcode-Snippets in diesem Tutorial enthalten:
- In:AndroidManifest.xml-Snippet – Diese Datei ist der Anwendungsbereitstellungsdeskriptor für Android-Anwendungen.
- Mainaktivität.java – Dies implementiert eine Android-Aktivität, den primären Einstiegspunkt in die Beispielanwendung dieses Lernprogramms.
- Activity_main.xml – Dies enthält Definitionen für die visuellen Elemente oder Ressourcen zur Verwendung durch Android-Aktivitäten.
- AndroidManifest.xml complete – Dies listet eine vollständige AndroidManager.XML-Datei, zusammen mit einer Beschreibung der einzelnen wichtigen Elemente.
Einführung in die Android-Architektur
Bevor Sie direkt in die Vor- und Nachteile des Android Studio eintauchen und Android-Anwendungen entwickeln, werfen wir einen Blick auf die Architektur von Android und einige der wichtigsten Begriffe, die im Tutorial und darüber hinaus hilfreich sein werden, wenn Sie beginnen, Android-Anwendungen für sich selbst zu erstellen.
Android-Terminologie
Ein Verständnis der folgenden Begriffe ist hilfreich bei der Entwicklung von Android-Anwendungen mit Android Studio.
- Android ist eine Open-Source-Betriebsumgebung für mobile Geräte. Android findet sich zunehmend in Anwendungen jenseits von „Smartphones“. Dazu gehören tragbare Technologie, Geräte wie Projektoren, Lautsprecher und Fernseher und sogar Autos.
- Emulator ist ein Softwaretool, das für ein anderes System repräsentativ ist. Ein Emulator ist häufig eine Umgebung, die auf einem PC (PC, Mac, Linux-Computer) ausgeführt wird, der eine andere Umgebung emuliert, z. B. ein mobiles Computergerät.
- Linux ist ein Open-Source-Betriebssystemkern, der das Herzstück vieler Computerplattformen bildet, darunter Server, Desktop-Computer, Netzwerkgeräte und mobile Computergeräte. Android läuft auf einem Linux-Kernel.
- Android Run Time (ART) ist eine Betriebsumgebung im Android-Stack, die Anwendungscode zur Laufzeit ausführt. Die Android-Laufzeit ersetzt die „Legacy“ Dalvik Virtual Machine (VM) aus früheren Versionen von Android, die ähnlich wie eine kompatible Java VM betrieben wurde.
Die Absicht
Seit seiner Gründung ist Android zu einer dominierenden Kraft im Mobiltelefonbereich geworden. Das Anwendungsmodell ist insofern einzigartig, als es sich bei Anwendungen nicht um monolithische, menügeladene Anwendungen handelt, deren Bedienung viel Klicken und Tippen erfordert. Sicher, es gibt Menüs und Schaltflächen, auf die getippt werden muss, aber Android hat ein innovatives Designelement in seiner Architektur, das als Absicht bekannt ist.
Ein Intent ist ein Konstrukt, das es einer Anwendung ermöglicht, eine Anfrage zu stellen, die einem Help-Wanted-Zeichen ähnelt. Es könnte so aussehen:
- “ Gesucht: Eine Anwendung zum Nachschlagen eines Kontakts“
- „Gesucht: Eine Anwendung zum Anzeigen dieses Bildes“
- „Gesucht: Eine Anwendung zum Ausführen dieser geografischen Suche.“
In ähnlicher und komplementärer Weise können sich Anwendungen als fähig und daran interessiert registrieren, verschiedene Anforderungen oder Absichten zu erfüllen. Um dem Paradigma der Kleinanzeigen zu folgen, könnten diese folgendermaßen aussehen:
- “ Verfügbar: Anwendung bereit und willens, Kontaktdatensätze in klarer, prägnanter Weise zu präsentieren“
- „Verfügbar: Anwendung bereit und willens, eine geografische Suche durchzuführen.“
Dies sind Beispiele für IntentFilter, die als nächstes besprochen werden.
Die IntentFilter
-Anwendungen kündigen ihre Verfügbarkeit an, um diese Art von Operationen über ein Konstrukt auszuführen, das als IntentFilter
bekannt ist. Der IntentFilter
wird entweder zur Laufzeit registriert oder im AndroidManifest aufgelistet.xml-Datei. Das folgende Snippet stammt von einer Android-Anwendung, die auf eingehende SMS-Nachrichten (Textnachrichten) reagiert:
<receiver android:name=".MySMSMailBox" android:exported="true"> <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver>
Mehr anzeigenmehr anzeigen icon
IntentFilter werden im nächsten Abschnitt die vier Haupttypen von Android-Anwendungen vorgestellt.
Arten von Android-Anwendungen
Nehmen wir uns einen Moment Zeit, um die vier Haupttypen von Android-Anwendungen zu untersuchen:
- Aktivität
- Dienst
- Empfänger
- ContentProvider
Wir werden uns auch die Ansichten ansehen, um die Elemente der Benutzeroberfläche (UI) anzuzeigen.
Aktivitäts-Apps
Die Aktivität ist die sichtbarste und prominenteste Form einer Android-Anwendung. Eine Aktivität stellt die Benutzeroberfläche einer Anwendung zusammen mit der Unterstützung einer Klasse dar, die als Ansicht bezeichnet wird. Die View-Klasse wird als verschiedene UI-Elemente implementiert, z. B. Textfelder, Beschriftungen, Schaltflächen und andere UIs, die für Computerplattformen, mobile oder otherwise.An die Anwendung kann eine oder mehrere Aktivitäten enthalten. Eine Aktivität wird normalerweise in einer Eins-zu-Eins-Beziehung zu den Bildschirmen in einer Anwendung definiert.
Eine Anwendung wechselt von einer Aktivität zur anderen, indem sie eine Methode aufruft, die als startActivity()
oder startSubActivity()
bekannt ist. Die erstere Methode wird verwendet, wenn die Anwendung einfach zur neuen Aktivität „wechseln“ möchte. Letzteres wird verwendet, wenn ein synchrones Call / Response-Paradigma gewünscht wird. In beiden Fällen wird ein Intent als Argument an die aufgerufene Methode übergeben.
Es liegt in der Verantwortung des Betriebssystems, die am besten qualifizierte Aktivität zu bestimmen, um die angegebene Absicht zu erfüllen.
Dienst- und Empfänger-Apps
Wie bei anderen Multitasking-Computerumgebungen werden Anwendungen „im Hintergrund“ ausgeführt, die verschiedene Aufgaben ausführen. Android nennt diese Art von Anwendungen Dienste. Der Dienst ist eine Android-Anwendung, die keine Benutzeroberfläche hat.
Der Empfänger ist eine Anwendungskomponente, die Anforderungen zur Verarbeitung von Absichten empfängt. Wie der Dienst verfügt ein Empfänger in der normalen Praxis nicht über ein UI-Element. Empfänger sind normalerweise im AndroidManifest registriert.xml-Datei.
Das folgende Snippet (das dem für IntentFilter gezeigten entspricht) ist ein Beispiel für die Definition einer Empfängeranwendung. Beachten Sie, dass das Namensattribut des Empfängers die Java-Klasse ist, die für die Implementierung des Empfängers verantwortlich ist.
<receiver android:name=".MySMSMailBox" android:exported="true"> <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver>
Mehr anzeigenmehr anzeigen icon
Der ContentProvider
ist der Android-Mechanismus für die Abstraktion von Datenspeichern. Schauen wir uns einen bestimmten Datentyp an, der auf einem mobilen Gerät gefunden wird: das Adressbuch oder die Kontaktdatenbank. Das Adressbuch enthält alle Kontakte und Telefonnummern, die eine Person bei der Verwendung eines Mobiltelefons benötigt.
Der ContentProvider
ist ein Mechanismus zum Abstrahieren des Zugriffs auf einen bestimmten Datenspeicher. In vielerlei Hinsicht fungiert der ContentProvider
in der Rolle eines Datenbankservers. Vorgänge zum Lesen und Schreiben von Inhalten in einen bestimmten Datenspeicher sollten über einen geeigneten ContentProvider
, anstatt direkt auf eine Datei oder Datenbank zuzugreifen. Es kann sowohl „Clients“ als auch „Implementierungen“ des ContentProvider
.
Android-Ansichten
Android-Ansichten sind der UI-Mechanismus, um Dinge auf den Bildschirm eines Android-Geräts zu stellen. Die Android-Aktivität verwendet Ansichten zum Anzeigen von Benutzeroberflächenelementen. Einige der beliebtesten Layout-Designs sind:
- LinearVertical – Jedes nachfolgende Element folgt seinem Vorgänger, indem es in einer einzigen Spalte darunter fließt.
- LinearHorizontal – Jedes nachfolgende Element folgt seinem Vorgänger, indem es in einer einzigen Reihe nach rechts fließt.
- Tabelle – Eine Reihe von Zeilen und Spalten, ähnlich einer HTML-Tabelle. Jede Zelle kann ein Ansichtselement enthalten.
- Einschränkung – Jedes Element ist auf einen Aspekt der Anzeige „beschränkt“, z. B. die Oberseite oder Seite des Bildschirms oder ein anderes Element. Dieses Layout hilft bei der Konstruktion von „responsive“ Anwendungen und ist der Erbe des Legacy-relativen Layouts, das in früheren Versionen der Android-Plattform eingeführt wurde.
Nachdem ein bestimmtes Layout (oder eine Kombination von Layouts) ausgewählt wurde, werden einzelne Ansichten verwendet, um die Benutzeroberfläche zu definieren.
Ansichtselemente bestehen aus vertrauten UI-Elementen, einschließlich:
- Schaltfläche
- ImageView
- EditText zum Sammeln von Eingaben mit verschiedenen Filtern wie Datum oder Numerisch
- TextView (ähnlich einem Label, zeigt statischen Text an)
- Kontrollkästchen
- Optionsfeld
- Spinner (ähnlich einem „Dropdown“ -Kombinationsfeld)
- AutoComplete (EditText mit Auto Text-Complete-Funktion)
Ansichten werden in einer XML-Datei definiert. Dies zeigt beispielsweise eine einfache LinearVertical-Ansicht mit definierten Schaltflächen und Textansichten:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" ><TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Activity 1!" /><TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Activity 1, second text view!" /><Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Switch To Activity 2" /></LinearLayout>
Mehr anzeigenmehr anzeigen icon
https://developer.android.com/, und scrollen Sie nach unten, um Android Studio herunterzuladen. Android Studio ist für Windows, Mac und Linux verfügbar.
Android Studio basiert auf der IntelliJ IDE-Plattform. Wenn Sie ein Entwickler sind, der sich für die Nutzung von Tastaturkürzeln interessiert, sollten Sie mehr über IntelliJ auf der Jetbrains-Website erfahren.
Erste Schritte mit dem Android SDK
Nun, da wir Android Studio installiert haben, ist es Zeit, das Software Developer Kit (SDK) für Android zu erhalten.
Aber bevor wir weiter gehen, müssen wir eine Diskussion über Android-Versionen führen.
Android-Versionen
Seit seiner Gründung wurde Android unter einem etwas parallelen Pfad von numerischen Release-Revisionen, API-Levels und auch „süßen“ Namen wie Jelly Bean, KitKat, Oreo und anderen Süßwarenfavoriten veröffentlicht.
Es ist leicht, von der Auswahl überwältigt zu werden. Im Moment benötigen Sie nur ein wenig Verständnis für diese „Versionslandschaft“, um als Android-Entwickler loszulegen.
Es gibt viele Versionen oder Revisionen von Android in freier Wildbahn. Wenn Sie eine Anwendung für die kommerzielle Veröffentlichung schreiben, müssen Sie wissen, auf welche Geräte Sie abzielen. Wikipedia hat eine schöne Zusammenfassung der Android-Versionen, die Namen, die Veröffentlichungsdaten sowie eine Grafik, die die ungefähre Anzahl der einzelnen Geräte auf dem Markt darstellt.
Neuere Geräte führen den neuesten Code aus, und ältere Geräte können in ihrer Fähigkeit, auf eine neuere Version von Android zu aktualisieren, etwas eingeschränkt sein. Manchmal unterstützen die neueren Versionen Funktionen, die die älteren Mobilteile nicht unterstützen können (z. B. zweite Kamera, Nahfeldkommunikation usw.). Ein weiterer nicht trivialer Grund dafür, dass ältere Mobilteile möglicherweise nicht in der Lage sind, die neueste Android-Version auszuführen, besteht darin, dass sowohl der Hersteller als auch der Telekommunikationsbetreiber (Verizon, AT & T usw.) die in ihrem Ökosystem ausgeführte Software unterstützen müssen. Die Unterstützung eines neuen Betriebssystems erfordert Ressourcen seitens des Geräteherstellers und des Netzbetreibers. Die Marktkräfte legen nahe, dass diese Marktteilnehmer sich mehr um zukünftige Verkäufe als um die Unterstützung früherer Verkäufe kümmern und ihr Humankapital entsprechend investieren.
Was macht es für einen Softwareentwickler aus, dass es neue Versionen des Betriebssystems gibt? Dies gliedert sich in zwei große Kategorien, wenn es um die Programmierung von Anwendungen geht:
- Eine neue Version des Betriebssystems führt häufig neue Funktionen ein, die wir nutzen können und / oder von denen unsere Benutzerbasis erwartet, dass sie von unseren Anwendungen unterstützt werden.
- Ältere (oder ältere) Funktionen der Umgebung können neuere Funktionen tatsächlich behindern und/oder einen minderwertigen Ansatz für die Bereitstellung eines bestimmten Funktionssatzes darstellen. Manchmal muss Code tatsächlich aus den API-Definitionen entfernt werden. Es gibt einen speziellen Begriff für dieses „Entfernen“ von früher funktionierendem Code – wir nennen es „Code Deprecation“. Wenn eine API zum Entfernen markiert wurde, sagen wir, dass dies eine veraltete API ist. Dies ist im Wesentlichen eine Nachricht an den Entwickler, die ungefähr so lautet: „Warnung“ Dieser Code wird in Zukunft entfernt.“
Die Android-Plattform war mit ihrem Ansatz für veralteten Code ziemlich liberal (dh für den Entwickler günstig), indem Anwendungen erlaubt wurde, ältere APIs noch eine ganze Weile zu verwenden, nachdem sie als veraltet markiert wurden. (Dieser Ansatz steht im Gegensatz zu Apples Ansatz mit veraltetem Code in iOS, bei dem älterer Code bei der nächsten Betriebssystemversion einfach nicht mehr funktioniert. Mit iOS scheint sich sogar die Programmiersprache zu ändern, während wir nicht suchen!)
Während Android mit seinem langjährigen veralteten Code etwas nachsichtiger ist, müssen wir das Dokumentations-Tag im Auge behalten, das besagt, dass eine bestimmte API veraltet ist. Wenn ein von uns verwendeter Code als veraltet markiert ist, müssen wir unseren Ansatz in einer zukünftigen Version unserer Anwendung ändern, da jede API, die als veraltet markiert ist, in einer zukünftigen Version entfernt werden kann. Deprecation Marker im SDK sind unsere Roadmap für zukünftige Verbesserungsmöglichkeiten und für potenzielle Kopfschmerzen. Manchmal ist die „neue“ Art, Dinge zu tun, einfach und unkompliziert, aber nicht in jedem Fall!
Ein erfolgreicher Entwickler mobiler Anwendungen zu sein, erfordert eine kontinuierliche Investition über die Lebensdauer einer Anwendung, bei der die Zeit wie Hundejahre vergeht … sehr schnell!
Mit dieser grundlegenden Einführung in die Android-Versionen ist es an der Zeit, das Android SDK zu erhalten.
Abrufen und Installieren des Android SDK
Starten Sie Android Studio. Wählen Sie im Menü Extras die Option SDK-Manager. Diese Menüoption lädt den Android Studio-Einstellungsdialog und wählt das Android SDK-Untermenü vor. Dieses Menü ist unser primäres Mittel zur Interaktion mit den verschiedenen SDKs, die für die vielen Android-Versionen verfügbar sind.
Mit jeder Version des Betriebssystems erhöht sich die API-Ebene. Beachten Sie, dass die Revision langsamer zunimmt als die API-Ebene. Sie können sich die Revision als „Generation“ der Plattform oder als „Hauptversionsnummer“ vorstellen. Stellen Sie beim Durchsuchen der Android-Dokumentation sicher, dass Sie angeben, auf welcher API-Ebene eine bestimmte Funktion eingeführt wurde. Jede API ist auf der angegebenen API-Ebene und höher verfügbar, es sei denn, die API wurde veraltet und anschließend entfernt. Beispielsweise wurde die ContactsContract-API auf Ebene 5 eingeführt, die zu diesem Zeitpunkt ziemlich „alt“ ist.
Wählen Sie eine oder zwei SDK-Ebenen aus, mit denen Sie vorerst arbeiten möchten. Der SDK-Manager lädt anschließend die zugehörigen Dateien herunter und stellt sie zur Verwendung in Android Studio zur Verfügung.
Ebenfalls unter dem Menü Extras befindet sich eine Option für den AVD Manager. AVD steht für Android Virtual Device. Dies ist der Emulator. Der Emulator ist hilfreich, da er es uns ermöglicht, Anwendungen auf verschiedenen Gerätetypen, -größen und -versionen zu testen. Die Screenshots in diesem Tutorial stammen aus dem Emulator. Dazu später mehr.
Erstellen Ihrer ersten Android-Anwendung
Dieses Tutorial führt Sie durch die Erstellung einer grundlegenden Android-Anwendung mit dem Namen SaySomething
mit Android Studio und demonstriert es auf dem Android-Emulator.
Holen Sie sich den Code
Schritt 1: Neues Projekt erstellen
- Datei auswählen > Neues Projekt.
-
Füllen Sie das Dialogfeld Android-Projekt erstellen aus und klicken Sie auf Weiter.
Die Anforderungen für das neue Projekt umfassen:
- Anwendungsname
- Unternehmensdomäne (dies wird in com umgekehrt.domäne), um Anwendungen partitioniert zu halten, auch wenn sie denselben Anwendungsnamen haben.
- Projektstandort – wo die Dateien gespeichert werden sollen
- Der Paketname wird aus dem Anwendungsnamen und der Unternehmensdomäne vorgeschlagen
- Standardmäßig sind Android-Anwendungen in Java geschrieben. Wenn Sie alternative Sprachen wie C ++ (für nativen Code) oder Kotlin unterstützen möchten, aktivieren Sie die entsprechenden Kontrollkästchen.
-
Geben Sie im Dialogfeld Android-Zielgeräte die API-Ebene und die Zielplattformen an. Wie bereits erwähnt, ist Android für mehr als nur Telefone, obwohl wir für unsere Zwecke einfach den Telefon- und Tablet-Formfaktor für dieses Tutorial auswählen werden. Klicken Sie dann auf Weiter.
-
Wählen Sie im Dialogfeld Aktivität zu Mobilgerät hinzufügen den leeren Aktivitätstyp aus. Klicken Sie dann auf Weiter.
Dadurch wird eine Standardanwendung erstellt, die direkt aus Android Studio erstellt und ausgeführt werden kann.
-
Benennen Sie im Dialogfeld Aktivität konfigurieren die Dateien für die Anwendung.
Schritt 2: Überprüfen Sie den Code
Die folgende Abbildung zeigt die Komponenten unseres neuen Projekts:
Es gibt zwei Ordner: app
und Gradle Scripts
.
- Der Ordner
app
enthält den gesamten Code unserer Anwendung. - Der Ordner
manifeste
im Ordnerapp
enthältAndroidManifest.xml
ist der Bereitstellungsdeskriptor für diese Anwendung. Diese Datei teilt dem Android-Gerät mit, wie es mit der Anwendung interagieren soll, welche Aktivität beim Starten der Anwendung angezeigt werden soll, welche Absichten die Anwendungsdienste haben, welche Symbole angezeigt werden sollen und vieles mehr. - Der Ordner
java
enthält den Quellcode für die Anwendung. In diesem Fall die Datei, die unsere Aktivität implementiert, sowie einige Klassendateien für die Durchführung automatisierter Tests (die wir für dieses Tutorial ignorieren werden). - Der Ordner
und
enthält die Ressourcen für die Anwendung, einschließlich Symbole, Layoutdateien, Zeichenfolgen, Menüs usw. - Der Ordner
Gradle Scripts
enthält alle skriptfähigen Elemente zum Erstellen der Anwendung. Das Gradle Build System ist ein Thema für sich. Verstehen Sie vorerst, dass diese Skripte den Prozess des Erstellens der Anwendung steuern – und wichtig für reifere Projekte und Teams ist, dass jeder dieser Schritte über die Befehlszeile ausgeführt werden kann. Dies ist wichtig, da dieser Ansatz die Automatisierung unterstützt und in die Kategorie der kontinuierlichen Integration fällt.
Lassen Sie uns nun den Quellcode genauer untersuchen.
Hauptaktivität für die Anwendung
Unsere Beispielanwendung besteht aus einer einzigen Aktivität mit dem Namen MainActivity
.
package com.navitend.saysomething;import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.util.Log;import android.widget.Button;import android.widget.TextView;import android.widget.EditText;public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.i("IBM","Hello there logcat!"); setContentView(R.layout.activity_main); final Button btnHitMe = (Button) findViewById(R.id.hitme); final Button btnMapMe = (Button) findViewById(R.id.mapme); final TextView tvLabel = (TextView) findViewById(R.id.thelabel); final EditText etLatitude = (EditText) findViewById(R.id.etLatitude); final EditText etLongitude = (EditText) findViewById(R.id.etLongitude); btnHitMe.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { tvLabel.setText("Ouch!"); } } ); btnMapMe.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String coords = etLatitude.getText()+","+etLongitude.getText(); Log.i("IBM",coords); Uri mapsIntentUri = Uri.parse("geo:" + coords); Intent mapIntent = new Intent(Intent.ACTION_VIEW, mapsIntentUri); startActivity(mapIntent); } } ); }}
Mehr anzeigenmehr anzeigen icon
MainActivity ist eine normale Java-Klasse mit einem Paket und Importen, wie erwartet.
MainActivity
erweitert eine Basis-Android-Klasse mit dem Namen AppCompatActivity
, die sich im Paket mit dem Namen android befindet.Unterstützung.v7.app
.onCreate()
ist der Einstiegspunkt für diese Aktivität und empfängt ein Argument vom Typ Bundle
. Das Bundle
ist eine Klasse, die im Wesentlichen ein Wrapper um eine Map oder Hashmap ist. Für die Konstruktion erforderliche Elemente werden in diesem Parameter übergeben.setContentView(..)
ist verantwortlich für die Erstellung der primären Benutzeroberfläche mit dem R.layout.haupt
Argument. Dies ist ein Bezeichner, der das Hauptlayout in den Ressourcen der Anwendung darstellt. Beachten Sie, dass alle Bezeichner in der Klasse „R“ automatisch vom Erstellungsprozess generiert werden. Im Wesentlichen wird auf alle XML-Ressourcendateien im zuvor beschriebenen Ordner res
mit der R-Klasse zugegriffen.Ressourcen für die Anwendung
Ressourcen in Android sind wie zuvor beschrieben in einem Unterverzeichnis des Projekts mit dem Namen res organisiert. Ressourcen fallen in eine Reihe von Kategorien. Drei dieser Kategorien sind:
-
Drawables
– Dieser Ordner enthält Grafikdateien wie Symbole und Bitmaps -
Layouts
– Dieser Ordner enthält XML-Dateien, die die Layouts und Ansichten der Anwendung darstellen. Diese werden im Folgenden im Detail untersucht. -
Values
– Dieser Ordner enthält eine Datei mit dem Namenstrings.xml
. Dies ist das primäre Mittel zur Zeichenfolgenlokalisierung für die Anwendung. Die Datei Farben.xml ist nützlich, um von der Anwendung verwendete Farbcodes zu definieren. Diese Datei ist analog zu einem CSS-Stylesheet für diejenigen, die mit Webprogrammiertechniken vertraut sind.
Primäre UI-Ressourcen in der main_activity.xml-Datei
Die Beispielanwendung enthält eine einzelne Aktivität und eine einzelne Ansicht. Die Anwendung enthält eine Datei mit dem Namen main_activity.xml
, das die visuellen Aspekte der primären Benutzeroberfläche der Aktivität darstellt. Beachten Sie, dass es keine Referenz in der main_activity .xml
wo das Layout verwendet wird. Dies bedeutet, dass es in mehr als einer Aktivität verwendet werden kann, falls gewünscht. Siehe die folgende Code-Auflistung
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:gravity="center_vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:gravity="center" tools:layout_editor_absoluteX="8dp" tools:layout_editor_absoluteY="301dp"> <Button android:id="@+id/hitme" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hit Me!" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" tools:layout_editor_absoluteY="383dp" /> <Button android:id="@+id/mapme" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Map Me!" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" tools:layout_editor_absoluteY="460dp" /> </LinearLayout> <TextView android:id="@+id/thelabel" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:text="Hello World, Say Something!!!!!" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> <EditText android:id="@+id/etLatitude" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" android:hint="Latitude" android:inputType="numberDecimal" android:text="40.9241164" /> <EditText android:id="@+id/etLongitude" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" android:hint="Longitude" android:inputType="numberDecimal" android:text="-74.7213913" /></LinearLayout>
Mehr anzeigenmehr anzeigen icon
LinearLayout gibt es ein zweites LinearLayout
, das als horizontales Layout organisiert ist. Dieses innere Layout enthält ein Paar Schaltflächen-Widgets. Unterhalb des horizontalen LinearLayout
befindet sich ein einzelnes TextView-Element, das mit einem Label in anderen Entwicklungsumgebungen verglichen werden kann. A TextView
stellt statischen Text dar, der nicht bearbeitet werden kann. Unterhalb der TextView
befinden sich zwei EditText
Widgets, die für numerische Eingaben konfiguriert sind. Diese Eingabeelemente werden verwendet, um einen Breiten- und Längengradwert zu erfassen, der anschließend an eine Mapping-Anwendung übergeben wird, wie unten gezeigt.
Beachten Sie, dass jedes Ansichtselement Attribute im Android-Namensraum hat. Einige Attribute sind allen Ansichten gemeinsam— z. B. die Attribute android:layout_width
und android:layout_height
. Die für diese Attribute verfügbaren Werte sind:
- Match Parent – Dies erweitert das Ansichtselement, um den maximal verfügbaren Speicherplatz zu belegen. Dies kann auch als „Stretch“ bezeichnet werden.“
- Inhalt umbrechen – Diese Option führt dazu, dass das Element gerade so weit erweitert wird, dass es seine untergeordneten Ansichten oder Attribute wie Text oder Bild enthält.
Bereitstellungsdeskriptor für eine Android-Anwendung (AndroidManifest.xml)
Das AndroidManifest.die XML-Datei stellt den Bereitstellungsdeskriptor für eine Android-Anwendung dar. Die Datei listet alle Aktivitäten, Dienste, Inhaltsanbieter oder Empfänger auf, die in der Anwendung enthalten sind, zusammen mit den entsprechenden von der Anwendung unterstützten IntentFiltern. Hier ist das komplette AndroidManifest.xml-Datei für die Beispielanwendung:
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.navitend.saysomething"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity" android:label="@string/app_name" android:theme="@style/AppTheme.NoActionBar"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application></manifest>
Mehr anzeigenmehr anzeigen icon
<manifest> -Tag importiert im Wesentlichen Klassen aus diesem Paket. Alle nicht vollständig qualifizierten Klassen in dieser Datei befinden sich in dem im Paketattribut angegebenen Paket.
<application>
-Tag verfügt über ein Attribut, das auf eine Ressource aus den Ressourcen der Anwendung verweist. Beachten Sie das @ -Symbol vor den verschiedenen Bezeichnern. Dies ist ein Hinweis für die Toolchain, nach jeder Ressource im entsprechenden Ordner der Ressourcen der Anwendung zu suchen.Das <activity>
-Tag enthält die folgenden Attribute und Werte:
-
android:name
repräsentiert die Java-Klasse, die diese Aktivität implementiert -
android:label
enthält den Namen der Anwendung. Beachten Sie, dass es auf eine der Zeichenfolgenressourcen verweist. Die Zeichenfolge.xml
-Datei enthält lokalisierte Zeichenfolgen für die Anwendung. -
< intent-filter>
repräsentiert denIntentFilter
, der in der Beispielanwendung verfügbar ist. Diese spezifischen Aktions- und Kategorieattribute sind die häufigstenIntentFilter
in Android-Anwendungen. Dieser Filter besagt im Wesentlichen, dass er die Hauptaktion (oder den Einstiegspunkt) implementiert und auf dem aktuell aktiven Startbildschirm für das Betriebssystem verfügbar ist. In einfachen Worten bedeutet dies, dass es als Anwendung aus der primären Liste der Anwendungen auf einem Android-Gerät gestartet werden kann.
Schritt 3: Erstellen Sie die Anwendung
Um die Anwendung zu erstellen, wählen Sie das Schraubenschlüsselsymbol (sieht für mich eher wie ein Hammer aus) im Menü von Android Studio.
Der Build-Prozess ist, wie bereits erwähnt, ein mehrstufiger Prozess, der für eine bestimmte Anwendung angepasst werden kann. In diesem Tutorial ändern wir den Erstellungsprozess nicht. Die Ausgabe des Build-Prozesses sollte ungefähr so aussehen:
Um den Build-Prozess zu demonstrieren, haben wir einen Fehler in den Quellcode eingefügt; wir haben dem Namen der Methode findViewById
ein zusätzliches Leerzeichen hinzugefügt, das in der folgenden Abbildung dargestellt ist:
Dadurch wird ein Syntax- oder Analysefehler erstellt, der vom Erstellungsprozess erfasst und in den Details des Erstellungsergebnisfensters in Android Studio angezeigt wird. Nach dem Beheben des Fehlers im Quellcode wird die Anwendung ordnungsgemäß erstellt und die Fehler werden aus der Problemliste entfernt.
Schritt 4: Führen Sie die Anwendung aus
Nachdem die Anwendung erfolgreich kompiliert wurde, ist es Zeit, die Beispielanwendung auszuführen.
Früher in diesem Tutorial wurde der AVD-Manager eingeführt, um den Emulator für das Testen von Anwendungen zu konfigurieren, ohne dass ein echtes Gerät erforderlich ist. Das Ausführen einer Anwendung mithilfe des Emulators ist besonders nützlich, da damit Tests durchgeführt werden können, ohne dass zahlreiche kostspielige Geräte gekauft werden müssen.
Um einen Emulator oder genauer gesagt ein virtuelles Android-Gerät (AVD) einzurichten, wählen Sie Tools > AVD Manager. Oder klicken Sie einfach auf das Symbol Play (Run).
Dadurch wird ein Fenster geöffnet, in dem Sie entweder ein reales Gerät auswählen können, das über ein USB-Kabel angeschlossen ist, oder eine verfügbare AVD-Instanz, wie in der folgenden Abbildung dargestellt:
Wenn verbundene Geräte vorhanden sind, wird jedes in der Dropdown-Liste unter Verbundene Geräte angezeigt. Wählen Sie alternativ eines der verfügbaren virtuellen Geräte aus. In der vorherigen Abbildung ist eine einzelne AVD mit dem Titel Nexus One API P
definiert. Um eine neue AVD zu erstellen, wählen Sie die Schaltfläche Neues virtuelles Gerät erstellen.
Klicken Sie abschließend auf OK, um die Anwendung auf dem ausgewählten Bereitstellungsziel zu starten. Der AVD oder Emulator wird mit unserer darauf ausgeführten Beispielanwendung gestartet.
Schritt 5: Testen Sie die Anwendung im Emulator
Nachdem die Anwendung auf dem Emulator ausgeführt wird, schauen wir uns an, was hinter den Kulissen passiert. Wählen Sie in Android Studio Ansicht > Werkzeugfenster aus. Wir werden nur einige dieser Tooloptionen hervorheben, obwohl jede von ihnen ein Thema für sich ist.
Android Studio Tools
Sehen Sie sich zunächst den Android Profiler an, der ein laufendes Diagramm des CPU-, Speicher- und Netzwerkverkehrs darstellt. Mit dem Android-Profiler können wir zwischen verschiedenen Geräten / Emulatorinstanzen und den jeweiligen laufenden Prozessen wechseln. Die folgende Abbildung zeigt die Metriken für unsere Beispielanwendung, die auf einer Emulatorinstanz ausgeführt wird.
Die Protokollierung ist ein nützliches Tool für jeden Entwickler auf jeder Plattform. Für Android-Entwickler lautet der Name des Tools LogCat.
Der LogCat ist eine laufende Protokolldatei der Aktivität, die in der VM stattfindet. Anwendungen können ihre eigenen Einträge in diese Liste mit einer einfachen Codezeile wie folgt vornehmen: Log .i(tag,message);1
, wobei tag
und message
beide Java-Zeichenfolgen sind. Die Log
Klasse ist Teil des android.util.Log
Paket.
Ein weiteres nützliches Tool ist der Datei-Explorer, der den Dateisystemzugriff des Emulators ermöglicht. Die folgende Abbildung zeigt, wo die Beispielanwendung des Lernprogramms auf dem Emulator bereitgestellt wird.
Benutzeranwendungen werden im Verzeichnis /data/app
bereitgestellt, während integrierte Android-Anwendungen im Verzeichnis /system/app
bereitgestellt werden.
Das vollständige Debuggen einer Android-Anwendung geht über den Rahmen dieses Lernprogramms hinaus, obwohl Sie sicher sein können, dass Android Studio alle modernen Debugging-Tools für Anwendungen unterstützt, auf die wir hoffen können, z. B. beim Ein- und Durchlaufen von Funktionsaufrufen.
Testen der Beispielanwendung
Tippen Sie auf Hit Me! und der Inhalt des Etiketts ändert sich zu „Autsch!“
Tippen Sie auf die Karte Me! schaltfläche, und eine Mapping-Anwendung wird mit dem angegebenen Breiten- und Längengrad gestartet, der in den EditText-Widgets enthalten ist.
Die Verdrahtung der Tasten befindet sich in der MainActivity.XML-Code. Beachten Sie insbesondere, wie die Breiten- und Längengrade extrahiert und in eine Absicht gepackt werden, die anschließend zum Starten der Zuordnungsanwendung verwendet wird.
Dieses Tutorial stellte die Android-Plattform, das Android Studio und die Schlüsselelemente der Android-Entwicklung vor. Sie sollten nun bereit sein, Ihre eigenen Android-Anwendungen zu erstellen.
Bist du bereit für etwas mehr? Probieren Sie dieses Tutorial aus, in dem Sie Bluetooth Low Energy (BLE) -APIs verwenden, um IoT-verbundene Geräte zu erstellen.