2012-04-09 10 views
2

Ich kann jede C/C++ - Anwendung kompilieren, Linux-Bibliotheken statisch verknüpfen und auf Android ausführen.Warum war die Notwendigkeit einer Android-ndk dann? Android-ndk beschränkt uns auf bionic, die eine kleine Untergruppe von gnu libc hat Ist es nicht eine bessere Idee, sofort Anwendungen kompilieren und sie über die Android-Shell ausführen zu lassen? Gibt es irgendwelche Einschränkungen bei Cross-Compiling, die ich nicht sehen kann? Diese URL: Can Linux apps be run in Android? beantwortet meine Frage zu einem gewissen Grad, aber schließlich lässt mich verwirrt und ohne Klarheit.Android-Ndk vs Cross-Compile? Beides funktioniert, was brauchte der Android NDK dann?

Antwort

0

Wie in dem Link http://developer.android.com/sdk/ndk/index.html erwähnt, ist NDK ein Begleiter für die Entwicklung von App-Dateien, um leistungsempfindlichen nativen Code zu erstellen. NDK stellt einige der nativen Implementierungen von Android zur Verfügung, die in den allgemeinen Linux-Umgebungen nicht zu finden sind. Einige von ihnen enthalten die Android/Bitmap, Android/nativeWindow usw. Mit diesen Android-Natives kann die Anwendung CPU-intensive Prozesse wie Komprimierung oder Dekomprimierung von Bildern beschleunigen.

Obwohl die extern kompilierten ausführbaren Dateien unter Android ausgeführt werden können, gibt es keine Garantie dafür, dass die Versionen der Standardbibliotheken dieselben sind. NDK bietet eine einfachere und Android-kompatible Toolchain und andere Ressourcen, mit denen Anwendungsentwickler viel einfacher umgehen können, als einen kompatiblen Cross-Compiler für ihren Anwendungsfall zu finden.

+0

Dank Deepak für Ihre Antwort, die Antwort war helpful.But ich nicht verstanden, was Sie unter "Selbst gemeint obwohl Die extern kompilierten ausführbaren Dateien können in Android ausgeführt werden. Es gibt keine Garantie, dass die Versionen der Standard-Bibliotheksimplementierungen die gleichen sind. "Da die Anwendung statisch verknüpft ist, spielen die Bibliotheksversionen eine Rolle? – dhara

+0

Sieht so aus, als hätte ich diesen statischen Teil nicht gelesen! – Deepak

+1

Ok, ich denke dann ist mein Verständnis ziemlich klar. NDK bietet direkte und bessere/schnellere Schnittstellen als die Verwendung einer gebrauchten Linux-Implementierung. Außerdem ist es für einen Entwickler einfacher, den ndk zu verwenden, um den Cross-Compiler zu finden und zu konfigurieren.Danke, für die tolle Antwort :) – dhara

1

Ich denke, das für Android-NDK

genug ist, das Android NDK ein Begleiter Werkzeug zum Android SDK ist, dass Sie leistungskritische Teile Ihrer Anwendungen in nativen Code ermöglicht zu bauen. Es bietet Header und Bibliotheken, mit denen Sie Aktivitäten erstellen, Benutzereingaben verarbeiten, Hardware-Sensoren verwenden, auf Anwendungsressourcen zugreifen und vieles mehr, wenn Sie in C oder C++ programmieren. Wenn Sie nativen Code schreiben, werden Ihre Anwendungen weiterhin in eine .apk-Datei gepackt, und sie werden weiterhin auf dem Gerät in einer virtuellen Maschine ausgeführt. Das grundlegende Android-Anwendungsmodell ändert sich nicht.

Das NDK bietet:

  • Eine Reihe von Tools und bauen verwendeten Dateien native Code-Bibliotheken von C und C++ Quellen erzeugen

  • Ein Weg, um die entsprechenden nativen Bibliotheken einbetten in eine Anwendung Paketdatei (.apk), die auf Android-Geräten bereitgestellt werden kann

  • Eine Reihe von nativen System-Header und Bibliotheken, die in allen zukünftigen Versionen der Android-Plattform unterstützt werden, beginnend mit Android 1.5. Anwendungen, die native Aktivitäten verwenden, müssen unter Android 2.3 oder höher ausgeführt werden.

Diese Sache, die Sie nicht in anderer Querübersetzbarkeit mit Arm Werkzeugkette finden ..

+0

Vielen Dank für Ihre Antwort. Nach meinem Verständnis benötigen wir für eine eigenständige Shell-Anwendung u. U. keine ndk und eine Cross-Kompilierung könnte funktionieren, aber für eine Android-Anwendung mit GUI benötigen wir sie möglicherweise, um vorhandenen C/C++ - Code wiederzuverwenden oder um die Leistung zu verbessern. – dhara