JNI和旧的C ++代码

时间:2013-03-08 08:17:38

标签: java c++ android-ndk java-native-interface

我现在正在编写我今年早些时候写的旧版c / c ++代码的JNI版本,包含在我的android应用程序中。我编写的桌面应用程序相当于我在Java和C ++中编写的内容,并且性能上的差异非常突出,因此我希望利用ndk。

我对JNI非常陌生,而且我理解事物的方式,似乎我必须做一些类型映射; jdouble替换doublejint替换int,依此类推。但事情是,我已经尝试将我的一些旧代码保持不变,并且它有效!我甚至包含了一些STL库(listvector),我没有遇到任何问题。我刚刚将APP_STL := stlport_static包含在Android.mk文件中。

所以我的问题是:这样做是否有性能损失?我应该注意其他风险吗?在我的jni中使用C / C ++原语类型有什么缺点?我可以让代码运行得更快,还是我不应该打扰?

谢谢,

NAX

1 个答案:

答案 0 :(得分:2)

JNI中的本机类型(jint,...)只是C类型的typedef别名。当内部Java表示与C不完全匹配时,它们存在于代码可移植性,即关于位大小。因此,混合它们不应该有任何性能开销。

混合它们的风险或缺点是,如果它们在某些平台中具有不同的位大小,则在来回转换时可能会丢失位。因此,您可能希望在构建代码时进行一些额外的检查,以确保它是安全的。