Android JNI 实例
2009-11-30 17:11
357 查看
Android的SDK中没有包括JNI的支持,而且对如何支持JNI也没有任何文档说明。不过既然整个Android平台是开源的,我们可以通过Google发布的源代码来找到一些线索(比如frameworks/base/media/jni/目录),依葫芦画瓢的实现上层J***A程序通过JNI来调用Native C程序中的函数。 依照下面的步骤可以实现一个非常简单的JNI的实例程序: 1.首先编写C模块,实现动态库。(关于如何在Android中编译C模块的更多细节,请参考《Android编译环境(1) - 编译Native C的helloworld模块》。) 在development目录下添加新目录hellolib,并添加hellolib.c和Android.mk文件。hellolib.c的内容如下:
另外,LOGD及#define LOG_TAG "TestLib"等打印log的方式是采用了Android所提供的LOG机制,这样才能通过Android的logcat工具看到log。 用于编译C模块的Android.mk文件内容如下:
LOCAL_SRC_FILES - 编译的源文件 LOCAL_C_INCLUDES - 需要包含的头文件目录 LOCAL_SHARED_LIBRARIES - 链接时需要的外部库 LOCAL_PRELINK_MODULE - 是否需要prelink处理(参考prelink的详细介绍:《动态库优化——Prelink(预连接)技术》,Android的Toolchain, prelink工具:《Android Toolchain与Bionic Libc》) LOCAL_MODULE - 编译的目标对象 BUILD_SHARED_LIBRARY - 指明要编译成动态库。 接下来回到Android顶层目录,并执行make libhello来编译:
2.编写Java模块,来通过JNI方式调用C接口。具体Eclipse环境的搭建请参考Android SDK 文档中的详细说明,及Hello Android程序的创建过程,这里仅给出我们需要修改的TestHelloLib.java文件:
通过这一步骤可生成Android开发者所熟悉的apk文件:TestHelloLib.apk。 3.集成测试TestHelloLib.apk和libhello.so。先运行emulator并将TestHelloLib.apk和libhello.so上传至emulator中。注意要将libhello.so上传到emulator的/system/lib目录,由于该目录是只读的,上传之前先要执行adb remount:
由于JNI接口printHello()并没有作界面上的改动,要验证其效果需要用Android的logcat工具来查看。运行”adb logcat”可以找到下面的log片断:
[b]174): Hello LIB!”[/b]就是printHello()所打印的信息。至此成功完成Android JNI的实例验证。 |
相关文章推荐
- Android通过JNI调用驱动程序(完全解析实例)
- android JNI 实例代码
- Android-本地方法与Java相互调用-自定义ProgressBar(锅炉压力监测例子)/NDK-JNI开发实例(七)
- Android Native添加JNI接口实例
- Android—JNI调用简单实例解析
- Android JNI c/c++调用java的实例
- 官方实例:android ubuntu ndk jni hello-jni
- Android Jni 多线程 蓝牙串口收发 实例 一
- Android--JNI简单的实例解析
- [置顶] Android调用JNI的简单实例(附详细步骤)
- Android中JNI创建实例
- Android的jni实例
- Android JNI简单实例
- Android——JNI调用简单实例解析
- Android-NDK开发之基础--Android JNI实例代码(一)-- 在JNI中执行Java方法--C/C++调用Java
- Android:JNI 与 NDK到底是什么?(含实例教学)
- 【JNI】 Android调用JNI的进阶实例(摄像头预览数据转码RGB播放)
- JNI使用实例:Android Studio使用JNI编译so库
- Android-NDK开发之基础--Android JNI实例代码(三)-- 在JNI中构造和实例化Java类
- android studio JNI过程实例