基於 Android NDK 的學習之旅-----JNI LOG 列印
原文連結: https://blog.csdn.net/dui_cky/article/details/6686460
程式都是調出來的。
下面我介紹下JNI層的log列印方法的使用,類似與Android sdk提供的log
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 StringsetParamToJNI(String msg); /** * 載入JNI生成的so庫檔案 */ static { System.loadLibrary(libSoName); }
2、Android.mk 檔案的配置
之前有介紹過相關的內容,如果對配置有不清晰的地方請閱讀 Android.mk 檔案 簡介
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 <string.h>
include<android/log.h>
include <jni.h>
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 <android/log.h>
ii、 __android_log_print(ANDROID_LOG_INFO,"JNIMsg", " Log Content ");
JNIMsg 為 你想輸出到的過濾標籤
Log Content 為你 想輸出的相關資訊,用法與C的Printf一樣
4、執行程式
輸入內容

點擊發送
檢視控制檯列印資訊

有不理解的兄弟請留言,個人技術有限,有講錯的地方請大牛們指出,講的不夠全面的請多多包涵,謝謝,
點選下載原始碼 NDK列印 Log例子
最後給大家分享一份非常系統和全面的Android進階技術大綱已經進階資料
想學習更多Android知識,或者獲取相關資料請加入Android技術開發交流 878873098 進 群 即可找 群 管理免費領取。
主要是針對做移動開發一到五年,想系統深入提升或者是困於瓶頸的小夥伴。
Android高階技術大綱,以及系統進階視訊;

Android高階技術大綱

Android 進階視訊資料