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 可变印刷的更多相关文章

  1. 【转】 Android 开发 之 JNI入门 - NDK从入门到精通

    原文网址:http://blog.csdn.net/shulianghan/article/details/18964835 NDK项目源码地址 : -- 第一个JNI示例程序下载 : GitHub  ...

  2. 【转】JNI学习积累之一 ---- 常用函数大全

    原文网址:http://blog.csdn.net/qinjuning/article/details/7595104 本文原创,转载请注明出处:http://blog.csdn.net/qinjun ...

  3. C语言可变参数在宏定义中的应用

    在C语言的标准库中,printf.scanf.sscanf.sprintf.sscanf这些标准库的输入输出函数,参数都是可变的.在调试程序时,我们可能希望定义一个参数可变的输出函数来记录日志,那么用 ...

  4. 设置UILabel可变高度(根据文本内容自动适应高度)

    @property(nonatomic)UILabel *showLabel;   // 计算文本所占高度,计算出来之后设置label的高度 // 第一个参数:字体大小,字体大小/样式影响计算字体的高 ...

  5. C在宏定义中使用的语言可变参数

    于C标准库的语言,printf.scanf.sscanf.sprintf.sscanf入输出函数,參数都是可变的.在调试程序时.我们可能希望定义一个參数可变的输出函数来记录日志,那么用可变參数的宏是一 ...

  6. 【Android 应用开发】Android 开发 之 JNI入门 - NDK从入门到精通

    NDK项目源码地址 : -- 第一个JNI示例程序下载 : GitHub - https://github.com/han1202012/NDKHelloworld.git -- Java传递参数给C ...

  7. JNI编程实现(Linux)

    JNI是Java Native Interface的缩写,是Java平台的本地调用,从Java1.1就成为了Java标准的一部分,它允许Java代码和其它语言的代码进行互相调用,只要调用约定支持即可, ...

  8. Android JNI中C和JAVA代码之间的互相调用

    关于Android studio中使用NDK/JNI环境和入门:http://blog.csdn.net/quan648997767/article/details/64923143 1. C代码回调 ...

  9. Java中JNI的使用详解第三篇:JNIEnv类型中方法的使用

    转自: http://blog.csdn.net/jiangwei0910410003/article/details/17466369 上一篇说道JNIEnv中的方法的用法,这一篇我们就来通过例子来 ...

随机推荐

  1. ArcGIS 10.2 操作SQLite

    SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它.ArcGIS 10.2 提供了对SQLite数据库的支持,这对那 ...

  2. Oracle 11g服务详解

    装上Oracle之后大家都会感觉到我们的电脑慢了下来,如何提高计算机的速度呢?我们应该打开必要的服务,关闭没有用的服务.下面是Oracle服务的详解: Oracle ORCL VSS Writer S ...

  3. hdu3033(变形分组背包)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3033 题意:Iserlohn要买鞋,有k种牌子,每种牌子至少买一双鞋子.每双鞋子有标价跟实际价值.求用 ...

  4. hdu1267(递推)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1267 题意:假定一个字符串由m个H和n个D组成,从左到右扫描该串,如果字符H的累计数总是不小于字符D的 ...

  5. android最近心得整理

    activity中OnAttachedWindow生命周期在OnResume之后,所以对长宽获取在推荐在OnAttachedWindow中进行. onDetachedWindow是在OnDestroy ...

  6. PS顶级胶片滤镜插件 Alien Skin Exposure v6.x最新通用汉化补丁

    Alien Skin Exposure v6.0 是一款专业的PS胶片调色滤镜软件,使用Alien Skin Exposure可以迅速将照片调出各种胶片效果,如电影胶片.宝丽来胶片效果.波拉潘胶片效果 ...

  7. 一篇哥们自己的写的IBM电话面试感想-@大国

    两天没写博了,还是没有养成一个习惯.前天和昨天休息,和哥们几个出去打球,运动一下,放松下脑子.今天就补一篇我哥们自己的写的关于他的IBM电话面试的感想,希望能帮到有需要的人. ------------ ...

  8. 简单的刷票系统(突破IP限制进行投票) (转)

    前言 相信大家平时肯定会收到朋友发来的链接,打开一看,哦,需要投票.投完票后弹出一个页面(恭喜您,您已经投票成功),再次点击的时候发现,啊哈,您的IP(***.***.***.***)已经投过票了,不 ...

  9. [背景分离] 识别移动物体基于高斯混合 MOG

    使用很easy,  frame 就是当前帧,  foreground 是取得的, binary 型背景, 0.03是学习速率能够依据实际调整. cv::BackgroundSubtractorMOG ...

  10. NET MVC异常处理模块

    一个简单的ASP.NET MVC异常处理模块   一.前言 异常处理是每个系统必不可少的一个重要部分,它可以让我们的程序在发生错误时友好地提示.记录错误信息,更重要的是不破坏正常的数据和影响系统运行. ...