Android 将C/C++;图书馆在安卓手机上工作

Android 将C/C++;图书馆在安卓手机上工作,android,Android,有没有人有使用JNI在Android中调用本机C/C++库的经验?环境是否适合运行C/C++库?如果适合,您需要适应的环境是否有任何特定的内容? 感谢< P>我的理解是Android只提供标准C++运行时库的一个子集。例如,本机代码中的Android。我认为还有其他限制 一个复杂的问题是,虽然Android本身可能包含许多本机库,但只有一些库被认为足够稳定,可以链接到其他库。列出了安全的库 libc(C库)头 libm(数学库)头文件 JNI接口头 libz(Zlib压缩)头 liblog(

有没有人有使用JNI在Android中调用本机C/C++库的经验?环境是否适合运行C/C++库?如果适合,您需要适应的环境是否有任何特定的内容?
感谢

< P>我的理解是Android只提供标准C++运行时库的一个子集。例如,本机代码中的Android。我认为还有其他限制


一个复杂的问题是,虽然Android本身可能包含许多本机库,但只有一些库被认为足够稳定,可以链接到其他库。列出了安全的库

  • libc(C库)头
  • libm(数学库)头文件
  • JNI接口头
  • libz(Zlib压缩)头
  • liblog(Android日志)头
  • C++的一个最小集头支持< /LI>

如果您的C库只使用这些,您应该不会有问题。C++支持声音有点尖。

<>对于C库,你不应该有任何麻烦。如果使用了很多标准库,C++库可能会更有趣,因为大多数C++标准库都不见了,但您可以随时提供自己的“迷你STL”。这就是external/webkit的基本工作原理


例如,许多Android的java.util.regex、java.nio.charset、java.util和java.text都是通过调用ICU4C实现的。(图书馆在外部/ICU4C和JNI是Dalvik/LBCys/ICU/SRC/main/原生)。使用ICU C和C++接口的混合,所以您可以放心,这些东西每天都会得到很好的锻炼;p> 关于C和Java集成的一个好例子,请查看以下内容:

解开这些文件,您可以找到一个jni/termExec.cpp,它使用普通的C API,如“exec()”、“fork()”和“open(/dev/ptmx)”来实现终端仿真(http://linux.die.net/man/4/ptmx)

查找jni/Android.mk文件,您可以看到cpp被编译为libandroidterm库

然后java应用程序(src/jackpal/androidterm/Exec.java)将通过System.loadLibrary(“androidterm”)加载库

我认为这个应用程序为您提供了一个足够小的示例,可以扩展您喜欢的任何方式—cpp或java文件。(cpp文件基本上是基于C的,而不是C plus)

记住它们之间的映射,例如:

static JNINativeMethod method_table[]
= {
    { "createSubprocess", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[I)Ljava/io/FileDescriptor;",
        (void*) android_os_Exec_createSubProcess },
    { "setPtyWindowSize", "(Ljava/io/FileDescriptor;IIII)V",
        (void*) android_os_Exec_setPtyWindowSize},
    { "waitFor", "(I)I",
        (void*) android_os_Exec_waitFor},
    { "close", "(Ljava/io/FileDescriptor;)V",
        (void*) android_os_Exec_close} };

谢谢你的回答,丹尼尔。我还刚刚读到本机Dalvik核心代码是用C/C++编写的,并且还使用JNI桥。这与我想做的工作类似,因此我希望我能在Android应用程序中编写对C库的JNI调用。