さまざまな電話間での移植性に特に興味があります。Android と iPhone の間で共有したい計算量の多いコードを含むアプリケーションがあります。C で記述できればコードベースは 1 つになりますが、NDK が電話メーカーが作成しているプロセッサのサブセットのみをサポートしている場合、またはプロセッサごとに再コンパイルする必要がある場合、それは実行可能なソリューションではありません。 .
経験していただきありがとうございます。
さまざまな電話間での移植性に特に興味があります。Android と iPhone の間で共有したい計算量の多いコードを含むアプリケーションがあります。C で記述できればコードベースは 1 つになりますが、NDK が電話メーカーが作成しているプロセッサのサブセットのみをサポートしている場合、またはプロセッサごとに再コンパイルする必要がある場合、それは実行可能なソリューションではありません。 .
経験していただきありがとうございます。
NDKは、基本的にAndroid用のJavaNativeInterfaceの実装です。それはあなたにターゲットでGCC4.2.1(私が知る限りのツールの完全なセット)を与えますarm-eabi
。結果のコードがiPhoneまたは私が知らない他のデバイスで実行されるかどうか。私はiPhone用にコーディングしたことがありません。これが私がNDKで構築したものfile
について言わなければならないことですので、おそらくあなたは比較することができます:
libpuzzles.so:ELF 32ビットLSB共有オブジェクト、ARM、バージョン1(SYSV)、動的にリンクされ、削除されない
(strip
含まれています。ここでは実行していません。)gcc -v
またはg++ -v
(同じです):
組み込みの仕様を使用します。
ターゲット:arm-eabi
構成:/opt/digit/android/git/android-ndk/out/arm-eabi-4.2.1/toolchain/src/gcc-4.2.1/configure --prefix = / opt / digit / android / git / android-ndk / build / prebuilt / linux-x86 / arm-eabi-4.2.1 --target = arm-eabi --host = x86
_
64-unknown-linux-gnu --build = x86_
64-unknown-linux-gnu --enable-languages = c、c ++ --disable-libssp --enable-threads --disable-nls --disable-libmudflap --disable-libgomp --disable-libstdc __- v3 --disable-sjlj-exceptions - disable-shared --with-float = soft --with-fpu = vfp --with-arch = armv5te --enable-target-optspace --with-abi = aapcs --disable-nls --prefix = / opt / Digit / android / git / android-ndk / build / prebuilt / linux-x86 / arm-eabi-4.2.1 --with-sysroot = / opt / digit / android / git / android-ndk / build / platform /カップケーキ/ arch-arm --program-transform-name = s、^、arm-eabi-、スレッドモデル:シングル
gccバージョン4.2.1
コードが実行されると仮定すると、これをAPIレベルで管理することは、別の興味深い問題です。Androidでは、JNIAPIを介してのみネイティブコードを呼び出すことができます。私はiPhoneのアプローチに精通していませんが、Javaではないことを知っているので、標準のダイナミックリンクのようなものだと思いdlopen()
ますか?つまり、JNI関数を作成する(たとえばJava_com_example_Foo_YourMethod(JNI_Env*, jobject, ...)
、JVMではないものから呼び出されることに対処する(たとえば、iPhoneコードにJNI_Envを偽造させる)か、それほどひどくはないが、最初にiPhoneに適したネイティブAPIには、JNIラッパーが含まれています。JNIラッパーは、JNI以外のプラットフォームでは安全に無視できます。これは、この種のものの一般的なアプローチです。お役に立てば幸いです。
私はiPhone開発についてはあまり詳しくありませんが、android ndkページの開発ツールセクションを見ると、プラットフォームで利用可能な保証付きヘッダーが一覧表示されているため、iphoneがこれらの機能をサポートしている場合、またはあなたのコードと両方のプラットフォームのネイティブライブラリは、なぜそれが機能しないのかわかりません。
すべての Android (バージョン 1.5+) スマートフォンが現在の NDK の出力をサポートするかどうかについて:
私が言えることは、ドキュメントにはそれ以外のことを示唆するものは何もないということです (おそらく、「このリリースは ARMv5TE 命令セットをサポートしています」という意味を読んだ場合を除きます)。私は Android ニュースをかなり注意深くフォローしており、Android 携帯電話がARM 以外のアーキテクチャを使用してリリースされました (一部の人々は EeePC のビルドを一緒にハックしました)。Android ソースを見ると、他のプラットフォーム x86 の痕跡しかありません。Google とOHAの今後の予定は?あなたは彼らに尋ねなければならないでしょう。彼らは最近、いくつかの開発者の日を発表しました、しかしおそらくすべてのスポットは現在なくなっています(最初のスポットは今日です)。私はロンドンの日 (17 日) のかなり早い段階で登録したので、参加できればそこで答えを得ようとします (私も確実に知りたいと思っています)。
私はクロスブレッド JNI/C アプリを NDK でフレームバッファ処理し、JAVA でレンダリングする素晴らしい経験をしました。
Pitty、それはアンドロイド専用のソリューションです