基于 Android NDK 的学习之旅-----JNI LOG 打印(附源码)

2014-11-24 10:24:40 · 作者: · 浏览: 0

1、Android 应用层 MainActivity.java
主要功能代码


a) 静态载入 So 库


b) 声明本地方法


c) 调用本地方法


代码附有注释如下:


public classMainActivity extends Activity {


//也就是你mk配置文件中的 LOCAL_MODULE := NDK_02


private static final String libSoName ="NDK_02";


private Context mContext = null;


private Button btnClick = null;


private String mStrMSG = null;


private EditText etContext = null;


/** Called when the activity is firstcreated. */


@Override


public void onCreate(BundlesavedInstanceState) {


super.onCreate(savedInstanceState);


setContentView(R.layout.main);


mContext = this;


etContext =(EditText)findViewById(R.id.et_content);


btnClick = (Button) findViewById(R.id.btn_click);


btnClick.setOnClickListener(newOnClickListener() {



public void onClick(View v) {


mStrMSG =setParamToJNI(getContent());


if(mStrMSG == null) {


mStrMSG = "调用JNI失败";


}


LogUtils.toastMessage(mContext,mStrMSG);


}


});



}



/**


* 获取输入框内容


* @return 输入框内容


*/


private String getContent() {


Stringstr = etContext.getText().toString();


returnstr.trim().length() > 0 str:"default value";


}



/**


* 该方法为native方法.


*


* 由C实现


*


* @return


*/


public native String setParamToJNI(String msg);



/**


* 载入JNI生成的so库文件


*/


static {


System.loadLibrary(libSoName);


}


LOCAL_PATH :=$(call my-dir)


include$(CLEAR_VARS)


LOCAL_C_INCLUDES:= $(LOCAL_PATH)/include


LOCAL_LDLIBS += -L$(SYSROOT)/usr/lib -llog


LOCAL_MODULE := NDK_02


LOCAL_SRC_FILES:= \


PrintLog.c


include$(BUILD_SHARED_LIBRARY)


要打印log 必须添加


LOCAL_LDLIBS += -L$(SYSROOT)/usr/lib -llog


3、JNI层PrintLog.c文件的实现
#include


#include


#include



jstringJava_com_duicky_MainActivity_setParamToJNI(JNIEnv* env, jobject thiz,


jstringmsg)


{



if(msg == NULL) {


//该方法为打印的方法


__android_log_print(ANDROID_LOG_INFO, "JNIMsg","Your params is null");


return(*env)->NewStringUTF(env, "Your params is null");


}



chardata[128];


memset(data,0, sizeof(data));


char*c_msg = NULL;


c_msg= (*env)->GetStringUTFChars(env, msg, 0);


//该方法为打印的方法


__android_log_print(ANDROID_LOG_INFO,"JNIMsg", "Get Param: %s From Java", c_msg);



return(*env)->NewStringUTF(env, "success");


}


i、 必须引用头文件#include


ii、 __android_log_print(ANDROID_LOG_INFO,"JNIMsg", " Log Content ");


JNIMsg 为 你想输出到的过滤标签


Log Content 为你 想输出的相关信息,用法与C的Printf一样


4、运行程序


输入内容



点击发送



查看控制台打印信息



NDK打印 Log例子 源码 下载


下载在Linux公社的1号FTP服务器里,下载地址:


密码:www.muu.cc


在 2011年LinuxIDC.com\8月\基于 Android NDK 的学习之旅-----JNI LOG 打印源码


下载方法见 http://www.linuxidc.net/thread-1187-1-1.html