Android APK erstellen

Guten Tag,

ich dachte mir, einige Rechenaufgaben könnte mein Handy auch erledigen, da es auch immer online ist. Wie erstelle ich aus einer .main()-Methode eine Anwendung Android, welche auch aktiv ist, wenn sie “minimiert” wird? (Den passenden Begriff weiß ich dafür nicht) Es ist auch einer externe Lib in Form einer .jar dabei…

Danke für Hints für mich Android-Noob :wink:

System: Netbeans, Java ME(?)

Edit: Sorry, bitte ändern oder verschieben, nicht ADB sondern APK(!)

Deine Frage ist sehr allgemein gestellt, deshalb hier mal Schritt für Schritt allgemein erklärt.

Du brauchst erstmal eine Android Entwickler Umgebung. Das heißt du brauchst mindestens das Android SDK und am besten für deine IDE ein entsprechendes Plugin, soweit ich weiß wird nur IntelliJ mit Android Studio offiziell unterstützt.
Am einfachsten ist es aber wenn du dir das Android Studio Paket herunterlässt https://developer.android.com/studio/index.html
Du startest Android Studio und musst nur noch die entsprechenden Google Bibliotheken, für die jeweiligen Android Versionen die du unterstützen willst, herunterladen im Android SDK Manager und dann ein neues Android Projekt erstellen und den Code darauf portieren.

Kurz gesagt: Das ist glaube ich komplizierter als du denkst.
Android verwendet zwar die Java Syntax und größtenteils die Standard Java Bibliotheken aber es ist kein Java!
Und erst wenn du gegen Android Nougat kompilierst (kommendes Android das noch kein Smartphone offiziell hat), wird die Java 8 Syntax unterstützt. Davor nur Java 6 (teils 7).

Schlussendlich ist danach eigentlich alles ganz einfach: Hast du ein neues Projekt bzw. Modul erstellt hast du direkt eine “Start”-Klasse die von Activity erbt und bereits die Methode “onStart()” überschreiben sollte - das ist deine Android äquivalente “main”-Methode. Dort kopierst du deinen Code aus deiner main hinein und kopierst alle Java source files in dein Projekt. Funktioniert meist reibungslos.

Ob deine App im Hintergrund läuft bestimmt Android. Das gesamte Betriebssystem hat einen Garbage Collector, wenn die Systemressourcen zuneige gehen wird Android automatisch Apps die im Hintergrund laufen beenden.
Ansonsten besitzt die Activity Klasse noch andere Methoden die dich über die Zustandsänderung der App informieren, wie onPause(), onStop() oder onResume(). onPause informiert dich darüber dass deine App in den Hintergrund geraten ist und sich jetzt pausieren sollte, musst du aber nicht.
onStop() bedeutet die App wird jetzt aus dem Speicher bereinigt, dagegen kannst du nichts machen.

Um das komplett zu umgehen musst du einen Background Service erstellen, einen sogenannten IntentService. Auch hier hast du keinen Einfluss, zB. wann der Task ausgeführt wird bzw. fertiggestellt wird. Er wird dann ausgeführt wenn Android gerade danach ist.
Mehr dazu hier https://developer.android.com/training/run-background-service/create-service.html

Wenn du spezifischere Fragen hast zu den einzelnen Punkten, nur zu.

Dankeschön, genau die Antwort, die ich suchte!!

@Mods: Bitte verschiebt das nach: https://forum.byte-welt.net/java-forum/android/ — ich hab mit ‘Allgemeines’ das falsche Forum gewählt.

Also
Android Studio verwenden,
Java 6 verwenden (mache ich schon :o ),
Neues Projekt, Code portieren…,
usw.

Fragen

  1. Wie erstelle ich eine einfach Log-Anzeige, in der ich einfach Text-Zeilen eintragen kann, was gerade geschieht?
  2. Kann ich eine .jar-Bibliothek ‘includen’? Sie wäre für die Kommunikation (dh. Logik) zuständig.

*** Edit ***

Ich muss leider gleich mit der ersten Fehlermeldung nerven:

