android ndk 入门3 - log实现
2015-11-26 10:12
519 查看
新建工程NDKTest2,新建活动MainActivity
修改local.properties,加入ndk路径
修改gradle.properties,加入:
新建MyNDK.java:
修改MainActivity.java:
修改app/build.gradle,添加
点击MyNDK.java,右键->External Tools->javah,生成com_zj_ndktest2_MyNDK.h:
新建MyLog.h:
新建main.cpp:
新建Android.mk:
运行:
![](http://img.blog.csdn.net/20151126094619744?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
#####################################################################
NDK关于日志输出的头文件在
android/log.h文件可以在$(NDK_HOME)/platforms/android-*/arch-*/usr/include/android里面
关键语句是:
可以自定义上述log输出函数,新建MyLog.h:
以后想要日志输出即可使用
##################################################################33
关于如何添加NDK能够log的方法,在网上找到4种:
1.在Android.mk中加入:
注意,上述语句应加在include $(CLEAR_VARS)之后
2.在Android.mk中加入:
3.在Android.mk中加入:
4.在app/build.gradle中加入:
修改local.properties,加入ndk路径
ndk.dir=$$
修改gradle.properties,加入:
android.useDeprecatedNdk=true
新建MyNDK.java:
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(); } }
修改app/build.gradle,添加
android { defaultConfig { ndk { moduleName "hello-log" ldLibs "log" } } }
点击MyNDK.java,右键->External Tools->javah,生成com_zj_ndktest2_MyNDK.h:
/* 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
新建MyLog.h:
#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
新建main.cpp:
#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"); }
新建Android.mk:
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, ...)
可以自定义上述log输出函数,新建MyLog.h:
#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
注意,上述语句应加在include $(CLEAR_VARS)之后
2.在Android.mk中加入:
LOCAL_LDFLAGS := -llog
3.在Android.mk中加入:
LOCAL_SHARED_LIBRARIES += liblog
4.在app/build.gradle中加入:
android { defaultConfig { ndk { ldLibs "log" } } }
相关文章推荐
- Android开发实现距离位置变化
- 19条ANDROID平台设计规范(转)
- Android官方通信框架Volley:解析VolleyError获取包体信息
- Android 判断字符串是否相等
- Android小记:提升 Android 性能的建议
- android studio 快捷键!!!
- Android Fragment 真正的完全解析(上)
- 关于android布局的小知识
- Android中Service(服务)详解
- 【Android】弹出菜单popupmenu
- Android 进程的内存管理分析
- Android 时间选择器的原生态界面
- AndroidAnnotaions框架的使用
- Android开发技巧——使用PopupWindow实现弹出菜单
- android全屏去掉title栏的多种实现方法
- android:layout_weight的真实含义
- Android——终极版上拉刷新下拉加载(兼容ScrlooView、ListView、GridView以及各类布局)
- Android 高仿UC浏览器监控剪切板弹出悬浮窗功能
- 类似通讯录分组的Android PinnedSectionListView,且分组标签悬停滑入滑出
- Android aidl Binder框架浅析