web-dev-qa-db-ja.com

Android用のCまたはC ++でアプリケーションを作成しますか?

私はゲームをAndroidに開発/移植しようとしていますが、それはCであり、AndroidはJavaをサポートしていますが、Cアプリを入手する方法があるはず?

ありがとうございます。

280
Robert Gould

グーグルを介してこれに来ている人のために、SDK 1.6 Androidから始めて今公式のネイティブSDKがあることに注意してください。

あなたはここからAndroid NDK(ネイティブ開発キット)をダウンロードすることができます。 https://developer.Android.com/ndk/downloads/index.html

NDKに関するブログ記事もあります。
http://Android-developers.blogspot.com/2009/06/introducing-Android-15-ndk-release-1.html

241
Andy Johnson

Android NDK は、CやC++などの言語を使用して、アプリの一部をネイティブコードで実装できるツールセットです。特定の種類のアプリでは、これらの言語で書かれたコードライブラリを再利用するのに役立ちます。

ネイティブ開発を開始する方法については、 this link を参照してください。

サンプルアプリケーションは here にあります。

40
MannyNS

通常、あなたはしなければなりません:

  1. Google Android NDKをインストールしてください。 libs、ヘッダ、makfileの例、そしてgccツールチェーンが含まれています。
  2. ARM用のCコードから実行可能ファイルをビルドし、必要に応じて提供されているライブラリと最適化してリンクします。
  3. 提供されているadbインターフェースを使って電話に接続し、実行ファイルをテストしてください。

あなたがアプリを販売しようとしているなら:

  1. あなたのCコードからライブラリを構築する
  2. このライブラリを使用する簡単なJavaコードを作成する
  3. このライブラリをアプリケーションパッケージファイルに埋め込む
  4. アプリをテストする
  5. 販売または無料配布
18
psihodelia

