Schreibe Anwendungen in C oder C ++ für Android?

Ich versuche, ein Spiel zu Android zu entwickeln / 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 bekommen, jemand weiß von einem guten Tutorial zu diesem Thema ?

Vielen Dank!

Beachten Sie, dass ab SDK 1.6 Android jetzt ein offizielles natives SDK enthält.

Sie können das Android NDK (Native Development Kit) von hier herunterladen: https://developer.android.com/ndk/downloads/index.html

Außerdem gibt es einen Blogbeitrag über den NDK:
http://android-developers.blogspot.com/2009/06/introducing-android-15-ndk-release-1.html

Das Android NDK ist ein Toolset, mit dem Sie Teile Ihrer App in nativem Code unter Verwendung von Sprachen wie C und C ++ implementieren können. Bei bestimmten Arten von Apps können Sie dadurch die in diesen Sprachen geschriebenen Code-Bibliotheken wiederverwenden.

Weitere Informationen zum Einstieg in die native Entwicklung finden Sie unter diesem Link .

Beispielanwendungen finden Sie hier .

Normalerweise müssen Sie:

  1. Installieren Sie Google Android NDK. Es enthält Bibliotheken, Header, Makfile-Beispiele und GCC-Toolchain
  2. Erstellen Sie eine ausführbare Datei aus Ihrem C-Code für ARM, optimieren Sie sie und verknüpfen Sie sie bei Bedarf mit bereitgestellten Bibliotheken
  3. Verbinden Sie sich über die mitgelieferte adb-Schnittstelle mit einem Telefon und testen Sie Ihre ausführbare Datei

Wenn Sie eine App verkaufen möchten:

  1. Erstellen Sie eine Bibliothek aus Ihrem C-Code
  2. Erstellen Sie einfachen Java-Code, der diese Bibliothek verwendet
  3. Betten Sie diese Bibliothek in die Anwendungspaketdatei ein
  4. Testen Sie Ihre App
  5. Verkaufe es oder verteile es kostenlos