Android SDK is up to date.
Unable to install Intel HAXM
Your CPU does not support required features (VT-x or SVM).
Unfortunately, your computer does not support hardware accelerated virtualization.
Here are some of your options:
 1) Use a physical device for testing
 2) Develop on a Windows/OSX computer with an Intel processor that supports VT-x and NX
 3) Develop on a Linux computer that supports VT-x or SVM
 4) Use an Android Virtual Device based on an ARM system image
   (This is 10x slower than hardware accelerated virtualization)

Edit 2:

Ist doch komplett anders, als die Java SE-Version(en)… Java 8 wird doch unterstützt?

R ? Wo kommt R her?^^

Danke trotzdem für Hilfe/Zeit, das wird erst mal nix. Ich denke, ich wurde reingelegt. o.O

System.out.println(); funktioniert auf Android wie in Java. Android (Studio) bringt ein Logging-Tool “LogCat” mit, in dem der Output geschrieben wird.
Du kannst auch direkt die Methoden von LogCat verwenden per
Log.i( "Statement 1", "Statement 2" );
Es gibt noch Log.v() .d() .w() .e() für verschiedene Wichtigkeitslevel.
.w() für Warning wird meist gelb in der Konsole ausgegeben, .e() für Error meist rot.

Das Log-Tool findest du in Android Studio unten links mit einem Klick auf “Android Monitor”. Zumindest auf deinem angehängten Bild.

Dort kannst du den Output nach Wichtigkeitslevel sortieren und den Output nach deiner Applikation filtern, denn dort taucht der gesamte Output des Gerätes auf und nicht nur der deiner Applikation. Dazu musst du die Applikation starten, danach filtert “manchmal” LogCat automatisch nach dem Output deiner Applikation, ansonsten musst du sie im leeren Dropdown-Menü auswählen.

Ja das kannst du, indem du sie als Library in dein Projekt einbindest. Am besten befolgst du die Anweisungen hier
gradle - Android Studio: Add jar as library? - Stack Overflow

Die Fehlermeldung gibt dir bereits alle alternativen Methoden vor die du hast.
Lösung 1): Statt dem Emulator schließe ein echtes Android Gerät per USB Kabel an dein PC und aktiviere das USB Debugging auf dem Gerät. Es sollte dann automatisch in der Liste verfügbarer Geräte auftauchen die kommt wenn du auf ausführen klickst. Die App wird dann automatisch kompiliert, auf dem angeschlossenen Gerät installiert, ausgeführt und der Output taucht dann in LogCat in Android Studio auf.

Weit besser als den Android Emulator zu benutzen.

Das Android SDK verwendet das JDK8, aber nur Geräte mit Android N unterstützen auch die Syntax wie z.B. Lambdas.
Bei der Erstellung der App wurdest du gefragt welche minimum und maximum SDK Version du unterstützen möchtest und hast wahrscheinlich API 24 (Android 7/Nougat)

Hier siehst du die Marktverteilung der Android Versionen https://developer.android.com/about/dashboards/index.html
Wie du siehst wird Android N noch nicht gelistet.

Wenn du die App auf deinem Smartphone ausführen willst musst du erstmal herausfinden welche Android Version darauf installiert ist, die entsprechende API dafür herunterladen und schlussendlich ein Projekt erstellen dass diese API verwendet.

Die APIs sind nicht wie bei Java Rückwärtskompatibel!!

… das ist kompliziert. R ist eine spezielle Datei in deinem Projektordner (aus dieser wird eine statische Klasse R automatisch kreiert) in der Objekte und Strings definiert werden können.
Wird wichtig beim Erstellen von GUIs per XML, denn die einzelnen GUI Elemente werden automatisch aus der XML kreiert und können über die Klasse R referenziert werden.
Vergiss die einfach fürs erste und lösche den ganzen Müll der dort in deiner Klasse kreiert wurde bis auf “onStart() { super.onStart(); }”.

Bitteschön, auf ein andermal.

Hm, aber ich möchte z. B. einfach eine JTextArea habn (wie gewohnt).

Beim Erstellen des Projekts hatte ich nur eine minimale Version, Android 4, angegeben.

Insgesamt: Ich hab mir das einfacher vorgestellt, als es ist. Ohne Buch, hat man da keine Chance.

Trotzdem Danke für die Müh. Auf ein andermal.