从一个论坛转来的

这个程序使用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目录下面。

更多相关文章

  1. 一款常用的 Squid 日志分析工具
  2. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  3. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  4. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  5. android 自定义progressDialog实现
  6. Dex文件结构
  7. Android(安卓)Studio JNI 开发简单案例
  8. Android中MediaMuxer和MediaCodec用例 - audio+video
  9. 再学Android(安卓)Studio

随机推荐

  1. mono for android 学习记录
  2. 跟着第二行代码回顾Android--持久化技术
  3. Android自学笔记:架构体系
  4. Android NDK APIs
  5. android使用opensl es进行简单的音频播放
  6. Android 获取手机号码
  7. Android移动view动画问题
  8. Onvif协议及其在Android下的实现
  9. Android将Service服务打包jar供三方调用
  10. android服务和进程详解