Googleはネイティブ開発キット(NDK)をリリースしました(によると http://www.youtube.com/watch?v=Z5whfaLH1-E :07:30)。

うまくいけば、情報はそれが言うように、グーグルグループのページ( http://groups.google.com/group/Android-ndk )に更新されますまだリリースされていません。

どこで簡単にダウンロードできるのかはわかりませんが、GoogleのGitリポジトリからドーナツブランチの下でNDKのコピーを入手できると聞きました。

14
Marc

公式の立場は、これはあなたが「やりたい」ことではないということです。 Android Developersリストの このスレッド を参照してください。 Googleは、Androidがさまざまなデバイス(CPU、ディスプレイなど)で動作することを想定しています。したがって、開発を可能にする最善の方法は、Dalvik VMをターゲットとする(移植可能な)マネージコードを使用することです。このため、Android SDKはC/C++をサポートしません。

しかし、このページを見てください:

Androidには、Androidシステムのさまざまなコンポーネントによって使用されるC/C++ライブラリのセットが含まれています。これらの機能は、Androidアプリケーションフレームワークを通じて開発者に公開されています。

マネージドアプリケーションフレームワークは、これらのライブラリの上に重なっているように見えます。このページには、C/C++ライブラリ(標準Cライブラリ、メディア、3D、SQL Liteなど)のリストが続きます。

したがって、必要なのはC/C++を適切なCPU(G1の場合はARM)にコンパイルするコンパイラチェーンだけです。これを行う方法についてのいくつかの簡単な説明はここ です

私が知らないのは、これらのライブラリが提供するAPIの説明がどこにあるかということです。 SDKのどこかにヘッダーファイルが埋め込まれている可能性がありますが、ドキュメントは大ざっぱ/欠けている可能性があります。しかし、私はそれができると思います!

それが役に立つことを願っています。記録のために、私はネイティブのAndroidアプリを書いたことはない - ほんの数個の単純な管理されたもの。

アンディ

12
Andy Johnson

グーグルはすでにグーグルI/O 2011を立ち上げました:C/C++ゲームをアンドロイド sessionに持ってきます。 http://www.youtube.com/watchで利用可能ですか? v = 5歳SPFG4

これは、Android用のCおよびC++でアプリケーションを作成するためのNDKの使用方法を理解するのに役立ちます。

コンソールベースのネイティブゲームをクロスコンパイルしてAndroidで実行したい場合は、 この記事 で同じ方法が3つ示されています。

1:スタンドアロンツールチェーンを使用した静的コンパイル

2:Android NDKのツールチェーンを使用したクロスコンパイル

3:AOSPソースコードを使ったクロスコンパイル

8
Jeegar Patel

nestedvm を使ってC(または他のGCC言語)をJavaのバイトコードに変換し、それをあなたの移植の基礎として使うことができます。たとえば、 Android版Simon Tathamsポータブルパズルコレクション を参照してください。

私はこの方法がNDKによって時代遅れにされることを期待しています、しかしそれはいくつかのネットワークか何かが人々が彼らの電話をアップグレードすることを許さないならばではないかもしれません。

8
rjmunro

これを見てそれは可能であるようです:

「Java言語のみがサポートされているという事実は、他の言語でアプリケーションを開発できないという意味ではありません。これは、モバイル向けアプリケーション開発の多くの開発者、ハッカー、専門家によって証明されています。このライブラリは、S-Tris2ゲームやEdgelibの3Dアニメーションデモなど、Androidプラットフォーム上でネイティブC++アプリケーションを実行することに成功しました。

7
backslash17

たぶんあなたはこれを探していますか?

http://www.mosync.com/

これは、c ++を使用していくつかのモバイルプラットフォーム用に開発するための中間層です。

7
joepal

2009年以来、この問題に関する進展があります。
Android用Qt(C++フレームワーク)
はじめに 動画

6
zkunov

NDKが公式のJava APIを完全に網羅しているかどうかはわかりません。

http://developer.Android.com/sdk/ndk/index.html#overview から:

NDKでは、ネイティブ専用のアプリケーションを開発することはできません。 Androidの主要ランタイムは、依然としてDalvik仮想マシンです。

5
Android Eve

google ndk group を見てください。それは、NDKの最初のバージョンが2009年1月に利用可能になるでしょう。

更新日:そしてリリースされました http://Android-developers.blogspot.com/2009/06/introducing-Android-15-ndk-release-1.html

5
Gordon Freeman

Googleはちょうどそれを可能にするNDKをリリースしました。

http://feedproxy.google.com/~r/blogspot/hsDu/~3/2foWz7hwFtE/introducing-Android-15-ndk-release-1.html

ここで見つけることができます: http://developer.Android.com/sdk/ndk/1.5_r1/index.html

3
Alexander Stolz

C4droidをダウンロードしてからGCCプラグインをインストールしてSDにインストールすることができます。シェルからGCCバイナリがあるディレクトリに行き、それを呼び出してオンボード実行可能ファイルを作成します。

find/-namegcc

/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

。/テスト

こんにちは腕!

3
elahtrebor

このブログ記事は良いスタートかもしれません: http://benno.id.au/blog/2007/11/13/Android-native-apps 残念ながら、重要なことの多くは「読者への課題として残されています」。

2
Krzysiek Goj

ネイティブC/c ++ファイルあなたのUbuntuからのlibstdc ++。*はx86(またはx86_64)バイナリですが、AndroidデバイスとエミュレータはARMです。もちろん、正しいソナメを設定したとしても、これはとにかくうまくいきません。これはどこにも行かない非常に素朴な方法です。 AndroidはC++のサポートが非常に限られており、例外、標準C++ライブラリ(STLを含む)、RTTIはありません。そのような機能が必要な場合は、私のカスタムNDKディストリビューションを使ってください。

http://crystax.net/Android/ndk.php - 上記のC++の完全機能をサポートします。

なぜエラーがあるのですか: '__cxa_end_cleanup'リンクエラーへの未定義の参照。 Androidのstlport

時間。 libstdc + +へのリンクがないため。 A.間違っています。

静的ライブラリを使用しているため、完全なlibstdc ++をリンクする必要があります。 A.できます

http://crystax.net/Android/ndk.php ここからパッケージをダウンロードしてください

sources\cxx-stl\gnu-libstdc + +\libs\armeabiディレクトリ。

それ自身のlibstdc ++サポート上のAndroidは制限されています、それは完全なlibstdc ++にリンクされなければなりません。仕事です。

Android.mkにファイルを追加するLOCAL_LDFLAGS = $ (LOCAL_PATH) / libs / libcurl.a \

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

そしてLOCAL_CPPFLAGS + =-lstdc + +-fexceptionsはコンパイルすることができます

2
ZhangXuelian
2
YumYumYum

チュートリアルはわかりませんが、優れた開発ツールであるIdeaworks LabsのAirplay SDKです。 (最近ブランド変更された " Marmelade ")C/C++を使用すると、Windows Mobile、iPhone、Android用のアプリを作成できます。私が気に入らなかった唯一のコンポーネントは、GUIコンポーザー - バグのあるもの - でしたが、あなたはいつでもそれをメモ帳に置き換えることができます。

2
zergius

次期SDKバージョンのAndroid(コードネームEclair?)でC/C++ライブラリを使用できるようにする計画があります。現在のところ、Android Java SDKでは不可能です。しかし、巨大なオープンソースプロジェクトを手に入れ、あなた自身のライブラリを転がし、そしてあなた自身のデバイスをフラッシュすることはできます...しかしあなたのライブラリを使用したい人はあなたのカスタムビルドもフラッシュしなければならないでしょう。

1
haseman