8

我对它在各种手机之间的便携性特别感兴趣。我们有一个应用程序,其中包含一些我们希望在 Android 和 iPhone 之间共享的计算量大的代码。如果我们可以用 C 编写它,我们将拥有一个单一的代码库,但如果 NDK 只支持手机制造商正在创建的处理器的子集,或者我们必须为每个处理器重新编译,这不是一个可行的解决方案.

感谢您的任何经验。

4

4 回答 4

2

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

于 2009-11-07T03:48:27.480 回答
2

NDK 基本上是Android的Java 原生接口的实现。它为您提供带有 target 的 GCC 4.2.1(据我所知的全套工具)arm-eabi。生成的代码是否会在 iPhone 或其他我不知道的设备上运行;我从来没有为 iPhone 编码过。以下是file我使用 NDK 构建的一些内容,所以也许你可以比较一下:

libpuzzles.so:ELF 32 位 LSB 共享对象,ARM,版本 1 (SYSV),动态链接,未剥离

strip包括在内;我只是没有在这里运行它。)这里是gcc -vg++ -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 --禁用共享 --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/platforms/cupcake/ arch-arm --program-transform-name=s,^,arm-eabi-,

螺纹型号:单

gcc 版本 4.2.1

假设代码将运行,在 API 级别管理它是一个单独且有趣的问题。Android 将只允许您通过 JNI API 调用本机代码。我不熟悉 iPhone 方法,但我知道它不是 Java,所以我猜它更像是标准动态链接或dlopen()?我的意思是,你必须要么让你的 JNI 函数(例如Java_com_example_Foo_YourMethod(JNI_Env*, jobject, ...),处理从非 JVM 调用的问题(例如让你的 iPhone 代码伪造一个 JNI_Env?),或者更可怕的是,首先提供一个适用于 iPhone 的原生 API,然后包含一个 JNI 包装器,非 JNI 平台可以安全地忽略它,我认为这是此类事情的常用方法。希望有所帮助。

于 2009-11-08T12:12:49.523 回答
2

关于是否所有Android(1.5+版本)手机都支持当前NDK的输出:

我只能说文档中没有其他建议(除非您阅读了“此版本支持 ARMv5TE 指令集”中的暗示),而且我密切关注 Android 新闻并且没有听说过任何 Android 手机使用非 ARM 架构发布(尽管有些人为 EeePC 构建了一个构建)。查看Android 源码,只有另一个平台 x86 的痕迹。至于 Google 和OHA的未来计划?你得问他们。他们最近宣布了一些开发者日,但现在可能所有的斑点都消失了(第一个是今天)。我很早就注册了伦敦日(17 日),所以如果我进去了,我会试着在那里得到答案(我也很想知道确切的答案)。

于 2009-11-09T09:43:09.513 回答
0

在 NDK 中使用帧缓冲处理并在 JAVA 中进行渲染,我在编写跨面包 JNI/C 应用程序方面有过很好的体验。

Pitty,它是一个仅限安卓的解决方案

于 2011-07-07T14:28:04.803 回答