返回首页
当前位置: 主页 > 网络编程 > Android教程 >

Android JNI输出LOG教程及代码

时间:2012-07-07 17:20来源:知行网www.zhixing123.cn 编辑:麦田守望者

这个程序使用eclipse创建一个java程序,通过jni调用我们的共享库,这个共享库非常简单,只实现一个写日志的函数,ok,我们开始。
首先,我们还是先建立一个Android工程,打开Eclipse开发环境,新建工程,Build Target设为Android 1.5, 其他项目随便填。为了方便,可以把这个项目放在ndk的apps目录下面。
其次,我们新建一个调用共享库的类,名字就叫MyLog好了,给他添加一个静态区块,以实现加载共享库的目的。如下所示:
static
{
try
{
System.loadLibrary("TestLog");
}
catch (UnsatisfiedLinkError e)
{
System.err.println("Cannot load hello library:/n " + e.toString());
}
}

然后,再添加一个native方法:
public native int Log();

然后编译,使用javah生成一个jni样式头文件,如下所示,
javah -jni -d D:/eclipse/workspace/TestLog/bin -classpath D:/eclipse/workspace/TestLog/bin testLog.myLog.MyLog
请将上面的D:/eclipse/workspace/TestLog/bin换成你的类文件路径, 注意,这里要使用全限定类型名称。

我们在主界面上添加一个按钮,在主Activity类的onCreate方法里面,为这个按钮添加一个事件接口,如下所示,

Button btnLog = (Button) findViewById(R.id.btnLog);
btnLog.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
MyLog log = new MyLog();
log.Log();
}
});

在项目目录下面添加一个Application.mk文件,文件内容很简单,只有两句话,
APP_PROJECT_PATH := $(call my-dir)
APP_MODULES := TestLog
这样,我们的java工程就做好了,接下来我们再来写native c的共享库,在ndk/sources目录下新建一个子目录,名字就叫TestLog好了,
把刚才生成的jni头文件拷贝到这里,然后新建一个.c文件,这个文件只有一个函数,如下所示:
#include <log.h>
#include "testLog_myLog_MyLog.h"
JNIEXPORT jint JNICALL Java_testLog_myLog_MyLog_Log(JNIEnv * penv, jobject obj)
{
static int iCount = 0;
iCount++;
__android_log_print(ANDROID_LOG_INFO, "wuzhenhua", "hello, this is my number %d log message!", iCount);
return 0;
}
注意,函数声明必须要跟生成的jni头文件保持一致,否则java会找不到要调用的函数,导致异常发生!
这个函数内部调用了 __android_log_print这个API函数,向系统输出日志,第一个参数指定日志类型级别,声明为android_LogPriority枚举类型,如下所示:
typedef enum android_LogPriority {
ANDROID_LOG_UNKNOWN = 0,
ANDROID_LOG_DEFAULT,
ANDROID_LOG_VERBOSE,
ANDROID_LOG_DEBUG,
ANDROID_LOG_INFO,
ANDROID_LOG_WARN,
ANDROID_LOG_ERROR,
ANDROID_LOG_FATAL,
ANDROID_LOG_SILENT,
} android_LogPriority;
第二参数,是一个标签,名字随便取,只是起到一个分类和过滤的作用。
第三个参数,就是具体的消息文本了,注意,这个函数取不定长度参数,让你可以象用printf函数那样使用,也就是这个参数可以加上类似%d,%x等格式化字串,在这个参数后面再加上相应类型的参数即可。
好,主函数写完了,我们再来写一个Android.mk文件,以下是文件内容:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := TestLog
LOCAL_SRC_FILES := TestLog.c
LOCAL_LDLIBS += -llog

include $(BUILD_SHARED_LIBRARY)
ok,就差最后一步,我们来编译一下,进入到ndk主目录,输入命令:
make APP=TestLog
大功告成!生成的共享库会自动拷贝到 你的项目路径/libs/armeabi目录下面。

------分隔线----------------------------
标签(Tag):Android android教程 android技巧 android软件 android开发教程
------分隔线----------------------------
推荐内容
猜你感兴趣