JNI 可变印刷
1.包log.h
#ifndef __MULTI_TRACE_H__
#define __MULTI_TRACE_H__
#ifdef ANDROID_NDK_BUILD
#define LOG_TAG "NATIVE NDK INFO"
#include <android/log.h> // only use in NDK
#define LOGE(...) ((void)__android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__))
#define LOGD(...) ((void)__android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__))
#define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__))
#define LOGW(...) ((void)__android_log_print(ANDROID_LOG_WARN, LOG_TAG, __VA_ARGS__))
#elif defined ANDROID_SOURCE_BUILD
#define LOG_TAG "NATIVE SRC INFO"
extern "C" {
#include <cutils/log.h> // only use in ANDROID SOURCE
}
#define LOGE(...) LOG(LOG_ERROR, LOG_TAG, __VA_ARGS__)
#define LOGD(...) LOG(LOG_DEBUG, LOG_TAG, __VA_ARGS__)
#define LOGI(...) LOG(LOG_INFO, LOG_TAG, __VA_ARGS__)
#define LOGW(...) LOG(LOG_WARN, LOG_TAG, __VA_ARGS__)
#elif defined IOS_PLATFORM_BUILD
#define LOGE printf
#define LOGD printf
#define LOGI printf
#define LOGW printf
#elif defined WP_PLATFORM_BUILD
#define LOG_TAG "NATIVE WINDOWS PHONE"
#define LOG_ERROR "ERROR"
#define LOG_DEBUG "DEBUG"
#define LOG_INFOR "INFOR"
#define LOG_WARN "WARN"
void LOG(const char* status, const char* tag, const char* format, ...);
#define LOGE(...) LOG(LOG_ERROR, LOG_TAG, __VA_ARGS__)
#define LOGD(...) LOG(LOG_DEBUG, LOG_TAG, __VA_ARGS__)
#define LOGI(...) LOG(LOG_INFO, LOG_TAG, __VA_ARGS__)
#define LOGW(...) LOG(LOG_WARN, LOG_TAG, __VA_ARGS__)
#else
#define LOGE printf
#define LOGD printf
#define LOGI printf
#define LOGW printf
#endif
#endif
2.在 Android.mk 中配置
LOCAL_PATH := $(call my-dir) // 设置为当前文件夹
include $(CLEAR_VARS) // 清空变量
LOCAL_MODULE := ApkPatchLibrary // 终于生成的 .so 文件 会是次名钱夹 lib (如这个名为 libxxx, 生成的.so文件包名就是此名)
LOCAL_CFLAGS = -DANDROID_NDK_BUILD -D__STDC_FORMAT_MACROS -D__STDC_INT64__ // 设置这句相当于每一个c/c++文件里声明了 xxxxx(-Dxxxxx)
LOCAL_CXXFLAGS :=
LOCAL_C_INCLUDES := $(LOCAL_PATH)
LOCAL_SRC_FILES := com_lib_utils_Patch.c // 编译的c/c++文件
LOCAL_LDLIBS := -lz -llog // 须要加上 这个日志才会打印出来,-l 是固定声明,(如:-lz标示载入系统 z.so包。 -llog标示载入系统 log.so包)
include $(BUILD_SHARED_LIBRARY) // 设置声明 动态库
3.打印日志。请看样例:
JNIEXPORT jint JNICALL Java_com_lib_utils_PatchUtils_patch(JNIEnv *env,
jobject obj, jstring old, jstring new, jstring patch) {
char * ch[4];
ch[0] = "bspatch";
ch[1] = (char*) ((*env)->GetStringUTFChars(env, old, 0));
ch[2] = (char*) ((*env)->GetStringUTFChars(env, new, 0));
ch[3] = (char*) ((*env)->GetStringUTFChars(env, patch, 0));
LOGD("11111111111111111111");
const char *str = (*env)->GetStringUTFChars(env, old, 0);
const char *strnew = (*env)->GetStringUTFChars(env, new, 0);
const char *strpatch = (*env)->GetStringUTFChars(env, patch, 0);
LOGD("The first is %s", str);
LOGD("The second is %s", strnew);
LOGD("The third is %s", strpatch);
LOGD("11111111111111111111");
int ret = applypatch(4, ch);
(*env)->ReleaseStringUTFChars(env, old, ch[1]);
(*env)->ReleaseStringUTFChars(env, new, ch[2]);
(*env)->ReleaseStringUTFChars(env, patch, ch[3]);
return ret;
}
这样就能够打印出 old, new。patch 这三个参数(变量)的值该。
版权声明:本文博客原创文章。博客,未经同意,不得转载。
JNI 可变印刷的更多相关文章
- 【转】 Android 开发 之 JNI入门 - NDK从入门到精通
原文网址:http://blog.csdn.net/shulianghan/article/details/18964835 NDK项目源码地址 : -- 第一个JNI示例程序下载 : GitHub ...
- 【转】JNI学习积累之一 ---- 常用函数大全
原文网址:http://blog.csdn.net/qinjuning/article/details/7595104 本文原创,转载请注明出处:http://blog.csdn.net/qinjun ...
- C语言可变参数在宏定义中的应用
在C语言的标准库中,printf.scanf.sscanf.sprintf.sscanf这些标准库的输入输出函数,参数都是可变的.在调试程序时,我们可能希望定义一个参数可变的输出函数来记录日志,那么用 ...
- 设置UILabel可变高度(根据文本内容自动适应高度)
@property(nonatomic)UILabel *showLabel; // 计算文本所占高度,计算出来之后设置label的高度 // 第一个参数:字体大小,字体大小/样式影响计算字体的高 ...
- C在宏定义中使用的语言可变参数
于C标准库的语言,printf.scanf.sscanf.sprintf.sscanf入输出函数,參数都是可变的.在调试程序时.我们可能希望定义一个參数可变的输出函数来记录日志,那么用可变參数的宏是一 ...
- 【Android 应用开发】Android 开发 之 JNI入门 - NDK从入门到精通
NDK项目源码地址 : -- 第一个JNI示例程序下载 : GitHub - https://github.com/han1202012/NDKHelloworld.git -- Java传递参数给C ...
- JNI编程实现(Linux)
JNI是Java Native Interface的缩写,是Java平台的本地调用,从Java1.1就成为了Java标准的一部分,它允许Java代码和其它语言的代码进行互相调用,只要调用约定支持即可, ...
- Android JNI中C和JAVA代码之间的互相调用
关于Android studio中使用NDK/JNI环境和入门:http://blog.csdn.net/quan648997767/article/details/64923143 1. C代码回调 ...
- Java中JNI的使用详解第三篇:JNIEnv类型中方法的使用
转自: http://blog.csdn.net/jiangwei0910410003/article/details/17466369 上一篇说道JNIEnv中的方法的用法,这一篇我们就来通过例子来 ...
随机推荐
- 解决SQL查询总是超时已过期
解决SQL查询总是超时已过期 .在WIN8里提示:OLE DB 或 ODBC 错误 : 查询超时已过期; HYT00 1.由于数据库设计问题造成SQL数据库新增数据时超时 症状: Microso ...
- c++ 如何获取系统时间 - zjnig711的信息仓库 - 博客频道 - CSDN.NET
c++ 如何获取系统时间 - zjnig711的信息仓库 - 博客频道 - CSDN.NET c++ 如何获取系统时间 分类: C/C++ 2008-05-08 22:15 14115人阅读 评论(5 ...
- HDU4876ZCC loves cards(多校题)
ZCC loves cards Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Tot ...
- 读懂Java中的Socket编程(转)
Socket,又称为套接字,Socket是计算机网络通信的基本的技术之一.如今大多数基于网络的软件,如浏览器,即时通讯工具甚至是P2P下载都是基于Socket实现的.本文会介绍一下基于TCP/IP的S ...
- 创建并使用静态库(ar 命令)
创建并使用静态库(ar 命令) archive命令的功能是:创建或改动归档文件或者从归档文件里析取信息.能够简单的理解为一个打包工具,将成员文件依照一定的规则构建到.a文件里, ...
- 读书笔记:《为什么大猩猩比专家高明, How We Decide》
读书笔记:<为什么大猩猩比专家高明, How We Decide> 英文的书名叫<How We Decide>,可能是出版社的原因,非要弄一个古怪的中文书名<为什么大猩猩 ...
- poj2528(线段树)
题目连接:http://poj.org/problem?id=2528 题意:在墙上贴海报,海报可以互相覆盖,问最后可以看见几张海报 分析:离散化+线段树,这题因为每个数字其实表示的是一个单位长度,因 ...
- 数据库关于group by 两个或以上条件的分析
首先group by 的简单说明: group by 一般和聚合函数一起使用才有意义,比如 count sum avg等,使用group by的两个要素: (1) 出现在select后面的 ...
- php将中文插入数据库出现乱码
通过php向mysql数据库插入数据,然后在数据库中查看的时候全是乱码(中文),但是取出之后放在页面上仍然正常.就是通过数据库查看的时候全是乱码不能阅读. mysql以UTF-8编码来保存中文,页面提 ...
- java获取当前日期时间代码总结
1.获取当前时间,和某个时间进行比较.此时主要拿long型的时间值. 方法如下: 要使用 java.util.Date .获取当前时间的代码如下 代码如下 复制代码 Date date = new ...