Google hat ein Native Development Kit (NDK) veröffentlicht ( 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 wurde.

Ich bin mir nicht sicher, wo ich einen einfachen Download dafür finden könnte, aber ich habe gehört, dass Sie eine Kopie des NDK aus dem Git-Repository von Google unter der Donut-Filiale erhalten können.

Die offizielle Position scheint zu sein, dass dies nicht etwas ist, was Sie jemals “tun wollen”. Sieh dir diesen Thread in der Android-Entwicklerliste an. Google sieht Android auf einer Vielzahl von verschiedenen Geräten (CPUs, Displays, etc.) laufen. Der beste Weg, die Entwicklung zu ermöglichen, besteht daher in der Verwendung von (portablem) verwaltetem Code, der auf die Dalvik-VM abzielt. Aus diesem Grund unterstützt das Android SDK kein C / C ++.

ABER, casting Sie einen Blick auf diese Seite :

Android enthält eine Reihe von C / C ++ – Bibliotheken, die von verschiedenen Komponenten des Android-Systems verwendet werden. Diese functionen werden Entwicklern über das Android-Anwendungsframework zur Verfügung gestellt.

Das verwaltete Anwendungsframework scheint auf diese Bibliotheken überlagert zu sein. Die Seite wird fortgesetzt, um die C / C ++ – Bibliotheken aufzulisten: Standard-C-Bibliothek, Medien, 3D, SQL-Lite und andere.

Alles, was Sie brauchen, ist eine Compiler-Kette, die C / C ++ zur entsprechenden CPU kompiliert (ARM, im Falle des G1). Einige kurze statementen dazu finden Sie hier .

Was ich nicht weiß, ist, wo man Beschreibungen der APIs finden kann, die diese Bibliotheken bereitstellen. Ich vermute, dass Header-Dateien irgendwo im SDK vergraben sein können, aber die Dokumentation kann skizzenhaft sein / fehlen. Aber ich denke, es kann getan werden!

Hoffe das ist nützlich. Für die Aufzeichnung habe ich keine nativen Android-Apps geschrieben – nur ein paar einfach verwaltete.

Andy

Sie können nestedvm verwenden , um C (oder andere GCC-Sprachen) in Java-Bytecode zu übersetzen und dies als Grundlage für Ihren Port zu verwenden. Sehen Sie zum Beispiel den Android-Port von Simon Tathams portable Puzzle-Sammlung .

Ich erwarte, dass diese Methode vom NDK veraltet wird, aber es ist möglicherweise nicht in, wenn einige Netzwerke oder etwas Menschen nicht erlauben, ihre Telefone zu aktualisieren.

Google hat Google I / O 2011 bereits gestartet : C- und C ++ – Spiele in eine Android- Sitzung bringen, die unter http://www.youtube.com/watch?v=5yorhsSPFG4 verfügbar ist

Das ist gut zu verstehen, die Verwendung von NDK zum Schreiben von Anwendung in C und C ++ für Android.

Wenn Sie nur ein beliebiges konsolenbasiertes natives Spiel kompilieren und auf Android ausführen möchten, dann hat dieser Artikel 3 Methoden für dasselbe gezeigt.

1: Statische Kompilierung mit eigenständiger Toolchain

2: Cross-Compilierung mit der Android-NDK-Toolchain

3: Cross-Compilierung mit AOSP-Quellcode

Vielleicht suchst du das?

http://www.mosync.com/

Es ist eine mittlere Schicht für die Entwicklung für mehrere mobile Plattformen mit C ++.

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 in der Anwendungsentwicklung für Mobilgeräte bewiesen. Die Jungs von Elements Interactive BV, die Firma hinter Edgelib Library, ist es gelungen, native C ++ – Anwendungen auf der Android-Plattform auszuführen, auch wenn zu dieser Zeit noch viele Probleme auf dem Display und Sound auftreten … usw. Dazu gehören das S-Tris2-Spiel und eine 3D-Animationsdemo von Edgelib. ”

Seit 2009 gibt es diesbezüglich eine Entwicklung.
Necessitas – Qt (C ++ Framework) für Android
Erste Schritte mit dem Video

Sehen Sie sich die google ndk group an , die vielversprechend aussieht. Die erste Version des NDK wird im 1H2009 verfügbar sein.

Update: Und es ist veröffentlicht http://android-developers.blogspot.com/2009/06/introducing-android-15-ndk-release-1.html

Ich bin mir nicht sicher, ob das NDK die offizielle Java-API vollständig abdeckt.

Von http://developer.android.com/sdk/ndk/index.html#overview :

Beachten Sie, dass Sie mit dem NDK keine nativen Anwendungen entwickeln können. Die primäre Laufzeit von Android bleibt die virtuelle Dalvik-Maschine.

Sie können c4droid herunterladen und dann das GCC-Plugin installieren und auf Ihrem SD installieren. Von der Shell gehe ich einfach zu dem Verzeichnis, in dem sich die GCC-Binärdatei befindet, und rufe es dann auf, um eine ausführbare On-Board-Datei zu erstellen.

finde / -name gcc

/mnt/sdcard/Android/data/com.n0n3m4.droidc/files/gcc/bin/arm-linux-androideabi-gcc

Katze> test.c

#include int main(){ printf("hello arm!\n"); return 0; } 

./arm-linux-androideabi-gcc test.c -o test

./Prüfung

Hallo Arm!

Dieser Blogeintrag ist vielleicht ein guter Anfang: http://benno.id.au/blog/2007/11/13/android-native-apps Leider sind viele wichtige Dinge “dem Leser als Übung überlassen”.

Ich kenne kein Tutorial, aber ein gutes Entwicklungstool: Airplay SDK von Ideaworks Labs. (Kürzlich umbenannt in ” Marmelade “) Mit C / C ++ können Sie Apps für Windows Mobile, iPhone, Android erstellen. Die einzige Komponente, die ich nicht mochte, war der GUI-Composer – ein errorshafter, aber Sie können ihn immer mit dem Notepad ersetzen.

Diese drei Schritte sind gut in diesem Post zu haben und 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/

Native C / C ++ Dateien libstdc ++. * Von Ihrem Ubuntu sind x86 (oder x86_64) Binärdateien, aber Android Geräte und Emulatoren sind ARM. Das wird natürlich nicht funktionieren, auch wenn Sie den richtigen Soname einstellen. Das ist eine sehr naive Art, die nirgendwohin führt. Android hat eine sehr eingeschränkte Unterstützung von C ++, was bedeutet, dass es keine Ausnahmen gibt, Standard-C ++ – Bibliothek (einschließlich STL) und RTTI. Wenn Sie solche functionen benötigen, verwenden Sie meine benutzerdefinierte NDK-Distribution von

http://crystax.net/android/ndk.php – es unterstützt vollständige C ++ – functionen, die oben aufgeführt sind.

Warum gibt es einen Fehler: undefinierter Verweis auf den Verbindungserrors ‘__cxa_end_cleanup’. Android stlport

Zeit. Weil es keine Verbindung zu libstdc + + gibt. A. So falsch.

Da es eine statische Bibliothek verwendet, ist es notwendig, den vollständigen libstdc + + zu verknüpfen. Eine Kanne

http://crystax.net/android/ndk.php hier, um das Paket herunterzuladen

Quellenverzeichnis \ cxx-stl \ gnu-libstdc + + \ libs \ armeabi Verzeichnis.

Android auf eigene Faust libstdc + + Unterstützung ist begrenzt, muss es zu einem vollständigen libstdc + + verknüpft werden. A der Job.

Datei in Android.mk hinzufügen LOCAL_LDFLAGS = $ (LOCAL_PATH) / libs / libcurl.a \

  $ (LOCAL_PATH) / libs / liblua.a \ `$ (LOCAL_PATH) / libs / libstdc + +. A` 

Und LOCAL_CPPFLAGS + =-lstdc + +-fexceptions können kompiliert werden

Es ist geplant, C / C ++ – Bibliotheken in der nächsten SDK-Version von Android zuzulassen (Codename Eclair?). Bislang ist dies nicht über das Android Java SDK möglich. Sie können jedoch das HUGE-Open-Source-Projekt nutzen, Ihre eigenen Bibliotheken rollen und dann Ihr eigenes Gerät flashen … aber jeder, der Ihre Bibliothek verwenden möchte, muss auch Ihren benutzerdefinierten Build flashen.

Kurze Antwort: Sie können nicht.

@ Backslash17: Durch den Artikel und den folgenden Link mit den Installationsanleitungen schauend, ist die ganze Firma, die funktioniert, eine selbst kompilierte ausführbare Datei auf dem Emulator unter Umgehung des android Rahmenwerks zu starten. Sobald Sie den Emulator haben, können Sie telnet und eine Linux-Shell haben. Das Ausführen eines Linux-Programms ist natürlich trivial. Aber das funktioniert nicht für Handys ohne Jailbreak (Root-Zugriff) und nicht auf dem Markt verfügbar.

Wenn Google keine anderen Opportunities öffnet oder jemand einen benutzerdefinierten Compiler schreibt, der Sprache X in Dalvik-Bytecode kompiliert (Dalvik ist die VM, auf der Android-Programme laufen), können Sie keinen nativen Code schreiben.