Anwendungen in C oder C ++ für Android schreiben? [geschlossen]
286
Ich versuche, ein Spiel für Android zu entwickeln / zu portieren, aber es ist in C und Android unterstützt Java, aber ich bin sicher, dass es eine Möglichkeit geben muss, eine C-App dort zu installieren. Weiß jemand, wie dies erreicht werden kann?
Das G1 erlaubt standardmäßig keinen Root-Zugriff, und es gibt viele Einschränkungen hinsichtlich der Ausführung außerhalb der Android-Umgebung. Ich hätte nicht viel Hoffnung, einen Weg zu finden, um nativen Code innerhalb von Android auszuführen.
Cogsy
2
Aber ich habe DOOM für Android vom Marktplatz heruntergeladen. Also sollte es machbar sein
für .net / c # Code und Android überprüfen Sie xamarin
bbqchickenrobot
41
Das Android NDK ist ein Toolset, mit dem Sie Teile Ihrer App in nativem Code mithilfe von Sprachen wie C und C ++ implementieren können. Für bestimmte Arten von Apps kann dies Ihnen helfen, in diesen Sprachen geschriebene Codebibliotheken wiederzuverwenden.
Weitere Informationen zum Einstieg in die native Entwicklung finden Sie unter diesem Link .
Installieren Sie Google Android NDK. Es enthält Bibliotheken, Header, Makfile-Beispiele und die gcc-Toolchain
Erstellen Sie eine ausführbare Datei aus Ihrem C-Code für ARM, optimieren Sie sie und verknüpfen Sie sie bei Bedarf mit den bereitgestellten Bibliotheken
Stellen Sie über die bereitgestellte ADB-Schnittstelle eine Verbindung zu einem Telefon her und testen Sie Ihre ausführbare Datei
Wenn Sie eine App verkaufen möchten:
Erstellen Sie eine Bibliothek aus Ihrem C-Code
Erstellen Sie einfachen Java-Code, der diese Bibliothek verwendet
Betten Sie diese Bibliothek in die Anwendungspaketdatei ein
Ich bin nicht sicher, wo ich einen einfachen Download dafür bekommen soll, aber ich habe gehört, dass Sie eine Kopie des NDK aus dem Git-Repository von Google unter dem Donut-Zweig erhalten können.
Die offizielle Position scheint zu sein, dass dies nicht etwas ist, was Sie jemals "tun wollen". Siehe diesen Thread in der Liste der Android-Entwickler. Google stellt sich vor, dass Android auf verschiedenen Geräten (CPUs, Displays usw.) ausgeführt wird. Der beste Weg, um die Entwicklung zu ermöglichen, ist daher die Verwendung von (portablem) verwaltetem Code, der auf die Dalvik-VM abzielt. Aus diesem Grund unterstützt das Android SDK C / C ++ nicht.
Android enthält eine Reihe von C / C ++ - Bibliotheken, die von verschiedenen Komponenten des Android-Systems verwendet werden. Diese Funktionen stehen Entwicklern über das Android-Anwendungsframework zur Verfügung.
Das verwaltete Anwendungsframework scheint über diesen Bibliotheken zu liegen. Auf dieser Seite werden die C / C ++ - Bibliotheken aufgelistet: Standard-C-Bibliothek, Medien, 3D, SQL Lite und andere.
Sie benötigen also lediglich eine Compilerkette, die C / C ++ auf die entsprechende CPU kompiliert (ARM im Fall des G1). Einige kurze Anweisungen dazu finden Sie hier .
Was ich nicht weiß, ist, wo Beschreibungen der APIs zu finden sind, die diese Bibliotheken bereitstellen. Ich würde vermuten, dass irgendwo im SDK Header-Dateien vergraben sind, aber die Dokumentation ist möglicherweise lückenhaft / fehlt. Aber ich denke es kann getan werden!
Hoffe das ist nützlich. Ich habe keine nativen Android-Apps geschrieben - nur ein paar einfach verwaltete.
Ich gehe davon aus, dass diese Methode vom NDK überholt wird, aber möglicherweise nicht, wenn einige Netzwerke oder ähnliches es den Benutzern nicht erlauben, ihre Telefone zu aktualisieren.
+1 für eine Alternative zum NDK, obwohl das NDK es veraltet macht.
Tobsen
Ist nestedvm nicht mit mehr Geräten kompatibel?
Charo
8
Google hat bereits Google I / O 2011 gestartet : Bringen Sie C- und C ++ - Spiele in die Android- Sitzung, die unter http://www.youtube.com/watch?v=5yorhsSPFG4 verfügbar ist
Das ist gut zu verstehen, die Verwendung von NDK zum Schreiben von Anwendungen in c und c ++ für Android.
Wenn Sie nur ein konsolenbasiertes natives Spiel kompilieren und auf Android ausführen möchten, enthält dieser Artikel drei Methoden für dasselbe.
1: Statische Kompilierung mit einer eigenständigen Toolchain
2: Cross-Kompilierung mit der Toolchain von Android NDK
Link ist 404 nicht gefunden. Es ist immer eine gute Idee, Inhalte aus dem ursprünglichen Beitrag in die Antwort einzufügen, falls der Websitebesitzer die Lotterie gewinnt, sich von seiner Frau scheiden lässt und auf die Bahamas zieht.
Zuzlx
7
Wenn man das betrachtet, scheint es möglich zu sein:
"Die Tatsache, dass nur Java-Sprache unterstützt wird, bedeutet nicht, dass Sie keine Anwendungen in anderen Sprachen entwickeln können. Dies wurde von vielen Entwicklern, Hackern und Experten für die Anwendungsentwicklung für Mobilgeräte bewiesen. Die Mitarbeiter von Elements Interactive BV, dem Unternehmen hinter Edgelib Bibliothek, es ist gelungen, native C ++ - Anwendungen auf der Android-Plattform auszuführen, auch wenn derzeit noch viele Probleme bei Anzeige und Sound auftreten… usw. Dazu gehören das S-Tris2-Spiel und eine 3D-Animationsdemo von Edgelib. "
Bitte beachten Sie, dass Sie mit dem NDK keine nativen Anwendungen entwickeln können. Die primäre Laufzeit von Android bleibt die virtuelle Dalvik-Maschine.
Ich kenne kein Tutorial, aber ein gutes Entwicklungswerkzeug: Airplay SDK von Ideaworks Labs. (Kürzlich umbenannt in " Marmelade ") Mit C / C ++ können Sie Apps für Windows Mobile, iPhones und Android erstellen. Die einzige Komponente, die mir nicht gefallen hat, war der GUI-Composer - ein fehlerhafter, aber Sie können ihn immer durch den Notepad ersetzen.
Sie können c4droid herunterladen und dann das GCC-Plugin installieren und auf Ihrer SD installieren. Von der Shell gehe ich einfach zu dem Verzeichnis, in dem sich die GCC-Binärdatei befindet, und rufe sie dann auf, um eine On-Board-ausführbare Datei zu erstellen.
Native C / c ++ - Dateien libstdc ++. * Von Ihrem Ubuntu sind x86- (oder x86_64-) Binärdateien, Android-Geräte und -Emulatoren jedoch ARM. Dies funktioniert natürlich sowieso nicht, selbst wenn Sie den richtigen Sonamen einstellen. Dies ist ein sehr naiver Weg, der nirgendwohin führt. Android unterstützt C ++ nur sehr eingeschränkt, dh es gibt keine Ausnahmen, Standard-C ++ - Bibliothek (einschließlich STL) und RTTI. Wenn Sie solche Funktionen benötigen, verwenden Sie meine benutzerdefinierte NDK-Distribution von
Es ist geplant, C / C ++ - Bibliotheken in der nächsten SDK-Version von Android (Codename Eclair?) Zuzulassen. Bisher ist dies über das Android Java SDK nicht möglich. Sie können jedoch das RIESIGE Open-Source-Projekt herunterladen, Ihre eigenen Bibliotheken rollen und dann Ihr eigenes Gerät flashen ... aber jeder, der Ihre Bibliothek verwenden möchte, muss auch Ihr benutzerdefiniertes Build flashen.
@ Backslash17: Wenn Sie den Artikel und den folgenden Link mit den Installationsanweisungen durchsehen, muss das Unternehmen lediglich eine selbst kompilierte ausführbare Datei auf dem Emulator starten und dabei das Android-Framework umgehen. Sobald Sie den Emulator haben, können Sie Telnet und eine Linux-Shell haben. Das Ausführen eines Linux-Programms dort ist natürlich trivial. Dies funktioniert jedoch nicht für Telefone ohne Jailbreak (auch bekannt als Root-Zugriff) und ist auf dem Markt nicht verfügbar.
Solange Google keine anderen Möglichkeiten eröffnet oder jemand einen benutzerdefinierten Compiler schreibt, der Sprache X in Dalvik-Bytecode kompiliert (Dalvik ist die VM, auf der Android-Programme ausgeführt werden), können Sie keinen nativen Code schreiben.
Antworten:
Wenn Sie über Google darauf zugreifen, beachten Sie, dass Android ab SDK 1.6 jetzt ein offizielles natives SDK hat.
Sie können das Android NDK (Native Development Kit) hier herunterladen: https://developer.android.com/ndk/downloads/index.html
Es gibt auch einen Blog-Beitrag über das NDK:
http://android-developers.blogspot.com/2009/06/introducing-android-15-ndk-release-1.html
quelle
Das Android NDK ist ein Toolset, mit dem Sie Teile Ihrer App in nativem Code mithilfe von Sprachen wie C und C ++ implementieren können. Für bestimmte Arten von Apps kann dies Ihnen helfen, in diesen Sprachen geschriebene Codebibliotheken wiederzuverwenden.
Weitere Informationen zum Einstieg in die native Entwicklung finden Sie unter diesem Link .
Beispielanwendungen finden Sie hier .
quelle
Normalerweise müssen Sie:
Wenn Sie eine App verkaufen möchten:
quelle
Google hat ein Native Development Kit (NDK) veröffentlicht (laut http://www.youtube.com/watch?v=Z5whfaLH1-E um 00:07:30).
Hoffentlich werden die Informationen auf der Google Groups-Seite ( http://groups.google.com/group/android-ndk ) aktualisiert , da sie noch nicht veröffentlicht wurden.
Ich bin nicht sicher, wo ich einen einfachen Download dafür bekommen soll, aber ich habe gehört, dass Sie eine Kopie des NDK aus dem Git-Repository von Google unter dem Donut-Zweig erhalten können.
quelle
Die offizielle Position scheint zu sein, dass dies nicht etwas ist, was Sie jemals "tun wollen". Siehe diesen Thread in der Liste der Android-Entwickler. Google stellt sich vor, dass Android auf verschiedenen Geräten (CPUs, Displays usw.) ausgeführt wird. Der beste Weg, um die Entwicklung zu ermöglichen, ist daher die Verwendung von (portablem) verwaltetem Code, der auf die Dalvik-VM abzielt. Aus diesem Grund unterstützt das Android SDK C / C ++ nicht.
ABER werfen Sie einen Blick auf diese Seite :
Das verwaltete Anwendungsframework scheint über diesen Bibliotheken zu liegen. Auf dieser Seite werden die C / C ++ - Bibliotheken aufgelistet: Standard-C-Bibliothek, Medien, 3D, SQL Lite und andere.
Sie benötigen also lediglich eine Compilerkette, die C / C ++ auf die entsprechende CPU kompiliert (ARM im Fall des G1). Einige kurze Anweisungen dazu finden Sie hier .
Was ich nicht weiß, ist, wo Beschreibungen der APIs zu finden sind, die diese Bibliotheken bereitstellen. Ich würde vermuten, dass irgendwo im SDK Header-Dateien vergraben sind, aber die Dokumentation ist möglicherweise lückenhaft / fehlt. Aber ich denke es kann getan werden!
Hoffe das ist nützlich. Ich habe keine nativen Android-Apps geschrieben - nur ein paar einfach verwaltete.
Andy
quelle
Sie können nestedvm verwenden , um C (oder andere GCC-Sprachen) in Java-Bytecode zu übersetzen, und diesen als Grundlage für Ihren Port verwenden. Sehen Sie sich zum Beispiel den Android-Port der tragbaren Puzzlesammlung von Simon Tathams an .
Ich gehe davon aus, dass diese Methode vom NDK überholt wird, aber möglicherweise nicht, wenn einige Netzwerke oder ähnliches es den Benutzern nicht erlauben, ihre Telefone zu aktualisieren.
quelle
Google hat bereits Google I / O 2011 gestartet : Bringen Sie C- und C ++ - Spiele in die Android- Sitzung, die unter http://www.youtube.com/watch?v=5yorhsSPFG4 verfügbar ist
Das ist gut zu verstehen, die Verwendung von NDK zum Schreiben von Anwendungen in c und c ++ für Android.
Wenn Sie nur ein konsolenbasiertes natives Spiel kompilieren und auf Android ausführen möchten, enthält dieser Artikel drei Methoden für dasselbe.
1: Statische Kompilierung mit einer eigenständigen Toolchain
2: Cross-Kompilierung mit der Toolchain von Android NDK
3: Cross-Kompilierung mit AOSP-Quellcode
quelle
Vielleicht suchen Sie das?
http://www.mosync.com/
Es ist eine mittlere Ebene für die Entwicklung für mehrere mobile Plattformen mit C ++.
quelle
Wenn man das betrachtet, scheint es möglich zu sein:
quelle
Seit 2009 gibt es eine Entwicklung in dieser Angelegenheit.
Necessitas - Qt (C ++ Framework) für Android
Erste Schritte Video .
quelle
Werfen Sie einen Blick auf die Google Ndk-Gruppe , die vielversprechend aussieht. Die erste Version des NDK wird in 1H2009 verfügbar sein.
Update: Und es wird veröffentlicht http://android-developers.blogspot.com/2009/06/introducing-android-15-ndk-release-1.html
quelle
Ich bin nicht sicher, ob das NDK die offizielle Java-API vollständig abdeckt.
Von http://developer.android.com/sdk/ndk/index.html#overview :
quelle
Google hat gerade das NDK veröffentlicht, das genau das ermöglicht.
http://feedproxy.google.com/~r/blogspot/hsDu/~3/2foWz7hwFtE/introducing-android-15-ndk-release-1.html
Es kann hier gefunden werden: http://developer.android.com/sdk/ndk/1.5_r1/index.html
quelle
Dieser Blog-Beitrag kann ein guter Anfang sein: http://benno.id.au/blog/2007/11/13/android-native-apps Leider werden viele wichtige Dinge "dem Leser als Übung überlassen".
quelle
Ich kenne kein Tutorial, aber ein gutes Entwicklungswerkzeug: Airplay SDK von Ideaworks Labs. (Kürzlich umbenannt in " Marmelade ") Mit C / C ++ können Sie Apps für Windows Mobile, iPhones und Android erstellen. Die einzige Komponente, die mir nicht gefallen hat, war der GUI-Composer - ein fehlerhafter, aber Sie können ihn immer durch den Notepad ersetzen.
quelle
Sie können c4droid herunterladen und dann das GCC-Plugin installieren und auf Ihrer SD installieren. Von der Shell gehe ich einfach zu dem Verzeichnis, in dem sich die GCC-Binärdatei befindet, und rufe sie dann auf, um eine On-Board-ausführbare Datei zu erstellen.
find / -name gcc
/mnt/sdcard/Android/data/com.n0n3m4.droidc/files/gcc/bin/arm-linux-androideabi-gcc
cat> test.c
./arm-linux-androideabi-gcc test.c -o test
./Prüfung
Hallo Arm!
quelle
Diese drei Schritte sind gut zu haben und in diesem Beitrag zu speichern.
1) Wie man nativen C-Code auf Android portiert
2) http://www.integratingstuff.com/2010/12/12/calling-native-c-code-through-jni-in-android-applications/
3) http://mindtherobot.com/blog/452/android-beginners-ndk-setup-step-by-step/
quelle
Native C / c ++ - Dateien libstdc ++. * Von Ihrem Ubuntu sind x86- (oder x86_64-) Binärdateien, Android-Geräte und -Emulatoren jedoch ARM. Dies funktioniert natürlich sowieso nicht, selbst wenn Sie den richtigen Sonamen einstellen. Dies ist ein sehr naiver Weg, der nirgendwohin führt. Android unterstützt C ++ nur sehr eingeschränkt, dh es gibt keine Ausnahmen, Standard-C ++ - Bibliothek (einschließlich STL) und RTTI. Wenn Sie solche Funktionen benötigen, verwenden Sie meine benutzerdefinierte NDK-Distribution von
http://crystax.net/android/ndk.php - unterstützt die oben aufgeführten vollständigen C ++ - Funktionen.
Warum gibt es einen Fehler: undefinierter Verweis auf den Linkfehler '__cxa_end_cleanup'. Android stlport
Zeit. Weil es keinen Link zu libstdc ++ gibt. A. Also falsch.
Da eine statische Bibliothek verwendet wird, muss die vollständige libstdc ++ verknüpft werden. Eine Kanne
http://crystax.net/android/ndk.php hier, um das Paket herunterzuladen
Quellen \ cxx-stl \ gnu-libstdc + + \ libs \ armeabi Verzeichnis.
Android auf seiner eigenen libstdc ++ Unterstützung ist begrenzt, es muss mit einer vollständigen libstdc ++ verknüpft werden. A der Job.
Datei in Android.mk hinzufügen
LOCAL_LDFLAGS = $ (LOCAL_PATH) / libs / libcurl.a \
Und
LOCAL_CPPFLAGS + =-lstdc + +-fexceptions
kann kompiliert werdenquelle
Es ist geplant, C / C ++ - Bibliotheken in der nächsten SDK-Version von Android (Codename Eclair?) Zuzulassen. Bisher ist dies über das Android Java SDK nicht möglich. Sie können jedoch das RIESIGE Open-Source-Projekt herunterladen, Ihre eigenen Bibliotheken rollen und dann Ihr eigenes Gerät flashen ... aber jeder, der Ihre Bibliothek verwenden möchte, muss auch Ihr benutzerdefiniertes Build flashen.
quelle
Kurze Antwort: Das kannst du nicht.
@ Backslash17: Wenn Sie den Artikel und den folgenden Link mit den Installationsanweisungen durchsehen, muss das Unternehmen lediglich eine selbst kompilierte ausführbare Datei auf dem Emulator starten und dabei das Android-Framework umgehen. Sobald Sie den Emulator haben, können Sie Telnet und eine Linux-Shell haben. Das Ausführen eines Linux-Programms dort ist natürlich trivial. Dies funktioniert jedoch nicht für Telefone ohne Jailbreak (auch bekannt als Root-Zugriff) und ist auf dem Markt nicht verfügbar.
Solange Google keine anderen Möglichkeiten eröffnet oder jemand einen benutzerdefinierten Compiler schreibt, der Sprache X in Dalvik-Bytecode kompiliert (Dalvik ist die VM, auf der Android-Programme ausgeführt werden), können Sie keinen nativen Code schreiben.
quelle