[转]Android编译环境(6) - Android JNI实例
2011-08-04 15:33
274 查看
2009年11月13日 星期五 02:16 P.M.
Android的SDK中没有包括JNI的支持,而且对如何支持JNI也没有任何文档说明。不过既然整个Android平台是开源的,我们可以通过Google发布的源代码来找到一些线索(比如frameworks/base/media/jni/目录),依葫芦画瓢的实现上层JAVA程序通过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片断:
原文地址 http://www.j2medev.com/android/native/200901/20090119222617.html |
相关文章推荐
- android Jni NDK开发环境搭建及其简单实例的编写
- 搭建arm-linux-gcc交叉编译工具链环境(Android原生(JNI)开发环境搭建)
- Android NDK&&JNI 编译环境的搭建
- JNI使用实例:Android Studio使用JNI编译so库
- Android jni实例(android源码树编译so库)
- android Jni NDK开发环境搭建及其简单实例的编写
- android下NDK开发环境搭建及TestJNI入门实例完整过程
- Ubuntu下编译Android JNI实例全过程
- Mac环境下Android Studio jni开发调用 javah编译不了头文件问题
- Linux环境下Android JNI程序的编译
- Ubuntu下编译Android JNI实例全过程
- 搭建arm-linux-gcc交叉编译工具链环境(Android原生(JNI)开发环境搭建)
- Cocos2dx 环境编译出错:jni/Android.mk: Cannot find module with tag 'scripting/lua-bindings'
- android NDK/JNI环境配置及实例开发流程
- Linux环境下Android JNI程序的编译
- Android Jni开发环境搭建与编译
- Android源码环境下编译自带JNI的APP
- android Jni NDK开发环境搭建及其简单实例的编写
- Cocos2dx Android环境编译出错:jni/Android.mk: Cannot find module with tag 'scripting/lua-bindings' in import path
- Android NDK&&JNI 编译环境的搭建