2011-05-18 62 views
1

嘿家伙! 我一直致力于最近在Android 2.1和2.2上运行的C++应用程序。 所以我想知道如果我有完整的C++应用程序,我可以把它放入* .so文件,然后创建android项目,只需使用System.loadLibrary(blalba.so)加载这个库; 它会工作吗?JNI与android?

回答

1

是的,你将不得不重新编译专门为Android的所有本地库。是的,您确实需要所有您计划使用的第三方本机库的源代码,因为通常当我们在Android之外编译和链接这些库时,它们与glibc链接,但不幸的是Android由于显示和性能问题而不使用glibc。 Android使用glibc的淡化版本,称为libc。对于大多数常用功能,它具有与glibc匹配的符号名称。但据我所知,libc没有与Strings相关的一些功能,它绝对没有一些posix支持。如果您的本机库正在使用任何已弃用的功能,则必须通过使用libc支持的其他功能并相应地编码您的库来为这些功能找到解决方法。

另外,正如你指出的那样,你将不得不使用NDK将Java(Android app/fwk)连接到本地(C++)。

虽然这听起来很简单,但根据我的经验,编译Android上的本机库(Android移植)传统上非常耗时且不保证成功。

+0

非常感谢评论,这真的很有帮助。顺便说一句,是否有一些特定的Android编码,特别是2.1和2.2,或者它可能只是普通的C++和Java代码? – 2011-05-18 13:56:30

+0

@ user747228:Android有一个3层架构,其中最低层是本地(C/C++),Jni层(称为App Fwk)位于顶层,基于Java的应用位于App Fwk之上。 C,C++代码与Android libc链接,因此它必须符合它(我记得的不同的细节在回答)。关于App Fwk和App,他们使用由Android SDK公开的功能,这或多或少是Java的核心,但Android拒绝说Java。 – 2011-05-18 15:59:52

+0

@ user747228:如果您确实找到有用的答案和评论,请不要忘记将它们标记为已接受的答案:) – 2011-05-18 16:01:57