Ist es wichtig, C / C ++ für die Android-Entwicklung zu kennen?

8

Ist es möglich, nur Java (ohne C ++ / NDK) zum Erstellen guter, schneller und schöner Android-Apps (einschließlich 3D-Entwicklung) zu verwenden?

Wenn ich nach Stellenanforderungen für Android-Entwickler (offene Stellen) suche, sehe ich, dass Kenntnisse in C / C ++ / NDK sehr wichtig sind. Einige Unternehmen müssen ihre Testaufgaben sogar nur mit C ++ (OpenGL) erstellen.

Mein Titel
quelle
Warum willst du etwas nicht wissen ? Da es zumindest nützlich ist , sollten Sie ein paar Tage verbringen und es lernen.
SK-Logik
Haben Sie jemals versucht, OpenGL in Java zu verwenden? Es ist ein wahrer Schmerz zu tun.
Sulthan

Antworten:

6

In den meisten Fällen benötigen Sie kein c / c ++, um für Android zu entwickeln.

Laut Android NDK Übersicht

II. Android NDK Nicht-Ziele:

Das NDK ist keine gute Möglichkeit, generischen nativen Code zu schreiben, der auf Android-Geräten ausgeführt wird. Insbesondere sollten Ihre Anwendungen weiterhin in der Programmiersprache Java geschrieben sein, Android-Systemereignisse angemessen behandeln, um das Dialogfeld "Anwendung reagiert nicht" zu vermeiden, oder den Lebenszyklus der Android-Anwendung behandeln.

C / C ++ ist jedoch wichtig, wenn Sie vorhandene C / C ++ - Bibliotheken verwenden möchten.

Beispiel: Android hat keinen eingebauten MP3-Encoder, aber Sie können die OpenSource-Lame-Bibliothek verwenden .

Gleiches gilt möglicherweise für die 3D-Bildverarbeitung

k3b
quelle
4
Das ist nur der Hype von Google - alle schnellen und ausgefallenen Spiele, die ich auf meinem Handy habe, sind mit dem NDK erstellt - überzeugen Sie sich selbst, holen Sie sich Addons Detector (ursprünglich zum Anzeigen zwielichtiger Werbenetzwerke) und lesen Sie den Abschnitt zum Entwickler-Toolkit. Sie werden sehen, dass all die guten Sachen mit dem NDK erstellt wurden. Ob das daran liegt, dass Java scheiße ist oder weil die besten Entwickler C / C ++ verwenden, ist umstritten.
Gbjbaanb
2
@gbjbaanb: Spiele sind ein Sonderfall (sowohl auf dem Desktop als auch auf mobilen Plattformen). Zugegeben, auf mobilen Plattformen sind sie ein weiter verbreiteter Sonderfall ;-)
Joachim Sauer
@gbjbaanb: Interessant zu hören, dass die meisten schnellen Spiele in c / c ++ entwickelt werden. Sind diese Spiele plattformübergreifend? (dh existieren für Android und iPhone?)
k3b
1
Die einzige Sprache, in der tragbare Anwendungen geschrieben werden können, ist noch C ++. Das ist einfach eine Tatsache. Einige mobile Plattformen haben Java, andere haben CLR, aber keine ist vernünftigerweise für alle verfügbar. Daher wird jede komplexe Anwendung einen C ++ - Kern haben. Darüber hinaus verfügt es möglicherweise über eine Java-Benutzeroberfläche für Android.
Jan Hudec
3

Es gibt viele Anwendungen in Java. Die Entwicklung in Java ist schneller und die Geräte sind heutzutage so leistungsfähig, dass die Effizienz keine Rolle spielt, wenn die Anwendung hauptsächlich eine coole Benutzeroberfläche für einige Daten ist, die aus dem Netz gezogen werden. Welches ist die Mehrheit der Anwendungen da draußen. So können Sie auch ohne C ++ - Kenntnisse einen Job in der Android-Anwendungsentwicklung bekommen.

Es gibt jedoch mehrere sehr gute Gründe, sich für C ++ für komplexere Anwendungen zu entscheiden:

  1. Bis heute ist C ++ die einzige Sprache, die auf alle Plattformen portierbar ist. Einige mobile Plattformen verfügen über Java, andere über CLI / CLR (.NET), aber keines ist für alle verfügbar. Das Schreiben einer tragbaren Anwendung in C ++ ist viel Arbeit, aber machbar und anhand vieler Beispiele bewiesen.
  2. In Java ist die Ineffizienz des Speichers in die Sprache integriert. Wenn Sie sich verschiedene Vergleiche ansehen, benötigt eine ähnliche Aufgabe in Java normalerweise 3-10 Mal mehr Speicher als in C ++. Wenn Sie also etwas tun, das viele Daten im Speicher benötigt, ist Java keine gute Wahl (beachten Sie, dass die Situation mit CLI / CLR viel besser ist).
  3. Dalvik, die JVM auf Android, liegt weit hinter den besten JVMs wie HotSpot zurück. Wenn Sie also etwas tun, das wirklich rohe Rechenleistung benötigt, ist Java unter Android keine gute Wahl. Es gibt jedoch nur sehr wenige Anwendungen, die tatsächlich so viel Strom benötigen. Die meisten Anwendungen sitzen einfach da und drehen 99% der Zeit mit den Daumen, bis der Benutzer auf etwas klickt. Für diese Art von Anwendungen ist Java in Ordnung (für die meisten von ihnen wäre sogar Python in Ordnung).

Ich denke, der erste Grund ist bei weitem der wichtigste.

Jan Hudec
quelle
1
Korrigieren Sie mich, wenn ich falsch liege, aber müssen nicht einmal NDK-Apps nach Dalvik kompiliert werden, um überhaupt auf Android-Geräten ausgeführt zu werden?
Michael K
@ MichaelK: Nun ja und nein. Der native Code ist nativer Maschinencode, nicht Dalvik. Aber es braucht ein bisschen Java-Kleber und Dalvik wird dafür geladen und führt diesen Kleber aus (und der native Teil wird als gemeinsam genutzte Bibliothek in ihn geladen). Das neueste NDK hat den Bedarf an Kleber stark reduziert, aber ich bin mir nicht sicher, ob dies vollständig ist.
Jan Hudec
2

Dies hängt davon ab, wie "nativ" Ihre Apps sein sollen. Es scheint, dass viele Apps vorerst nativ sein müssen, um die vollständige Ux / UI zu bieten, die Endbenutzer benötigen. Wird die HTML5- und Java-basierte API-Abstraktion gut genug sein, um dies in Zukunft nicht mehr zu benötigen? Wer weiß :-)

Martijn Verburg
quelle
1

Es funktioniert perfekt beim Ändern von C / C ++ - Code, aber wenn Java-Code geändert wird, wird es nicht automatisch neu erstellt. Java-Änderungen werden nicht an den Emulator oder das Gerät gesendet.

Brian Parker
quelle