C++ empfohlen für Android Apps?
-
Ja, mit C++ lässt sich alles unter Android machen, selbst Dinge, die die Android-Java-API nicht anbietet. Android ist im Grunde ein modifizierter Linuxkernel (in C geschrieben) und bietet einen Großteil von Systemfunktionen, auf die man von Java aus direkt gar nicht zugreifen kann.
Auf der anderen Seite ist die Android-API eben speziell auf das einfache Schreiben von Apps ausgelegt, wodurch sich viele Dinge (GUI, Multithreading, Netzwerk) sehr einfach handhaben lassen.
Für C++ gibt es im Grunde 2 Möglichkeiten unter Android:
1.:
Die App an sich ist in Java geschrieben und man bindet für spezielle Fälle eine C++-so (shared object, die Linux-DLL könnte man sagen) per JNI ein.2.:
Man verwendet als Activity-Klasse die android.app.NativeActivity und kann dann die komplette restliche App in C++ schreiben.Letzteres hat den Nachteil, dass das einfache GUI-Design wegfällt, da die Native-API keine Funktionen bereit stellt, um per XML definierte Oberflächen zu laden

An dieser Stelle kommt Qt ins Spiel.
Wenn du Android-Apps mit Qt entwickelst, entwickelst du prinzipiell auch ein Desktop-Programm, denn der Code ist (wenn man nichts plattformspezifisches macht) problemlos für andere von Qt unterstützte Plattformen kompilierbar.
Die Oberfläche kann also per Qt Designer & co. erstellt werden usw.
Will man dann z.B. auf Systemfunktionen zugreifen, so tut man das einfach wie in C++ üblich (per include und linken).Sollte man doch mal für irgend etwas auf Java zurückgreifen müssen (einfach weil es in C++ z.B. zu aufwendig wäre), so kann man auch bei Qt für Android noch Java Code schreiben. Qt für Android packt im Grunde um deine Anwendungen einen Java-Wrapper und übersetzt alles in Qt-Events und umgekehrt.
Dieser Java-Wrapper wird beim ersten deployen angelegt und kann prinzipiell auch verändert werden, um spezielle Zusatzfunktionen einzubauen :>
Wen das interessiert: http://blog.qt.digia.com/blog/2013/07/23/anatomy-of-a-qt-5-for-android-application/
-
Laufen die Apps die in C++ geschrieben wurden auch flüssiger auf dem Gerät?
-
DKlay13 schrieb:
Laufen die Apps die in C++ geschrieben wurden auch flüssiger auf dem Gerät?
Wennd as so abläuft wie Drako beschrieben hat, dass Qt da alles imemr wieder hin und her übersetzt und dispatcht, dann nicht zwangsweise.
Aber eigentlich ist das ein klassischer Kommentar, um einen Java vs. C++ Flamewar zu entfachen.
-
[quote="Skym0sh0"]
DKlay13 schrieb:
Aber eigentlich ist das ein klassischer Kommentar, um einen Java vs. C++ Flamewar zu entfachen.
Sollte nicht so gemeint sein, aber leider ist es ja so, das Android Apps auf einem aktuellen Gerät teilweise schlechter laufen als auf einem älteren Iphone.
-
DrakoXP schrieb:
Ja, mit C++ lässt sich alles unter Android machen, selbst Dinge, die die Android-Java-API nicht anbietet. Android ist im Grunde ein modifizierter Linuxkernel (in C geschrieben) und bietet einen Großteil von Systemfunktionen, auf die man von Java aus direkt gar nicht zugreifen kann.
Auf der anderen Seite ist die Android-API eben speziell auf das einfache Schreiben von Apps ausgelegt, wodurch sich viele Dinge (GUI, Multithreading, Netzwerk) sehr einfach handhaben lassen.
Für C++ gibt es im Grunde 2 Möglichkeiten unter Android:
1.:
Die App an sich ist in Java geschrieben und man bindet für spezielle Fälle eine C++-so (shared object, die Linux-DLL könnte man sagen) per JNI ein.2.:
Man verwendet als Activity-Klasse die android.app.NativeActivity und kann dann die komplette restliche App in C++ schreiben.Letzteres hat den Nachteil, dass das einfache GUI-Design wegfällt, da die Native-API keine Funktionen bereit stellt, um per XML definierte Oberflächen zu laden

An dieser Stelle kommt Qt ins Spiel.
Wenn du Android-Apps mit Qt entwickelst, entwickelst du prinzipiell auch ein Desktop-Programm, denn der Code ist (wenn man nichts plattformspezifisches macht) problemlos für andere von Qt unterstützte Plattformen kompilierbar.
Die Oberfläche kann also per Qt Designer & co. erstellt werden usw.
Will man dann z.B. auf Systemfunktionen zugreifen, so tut man das einfach wie in C++ üblich (per include und linken).Sollte man doch mal für irgend etwas auf Java zurückgreifen müssen (einfach weil es in C++ z.B. zu aufwendig wäre), so kann man auch bei Qt für Android noch Java Code schreiben. Qt für Android packt im Grunde um deine Anwendungen einen Java-Wrapper und übersetzt alles in Qt-Events und umgekehrt.
Dieser Java-Wrapper wird beim ersten deployen angelegt und kann prinzipiell auch verändert werden, um spezielle Zusatzfunktionen einzubauen :>
Wen das interessiert: http://blog.qt.digia.com/blog/2013/07/23/anatomy-of-a-qt-5-for-android-application/Danke für die ausführliche Information. Das hört sich doch sehr gut an. Damit hat Qt der Sprache C++ noch mehr Wurzeln gegeben

