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?

Robert Gould
quelle
Nur wenn Sie das Telefon AFAIK jailbreaken.
Cogsy
64
Ist Jailbraking nicht für iPhones?
Robert Gould
1
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
Robert Gould
4
DOOM für Android ist in Java code.google.com/p/doom-for-android/source/browse/#svn/trunk
Marco Mustapic

Antworten:

247

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

Andy Johnson
quelle
5
OK, wie wäre es nun mit C # und .Net? -)
Avi
4
Ich kann nicht sehen, dass .net-Unterstützung jemals stattfindet
Vickirk
16
@ Avi mono-android.net
Tomas Andrle
2
Bitte beziehen Sie sich auf diesen Link androidsnippets.wordpress.com/2012/08/30/…
KK_07k11A0585
2
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 .

Beispielanwendungen finden Sie hier .

MannyNS
quelle
1
oder 2009, 2010, 2011, 2012 oder 2013
Christopher Berman
19

Normalerweise müssen Sie:

  1. Installieren Sie Google Android NDK. Es enthält Bibliotheken, Header, Makfile-Beispiele und die 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 den bereitgestellten Bibliotheken
  3. 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:

  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. Verkaufen oder verteilen Sie es kostenlos
Psihodelia
quelle
Ich bin neu in NDK und möchte C lan in Android ausführen. Haben Sie einen Ref-Link?
Parag Chauhan
14

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.

Marc
quelle
12

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 :

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.

Andy

Andy Johnson
quelle
4
Downvoting. Das NDK scheint jetzt ein offizieller Compiler für nativen Android-Code zu sein. Diese Antwort überflüssig machen.
Unixman83
8

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.

rjmunro
quelle
1
+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

3: Cross-Kompilierung mit AOSP-Quellcode

Jeegar Patel
quelle
7

Vielleicht suchen Sie das?

http://www.mosync.com/

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

Joepal
quelle
2
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. "

Backslash17
quelle
6

Seit 2009 gibt es eine Entwicklung in dieser Angelegenheit.
Necessitas - Qt (C ++ Framework) für Android
Erste Schritte Video .

zkunov
quelle
Guter Punkt. Nur als zusätzliche Anmerkung verwendet Necessitas das Android NDK.
Jaime Ivan Cervantes
5

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

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

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.

Android Eve
quelle
2

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.

Zergius
quelle
2

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

#include<stdio.h>
int main(){ 
 printf("hello arm!\n");
return 0;
}

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

./Prüfung

Hallo Arm!

elahtrebor
quelle
2

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 \

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

Und LOCAL_CPPFLAGS + =-lstdc + +-fexceptionskann kompiliert werden

ZhangXuelian
quelle
1

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.

Haseman
quelle
-7

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.

Buster
quelle
Richtig, deshalb habe ich "Es scheint ..." geschrieben. Sehen Sie zu glauben!
Backslash17