Android NDK的任何经验?

我特别感兴趣的是在各种手机之间的便携性。 我们有一个应用程序,我们想在Android和iPhone之间分享一些计算量大的代码。 如果我们可以用C编写,那么我们只需要一个代码库,但是如果NDK只支持电话制造商正在创build的一部分处理器,或者如果我们必须为每个处理器重新编译,那么这不是一个可行的解决scheme。

感谢您的任何经验。

在所有Android(1.5+版本)手机是否支持当前NDK输出的问题上:

我只能说在文档中没有任何其他的build议(除非也许你读到“ 这个版本支持ARMv5TE指令集”的含义),并且我紧跟Android的消息,并没有听说过任何Android手机使用非ARM架构发布(虽然有些人一起攻击EeePC的构build )。 看一下Android源代码 ,只有一个其他平台,x86的痕迹。 至于Google和OHA的未来计划? 你得问问他们。 他们最近宣布了一些开发人员的日子 ,但现在可能所有的景点都消失了(今天是第一个)。 我在伦敦日(17日)很早就注册了,所以如果我进来,我会尽力在那里得到答案(我也很想知道)。

我对iPhone开发并不是很熟悉,但是如果你看看android ndk页面 ,在开发工具部分,它列出了平台中可用的保证头文件,所以如果iphone支持这些function,或者你可以创build接口你的代码和两个平台上的本地库比我不明白为什么它不会工作。

NDK基本上是Android的Java本地接口的实现。 它给你GCC 4.2.1(我可以告诉的全套工具)与目标arm-eabi 。 无论结果代码是在iPhone还是其他设备上运行,我都不知道; 我从来没有编码的iPhone。 下面是关于我用NDK构build的东西的file说明,或许你可以比较一下:

libpuzzles.so:ELF 32位LSB共享对象,ARM,版本1(SYSV),dynamic链接,不剥夺

strip是包含的,我只是没有在这里运行。)这里是gcc -vg++ -v (它们是相同的):

使用内置的规格。

目标:arm

configuration:/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 / platforms / linux-x86 / arm-eabi-4.2.1 –with-sysroot = / opt / digit / cupcake / arch-arm –program-transform-name = s,^,arm-eabi-,

线程模式:单一

gcc版本4.2.1

假设代码将运行,在API级别pipe理这是一个单独和有趣的问题。 Android只会让你通过JNI API调用本地代码。 我不熟悉iPhone的方法,但我知道这不是Java,所以我想这更像是标准的dynamic链接或dlopen() ? 我的意思是,你将不得不让你的JNI函数(例如Java_com_example_Foo_YourMethod(JNI_Env*, jobject, ...)应付被调用的东西不是一个JVM(例如你的iPhone代码假的JNI_Env? ),或者更不可怕的是,首先提供一个适用于iPhone的本地API,然后包含一个JNI包装器,非JNI平台可以安全地忽略,我收集的是这种事情的一种常见方法。

我已经有了很好的经验,在NDK中使用framebuffer处理编写跨平台的JNI / C应用程序,并在JAVA中进行渲染。

皮蒂,它是一个唯一的解决scheme