Aktualisiert (aus Gründen der Klarheit und zur Verringerung der Mehrdeutigkeit):
Ich werde anfangen, an Android-Apps herumzubasteln. Ich hatte vor, das in C ++ mit dem NDK zu schreiben (da ich mehr Erfahrung in C ++ habe und es Java vorziehe), bin aber auf der Android NDK-Seite auf Folgendes gestoßen :
Sie sollten das NDK nur verwenden, wenn es für Ihre App unerlässlich ist - niemals, weil Sie es einfach vorziehen, in C / C ++ zu programmieren.
Ich hatte den Eindruck, dass Sie die Sprache verwenden sollten, die Sie bevorzugen, solange sie zum Job passt. Könnte jemand erklären, warum es so dringend empfohlen wird, C / C ++ nicht für die Android-Entwicklung zu verwenden?
Original:
Ich werde anfangen, an mobilen Apps herumzubasteln, insbesondere an Android, dem Betriebssystem meines aktuellen Telefons, und ich habe mich gefragt, ob das Schreiben der App in C ++ (oder zumindest des Kerns, dann das Umschließen in Java) eine akzeptable Option ist.
Einige Hintergrundinformationen: Ich bin ein Informatik-Major, der 3 C ++ - Kurse (Intro, Intermediate, OOP und im Frühjahr einen STL-Kurs belegt) und nur 1 Java-Kurs (Intermediate) belegt hat. Aus diesem Grund bin ich mit C ++ besser vertraut und ziehe es Java vor. Auf der Android NDK-Seite bin ich auf Folgendes gestoßen :
Die Verwendung von nativem Code unter Android führt im Allgemeinen nicht zu einer spürbaren Leistungsverbesserung, erhöht jedoch immer die Komplexität Ihrer App. Im Allgemeinen sollten Sie das NDK nur verwenden, wenn es für Ihre App wesentlich ist - niemals, weil Sie es einfach vorziehen, in C / C ++ zu programmieren.
- Ich hatte den Eindruck, dass Sie die Sprache verwenden sollten, die zum Job passt, sowie eine, mit der Sie vertraut sind
- Möglicherweise möchte ich die Anwendung auf eine andere mobile Plattform wie iOS portieren, die C ++, aber nicht Java unterstützt
- Während Java eine Hochsprache ist und daher die Entwicklung beschleunigen sollte, würde die Entwicklung meiner Meinung nach langsamer sein, da ich fast alles neu lernen müsste (da ich nur eine Klasse in der Sprache belegt habe).
Jeder Rat wäre sehr dankbar.
ps: Viele der Antworten zu diesem Thema stammen aus früheren Jahren, und es gibt nur sehr wenige Folgeantworten, in denen das NDK erwähnt wird, das die Entwicklung vollständiger nativer Apps auf Android 2.3 und neuer ermöglicht.
Antworten:
Denk darüber so. Mit dem Java SDK können Sie eine voll funktionsfähige Anwendung erstellen, die 100% der APIs nutzt, die Entwicklern zur Verfügung stehen. Mit dem NDK können Sie nichts tun, was mit dem SDK nicht möglich ist (aus API-Sicht). Das NDK bietet lediglich eine höhere Leistung.
Schauen Sie es sich jetzt umgekehrt an. Wenn Sie eine Anwendung zu 100% in das NDK schreiben, können Sie weiterhin eine voll funktionsfähige Anwendung schreiben, aber die Anzahl der Framework-APIs, auf die Sie zugreifen können, ist begrenzt. Auf das gesamte Android-Framework kann nicht auf der nativen Ebene zugegriffen werden. Die meisten APIs sind nur Java. Das heißt nicht, dass alle APIs, die SIE möglicherweise benötigen, nicht im NDK verfügbar sind, aber bei weitem nicht ALLE APIs verfügbar sind.
Darüber hinaus führt das NDK plattformspezifischen Code ein, der die Größe Ihrer Distribution erweitert. Für jede Gerätearchitektur, die Sie unterstützen möchten, muss Ihr nativer Code in .so-Dateien (eine für armv5, armv7 und x86) integriert sein, die alle in derselben APK zusammengefasst sind. Durch diese Vervielfältigung von ausführbarem Code wird Ihre App dreimal so groß (dh eine "fette Binärdatei"), es sei denn, Sie übernehmen die Aufgabe, beim Verteilen der Anwendung separate APKs für jede Architektur zu erstellen. Der Bereitstellungsprozess wird also etwas aufwändiger, wenn Sie nicht möchten, dass Ihre APK erheblich an Größe zunimmt.
Auch wenn nichts davon Ihnen verbietet, das zu tun, was Sie wählen, wird darauf hingewiesen, warum Google Java als die "bevorzugte" Methode für den Großteil Ihres Codes und den Weg des geringsten Widerstands beschreibt. Ich hoffe, es gibt Aufschluss darüber, warum die Dokumentation so formuliert ist, wie sie ist.
quelle
.so
Dateien erklären ? Mir ist bekannt, dass für jede unterstützte Hardwarearchitektur eine separate Kompilierung von nativem Code erforderlich ist, damit jede.so
Datei separat kompiliert wird..so
für jede Architektur, die Sie unterstützen möchten (dies wird von Ihren Makefiles gesteuert), und alle Dateien werden im libs / -Verzeichnis Ihres APK abgelegt. Wenn die APK installiert ist, wird nur die entsprechende.so
ausgewählt, aber alle müssen noch in der ursprünglichen APK leben.Wenn Sie nur eine App in Ihrem Leben entwickeln möchten, verwenden Sie das NDK.
Wenn Sie die Android-Entwicklung mit der Absicht erlernen möchten, mehr als eine Anwendung während Ihres Lebens zu entwickeln - und sie alle ordnungsgemäß unterstützen möchten -, werden Sie auf lange Sicht sehr wahrscheinlich bessere Ergebnisse erzielen, wenn Sie Java und lernen Verwenden Sie stattdessen das Java SDK von Android.
quelle
Die Programmierer bei King verwenden C ++ für ihre Spielelogik. Und nach ihrem Umsatz scheinen sie gut abzuschneiden.
Nach meiner Erfahrung ist C ++ für Problemlöser und Java für Problemvermeider. Ich liebe beide Sprachen, aber C ++ ist sehr lohnend, wenn Sie guten Code schreiben. Es kann jedoch nur einige Momente dauern, bis die Zauberei da ist.
Sie können C ++ auch für Datenwissenschaftler empfehlen, die ihre Arbeit normalerweise beispielsweise von Python oder R erledigen lassen. C ++ kann das Gleiche mit einer guten oder nicht besseren Leistung tun, aber es braucht nur ein Genie in der Sprache. Deshalb würde ich nie nicht C ++ empfehlen der, die es tun will - ich würde nur ein Heads - up auf die Behandlung geben , dass sie in für.
quelle
Ich fand diesen interessanten Artikel von: http://betanews.com/2014/07/22/why-c-is-the-perfect-choice-for-modern-app-development/
C ++ wurde speziell für die Plattformunabhängigkeit entwickelt und ist als solches auf jedem einzelnen Betriebssystem vorhanden. Ein typischer mobiler Benutzer weiß möglicherweise, dass Android-Apps in Objective-C Java- und iOS-Apps sind. Viele wissen jedoch nicht, dass sich auf Ihren Geräten mehr C / C ++ - Code im Speicher befindet als alles andere. C / C ++ steuert einen Großteil der Technologie kleiner Geräte (wie des Kernels, der mit der Hardware interagiert, sowie typischer Laufzeitbibliotheken) und der Telekommunikationsnetzwerke, die diese Geräte ermöglichen. Wichtiger für ein Entwicklungsteam ist, dass es C / C ++ - Schnittstellen und -Bibliotheken für alles gibt, was Sie auf jedem Gerät und jeder Plattform tun müssen. Das Android NDK-Toolset ist ein hervorragendes Beispiel für die vollständige C / C ++ - Unterstützung, die ursprünglich für Spieleentwicklungsteams hinzugefügt wurde, um die bestmögliche Leistung des Geräts zu erzielen, indem Java und die Android Java-Laufzeit Dalvik, auf der die virtuelle Maschine verwendet wird, vermieden werden Android Java Code wird am ausgeführt. Es wurde regelmäßig verbessert, um jeden Android-Dienst zu aktivieren.
quelle
Ich würde sagen, verwenden Sie Java für die Haupt-App. Wenn Sie jedoch C ++ - Code haben, den Sie portieren müssen, oder eine Bibliothek, die Sie benötigen und die effizient in C ++ implementiert ist, verwenden Sie ndk für diese Bits
quelle
Ich sehe keinen Grund, C ++ nicht für die normale Android-Entwicklung zu verwenden. Wenn Sie umfangreiche Erfahrung in der Arbeit mit C ++ und mit komplexen Betriebssystemen wie Windows oder einem anderen haben, können Sie Android schnell verstehen und sind nicht so kompliziert wie das andere Betriebssysteme sind. Während Sie Java lernen oder ohne zu lernen arbeiten, wäre es frustrierender und komplexer!
quelle
Die wichtigste Überlegung ist, dass der kompilierte Java-Code auf allen Android-Geräten unverändert ausgeführt wird, während der native Code für alle Zielplattformen kompiliert werden muss.
Die allgemeine Absicht für Java und Android ist, dass Sie die Mehrheit, wenn nicht die gesamte App in Java schreiben und native Dinge nur verwenden, wenn es keine andere Option gibt. Alles, was mit dem Schreiben der App zu tun hat, eignet sich daher für Java.
Wenn Sie in Java schreiben, ersparen Sie sich viel Ärger bei der Überbrückung der nativen und der Java-Welt.
Sie werden sich auch einen großen Gefallen tun, wenn Sie den Sprung wagen und Java lernen. Ihre Android-App ist nicht nur die bessere für Sie, sondern Sie werden sich auch einem deutlich anderen Ansatz für OO aussetzen und ein besserer Programmierer dafür sein.
Hinzu kommt, dass Sie eine ganze Reihe von Sicherheitsrisiken umgehen, indem Sie in Java schreiben.
In meinen Augen ist dies ein Kinderspiel - verwenden Sie Java.
quelle