2011-08-11 5 views
2

ちょうどあなたがネイティブコードを記述する場合、アプリケーションがまだの.apkファイルにパッケージ化し、彼らはまだ、デバイス上の仮想マシンの内部で実行されているAndroid NDKのあいまいさは、バイトまたはマシンコードにコンパイルされますか?

、最初のパラ状態をNDKドキュメント、http://developer.android.com/sdk/ndk/index.htmlを見直します。リビジョン6、

のための最初の箇条書きに反する

あなたは互換性のx86ベースのAndroidデバイス上で動作するマシンコードを生成することができますのx86 ABIのサポートを追加します。

私のネイティブコンパイルは、仮想マシンのマシンコードまたはバイトコードにコンパイルされますか?

--edit ---

はおそらく、私はまだ、明示的、カスタム、ネイティブ(マシン)コードにダウン呼び出し中に間違っては、当然のアプリケーションは仮想マシンで実行することを読みました。右の音ですか?

+0

明らかに私はx86ではなくARMを対象にしていますが、記載されているURLはそれほど遠くには行きません。 – John

答えて

2

あなたの編集は正しいです。あなたはまだjavaで標準のアクティビティを作成し、dnivikVMで実行されていないAPIのいくつか(sqliteなど)を呼び出すのと同じように、jniを使ってコンパイルしたネイティブコードを呼び出す必要があります。このネイティブコードはもちろんアーキテクチャに依存します。

AFAIK、これはネイティブアクティビティ(アンドロイド2.3+)で変更されますが、携帯電話のわずかなパーセンテージで2.3+が実行されているため、私はそれほど調査していません。

編集:NDKを使ってこのように考えると、ライブラリを作成してSDKで作成したアプリケーションで使用できます。しかし、ちょっと知っていれば、あなたのアプリケーションスマートのほとんどをそのライブラリに置くことができるので、あなたのアプリはライブラリのまわりのいくつかの接着コードになります。

ただし、クロスコンパイラ(メインメソッドとすべて)と同様に、NDKを使用してAndroid用の完全なネイティブプログラムを作成できます。ただし、将来的にアンドロイド携帯電話をリリースする予定がないか、root権限を持つユーザーのみを対象とする場合を除き、通常のユーザーはアプリとしてインストールしないとネイティブプログラムを実行できないため、これは実行されません。 )理由。

+0

AFKのように私の「スマート」に取り組んでいました。実際には、rootユーザーをターゲットにして25ポンドの市場登録料を支払うつもりだった...今のところ。 – John

+0

このライブラリはLinuxの.soのようなものでしょうか?私のcygwinがセットアップされると、それはすべて私にとって意味をなさないでしょう。 – John

+0

FYIは、iOSとは異なり、サードパーティ製のAPK、afaik、すべての電話機をインストールするためにデバイスにrootアクセスする必要はありませんが、NDKにはARM専用のxコンパイラが付属しています。 (AT&Tユーザーはいくつかのフープを飛ばしなければならないかもしれませんが)通常のユーザーの許可を得ています。もちろん、通常のLinuxの.soライブラリと似ています。これはJNIでロードします。 –

関連する問題