新建工程NDKTest2,新建活动MainActivity
修改local.properties,加入ndk路径
ndk.dir=$$
android.useDeprecatedNdk=true
package com.zj.ndktest2; /** * Created by root on 15-11-25. */ public class MyNDK { static { System.loadLibrary("hello-log"); } public static native void HelloLog(); }
修改MainActivity.java:
package com.zj.ndktest2; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); MyNDK.HelloLog(); } }
android { defaultConfig { ndk { moduleName "hello-log" ldLibs "log" } } }
/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class com_zj_ndktest2_MyNDK */ #ifndef _Included_com_zj_ndktest2_MyNDK #define _Included_com_zj_ndktest2_MyNDK #ifdef __cplusplus extern "C" { #endif /* * Class: com_zj_ndktest2_MyNDK * Method: HelloLog * Signature: ()V */ JNIEXPORT void JNICALL Java_com_zj_ndktest2_MyNDK_HelloLog (JNIEnv *, jclass); #ifdef __cplusplus } #endif #endif
#ifndef _MYLOG_H_ #define _MYLOG_H_ #include <android/log.h> #define TAG "test" #define LOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, TAG, __VA_ARGS__) #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, TAG, __VA_ARGS__) #define LOGI(...) __android_log_print(ANDROID_LOG_INFO, TAG, __VA_ARGS__) #define LOGW(...) __android_log_print(ANDROID_LOG_WARN, TAG, __VA_ARGS__) #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, TAG, __VA_ARGS__) #endif
#include <jni.h> #include "com_zj_ndktest2_MyNDK.h" #include "MyLog.h" #include <android/log.h> JNIEXPORT void JNICALL Java_com_zj_ndktest2_MyNDK_HelloLog (JNIEnv *env, jclass cla) { LOGV("hello verbose"); LOGD("hello debug"); LOGI("hello info"); LOGW("hello warn"); LOGE("hello error"); }
LOCAL_PATH := ${call my-dir} include $(CLEAR_VARS) LOCAL_MODULE := hello-log LOCAL_SRC_FILES := main.cpp include $(BUILD_SHARED_LIBRARY)
#####################################################################
NDK关于日志输出的头文件在
#include <android/log.h>
android/log.h文件可以在$(NDK_HOME)/platforms/android-*/arch-*/usr/include/android里面
关键语句是:
/* * Android log priority values, in ascending priority order. */ typedef enum android_LogPriority { ANDROID_LOG_UNKNOWN = 0, ANDROID_LOG_DEFAULT, /* only for SetMinPriority() */ ANDROID_LOG_VERBOSE, ANDROID_LOG_DEBUG, ANDROID_LOG_INFO, ANDROID_LOG_WARN, ANDROID_LOG_ERROR, ANDROID_LOG_FATAL, ANDROID_LOG_SILENT, /* only for SetMinPriority(); must be last */ } android_LogPriority;
/* * Send a formatted string to the log, used like printf(fmt,...) */ int __android_log_print(int prio, const char *tag, const char *fmt, ...)
#ifndef _MYLOG_H_ #define _MYLOG_H_ #include <android/log.h> #define TAG "test" #define LOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, TAG, __VA_ARGS__) #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, TAG, __VA_ARGS__) #define LOGI(...) __android_log_print(ANDROID_LOG_INFO, TAG, __VA_ARGS__) #define LOGW(...) __android_log_print(ANDROID_LOG_WARN, TAG, __VA_ARGS__) #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, TAG, __VA_ARGS__) #endif
##################################################################33
关于如何添加NDK能够log的方法,在网上找到4种:
1.在Android.mk中加入:
LOCAL_LDLIBS := -llog
2.在Android.mk中加入:
LOCAL_LDFLAGS := -llog
LOCAL_SHARED_LIBRARIES += liblog
android { defaultConfig { ndk { ldLibs "log" } } }