http://hi.baidu.com/theonlyking/blog/item/58dcc61373a98ac8f7039ebc.html
现在Android发展的如火如荼,但是它的一些程序还是需要调用到C的代码,这期间的衔接(JAVA与C之间)就叫做JNI。 不熟悉JNI的可以先百度一下,另外,还需要NDK的一个开发环境,我用的是NDK5。 话不多说,开始: 创建一个Android工程,之后,在里面创建一个类,里面只需要包含一个native方法即可,例: package com.****.testjnilog; public class TJLog { 下面需要生成相对应的.h文件,(用javah命令) 由于用javah命令生成h文件需要知道相应的类文件,所以这里会有一些需要注意的。 在cygwin下:进入到工程目录,这时候的类文件,都是放在bin/com/****/testjnilog下的, 我们所做的就是:进入到bin目录,然后用如下命令: javah -jni com.****.testjnilog.TJLog 这个执行完成以后,在bin目录里面就生成好相应的.h文件了。 /* DO NOT EDIT THIS FILE - it is machine generated */ #ifndef _Included_com_****_testjnilog_TJLog #ifdef __cplusplus 创建一个.c文件,包含相应的.h文件,并将其中的函数进行实现。 #include "com_****_testjnilog_TJLog.h" #include <android/log.h> // 这个是输出LOG所用到的函数所在的路径 #define LOG_TAG "JNILOG" // 这个是自定义的LOG的标识 #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__) // 定义LOG类型 JNIEXPORT void JNICALL Java_com_****_testjnilog_TJLog_ShowJNILog 按照NDK中的例子,在工程目录下创建一个jni的文件夹,将两个文件拷贝到目录里面,并将一个Android.mk拷贝进来, 修改方法如下:
include $(CLEAR_VARS) LOCAL_MODULE := testjnilog LOCAL_LDLIBS := -llog # 如果不包含这一句的话,会提示:__android_log_print 未定义 include $(BUILD_SHARED_LIBRARY) 接上面:从bin目录,返回到工程目录。按照NDK开发环境配置的路径进行编译,我的是ANDK $ANDK/ndk-build 如果成功以后,就会提示生成了.so文件。(如果不成功,可以给我留言。) 在Android工程中引用.so文件。 public class testjnilog extends Activity { 运行工程,就会在LOGCAT里面看到自己输出的LOG了。 |