Wie wahr ist es, dass der User bei Verwendung von C++Apps von Qt die Qt-Bibliothek-Source mit downloaden muss? Oder trifft das nur ausschließlich für die Public Domain Software Variante zu?
-
Gar nicht, wenn du eine Qt-Android App deployest (also eine *.apk baust), dann wird da im Normalfall Qt, sowie alle anderen Abhängigkeiten direkt mit reingepackt.
Genau genommen gibt es zwar noch 2 weitere Optionen Qt-Android zu deployen, wo Qt nicht direkt dabei ist, die sind aber imho nur in Spezialfällen nützlich.
Den Quellcode braucht man jedenfalls nicht mit der App direkt ausliefern.
Nutzt man die GPLv3 Variante, so genügt es, den Quellcode irgendwo zur Verfügung zu stellen und in der App iwo den Nutzer darauf hinzuweisen, wo er den Quellcode bei Interesse finden kann.Bei der LGPLv2 Variante ist es im Grunde unwichtig, den Quellcode mitzuliefern, so lange du keine Änderungen an Qt gemacht hast (was für den normalen Gebrauch eigentlich auch unnnötig ist)...
-
DrakoXP schrieb:
Gar nicht, wenn du eine Qt-Android App deployest (also eine *.apk baust), dann wird da im Normalfall Qt, sowie alle anderen Abhängigkeiten direkt mit reingepackt.
Genau genommen gibt es zwar noch 2 weitere Optionen Qt-Android zu deployen, wo Qt nicht direkt dabei ist, die sind aber imho nur in Spezialfällen nützlich.
Den Quellcode braucht man jedenfalls nicht mit der App direkt ausliefern.
Nutzt man die GPLv3 Variante, so genügt es, den Quellcode irgendwo zur Verfügung zu stellen und in der App iwo den Nutzer darauf hinzuweisen, wo er den Quellcode bei Interesse finden kann.Bei der LGPLv2 Variante ist es im Grunde unwichtig, den Quellcode mitzuliefern, so lange du keine Änderungen an Qt gemacht hast (was für den normalen Gebrauch eigentlich auch unnnötig ist)...
Auf der Seite liest es sich so, als ob ab 2007 die V3 gültig wäre:
http://de.wikipedia.org/wiki/GNU_General_Public_LicenseWie kann ich merken, welche Variante ich nutze?
* ändere ich was an den Qt-Tamplates -> V3
* ändere ich nichts, sondern benutze sie nur -> V2
Kann man das so 100% folgern?
-
http://qt-project.org/dow schrieb:
Qt is available under GPL v3, LGPL v2 and a commercial license.
Qt Licensing
Hier wird witziger Weise nur auf LGPL und Commercial eingegangen.AFAIK gilt die GPLv3 für Qt >= 5.0 und alles, was noch 4.x ist, ist LGPLv2.
Aber wie bereits gesagt, es reicht, wenn du den Code iwo (z.B. github, bitbucket, sourceforge, auf deinem eigenen Server) zur Verfügung stellst.
Nur weil jemand deine App installiert, will er ja nicht zwangsläufig auch den Code haben, also ist es unnötig, wenn deine App automatisch ihren Code nachlädt :p
-
Alles klar ... danke!
DrakoXP schrieb:
Wenn du Android-Apps mit Qt entwickelst, entwickelst du prinzipiell auch ein Desktop-Programm, denn der Code ist (wenn man nichts plattformspezifisches macht) problemlos für andere von Qt unterstützte Plattformen kompilierbar.
Genial

-
DrakoXP schrieb:
http://qt-project.org/dow schrieb:
Qt is available under GPL v3, LGPL v2 and a commercial license.
Qt Licensing
Hier wird witziger Weise nur auf LGPL und Commercial eingegangen.AFAIK gilt die GPLv3 für Qt >= 5.0 und alles, was noch 4.x ist, ist LGPLv2.
Aber wie bereits gesagt, es reicht, wenn du den Code iwo (z.B. github, bitbucket, sourceforge, auf deinem eigenen Server) zur Verfügung stellst.
Nur weil jemand deine App installiert, will er ja nicht zwangsläufig auch den Code haben, also ist es unnötig, wenn deine App automatisch ihren Code nachlädt :pUnsere Firmensoftware ist auch OpenSource, aber nirgends im Internet zu finden. Wenn ein Kunde den Code haben will, dann bekommt er ihn. Mehr muss man nicht machen.