1. 导入log头文件
在你使用的 .c/ .cpp 文件中
导入 log.h 头文件
#include<android/log.h>
2.在Android.mk 中
加上
LOCAL_LDLIBS :=-llog
注意Android.mk里有一行include $(CLEAR_VARS)
必须把LOCAL_LDLIBS :=-llog放在它后面才有用,
否则相当于没写。
3. 定义LOG 函数
先定义一个全局变量,再定义一些输出的LOG函数:
#define TAG "myDemo-jni" // 这个是自定义的LOG的标识
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,TAG ,__VA_ARGS__) // 定义LOGD类型
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO,TAG ,__VA_ARGS__) // 定义LOGI类型
#define LOGW(...) __android_log_print(ANDROID_LOG_WARN,TAG ,__VA_ARGS__) // 定义LOGW类型
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,TAG ,__VA_ARGS__) // 定义LOGE类型
#define LOGF(...) __android_log_print(ANDROID_LOG_FATAL,TAG ,__VA_ARGS__) // 定义LOGF类型
上述代码中定义的函数
分别对应于Android 的Java代码中的
Log.d(), Log.i(), Log.w(),Log.e(), Log.f()等方法.
4.举例
#include <jni.h>
#include <string.h>
#include <android/log.h>
#define TAG "myhello-jni-test" // 这个是自定义的LOG的标识
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,TAG,__VA_ARGS__) // 定义LOGD类型
extern "C" {
JNIEXPORT jstring JNICALL Java_com_snail_helloworld_MainActivity_myhello(JNIEnv * env, jobject obj);
};
JNIEXPORT jstring JNICALL Java_com_snail_helloworld_MainActivity_myhello(JNIEnv * env, jobject obj)
{
int i = 0;
LOGD("########## i = %d", i);
return env->NewStringUTF("Hello From CPP");
}
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello
LOCAL_SRC_FILES := hello.cpp
LOCAL_LDLIBS :=-llog
include $(BUILD_SHARED_LIBRARY)
分享到:
相关推荐
本教程将带你踏上“基于Android NDK的学习之旅”,重点探讨如何在JNI中进行LOG打印,以便于调试和理解代码执行过程。 首先,我们需要了解NDK。Android NDK(Native Development Kit)是Google提供的一套工具,用于...
在Android开发中,JNI(Java Native Interface)是一个关键的组件,它允许Java代码与其他语言编写的代码进行交互,特别是C++或C。JNI在处理性能敏感的计算、访问硬件特性或者利用现有C库时非常有用。然而,在JNI编程...
- 使用`__android_log_print`:Android SDK提供了一个原生的日志API,可以方便地在本地代码中打印日志,便于调试。 4. JNI最佳实践: - 错误处理:在本地方法中添加适当的错误检查和异常处理机制。 - 内存管理:...
Android JNI 调试打印 char 数组的实例详解是 Android 开发中的一种常见需求,特别是在 debug 和测试阶段。在 Android 中,使用 JNI 调用 native 方法时,需要将 char 数组转换为字符串,方便 debug 和 log 输出。...
- 使用`__android_log_print`函数进行日志打印,辅助排查问题。 - 利用`ndk-stack`工具解析崩溃堆栈,定位错误发生的位置。 9. **安全注意事项**: - 原生代码的漏洞可能被利用,导致安全问题。因此,遵循C/C++...
在"jniDemo Log版"中,你将看到如何在C/C++代码中使用Android的Log系统来打印日志。Android的日志系统是一个强大的调试工具,可以将信息、警告、错误等分类记录,供开发者查看。 要在C/C++代码中打印日志,你需要...
### jni 在C中打印信息到Eclipse中的方法详解 #### 概述 在Java Native Interface(JNI)中,我们经常需要将C/C++代码中的信息打印到开发环境的输出窗口,以便进行调试或监控程序运行状态。对于使用Eclipse作为...
本示例实现了Android JNI在C语言中打印log的配置,有关本示例的详细解析请参考博文:http://blog.csdn.net/l1028386804/article/details/47425073
在Android开发中,经常需要使用到JNI(Java Native Interface,Java本机接口)技术来实现Java代码与C/C++代码之间的交互。这对于想要利用低级语言的性能优势或访问只提供了C/C++ API的硬件设备的应用开发者来说尤为...
要配置NDK开发中的Log打印,我们需要以下几个步骤: 1. **设置预处理器宏**: 在C/C++源文件中,使用`__android_log_print()`函数来打印日志。但首先,需要在源文件中包含`<android/log.h>`头文件,并定义预处理器宏...
- 如果要使用调试日志打印,即`__android_log_print`函数,需要在`LOCAL_LDLIBS`中添加`-llog`。 **步骤4:编译JNI模块** - 进入到`/home/workspace/android-ndk-r4b/sources/LEDSJNI`目录。 - 使用`ndk-build`命令...
- 日志输出:使用`__android_log_print`宏在C/C++代码中打印日志,通过`Logcat`查看。 5. **注意事项** - 管理内存:C/C++中的内存管理不同于Java,需要手动分配和释放,避免内存泄漏。 - 异常处理:在JNI中,...
- 使用`__android_log_print()`等日志打印函数辅助调试。 6. **注意事项** - ABI兼容性:不同的设备可能支持不同的CPU架构,因此需要为每个支持的ABI生成相应的.so文件。 - 内存管理:JNI中需要手动进行内存分配...
在JNI代码中,应使用`__android_log_print()`等Android logging API记录错误信息,这样可以在不侵入Java层的情况下获取详细的调试信息。 ### 性能考虑 频繁地检查异常可能会影响性能,因此在不影响正确性的前提下...
在Android应用开发中,JNI(Java Native Interface)是一种让Java代码与本地C/C++代码交互的技术。通过JNI,开发者可以在不离开Android平台的基础上利用C/C++的高效性能和丰富的库资源,解决Java在某些场景下效率...
2. **日志输出**:使用`__android_log_print`宏进行本地代码的日志打印,便于调试。 3. **Android Studio的NDK调试**:可以通过设置断点,使用Android Studio的远程调试功能对本地代码进行调试。 **六、性能优化**...
在Android开发中,NDK(Native Development Kit)和JNI(Java Native Interface)是两个关键工具,它们允许开发者在原生代码(如C/C++)和Java代码之间进行交互。本练习2主要关注如何在Android NDK和JNI的帮助下,从...
`__android_log_print()`宏是Android SDK提供的一种日志打印方式,可以在C/C++代码中使用,便于查看调试信息。 总的来说,这个主题涵盖的内容广泛,包括JNI的初始化、基本类型转换、数组操作、对象和结构体的映射,...
----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance ...