前言
前面的文章我们基本已经把NDK的基本应用全部讲完了,我们在JAVA的调试中经常会用到Log.i什么的方法进行输出跟踪,这一篇我主要来说一下在NDK开发中,C++的代码中怎么实现日志输出。
实现方法
代码实现
我们还是用原来的那个Demo程序,按照我们的实现方法来进行
在c++文件中引用android/log.h头文件
我们打开native-lib.cpp文件,在顶部加入引用android/log.h,如下图
通过#define的宏定义组装我们的__android_log_print方法
代码为:
#define LOG_TAG "System.out"
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)
在想输出日志的地方直接进行输出即可
我们直接在上一章的两个数相乘的方法中进行日志输出看看结果,改造一下
extern "C"
JNIEXPORT jint JNICALL
Java_dem_vac_vaccaendk_MainActivity_plusFromJNI(JNIEnv *env, jobject instance, jint a, jint b) {
//首先获取class,这里传入的参数jobject是代表了Mainactivity,所以我们要自己查找
jclass jcls=env->FindClass("dem/vac/vaccaendk/VaccaeJNI");
if (jcls == NULL) {
return 0;
}
//获取方法
jmethodID jmethod = env->GetMethodID(jcls, "Plus", "(II)I");
if(jmethod==NULL) {
return 0;
}
//输出传入的a和b参数
LOGI("a=%d",a);
LOGI("b=%d",b);
//调用访法
//第一个参数为jobject的这是传入的是jobject是Mainactivity,
//如果在CallIntMethod里面直接用传入的肯定会出错,因为我们的
//方法是在VaccaeJNI的类里面,所以我们首先要实例化那个类,再调用
jobject jobj = env->AllocObject(jcls);
jint retint = env->CallIntMethod(jobj, jmethod, a, b);
//输出调用相乘方法得到的结果
LOGI("result=%d",retint);
return retint;
}
接下来我们看一下运行后的结果
从上图中我们可以看到,在Logcat的日志中已经输出我们每一步的输出,这样在调试C/C++的代码中可以通过输出方式找到哪一步出的问题,方便我们开发,提高效率。
原文链接:
Android NDK编程(番外篇)--- C/C++中使用LOG输出进行跟踪-腾讯云开发者社区-腾讯云 (tencent.com)
文章浏览阅读6.1k次,点赞3次,收藏5次。外围设备介绍计算机的外围设备(简称外设)虽然很多,但按功能分大类只有四类:输入、输出、存储、网络通讯。有些专业计算机需要的外围设备也不尽相同,并不都需要这四类外围设备。外围设备可以按需要组装,有些专业计算机甚至可以将存储设备和主芯片集成到一片芯片上,从而不再需要外加存储设备。最早的计算机(那时还只能称为计算器,只能做简单运算,如ABC机和ENIAC机)输入只是一些拨码开关,只能输入数字(还得是二进_计算机外围固定
文章浏览阅读1.5k次。java 图片中加文字_java怎么在图片上加文字
文章浏览阅读720次,点赞20次,收藏6次。B 选项,在创建模式时,可以不指定模式名。C 选项,兼容模式可选值为 AB、C、PG.安装GBase 8c分布式集群时所需的配置文件gbase.yml,在解压GBase8cV5 S3.0.0BXX CentOS x86 64.tar.bz2压缩包生成的目录中得到。真值的有效文本值是: TRUE、t、"true'、y、yes'、"1'TRUE'、true、整数范围内1~2^63-1、整数范围内-1~-2^63。GBase 8c 使用create table 创建表时,不指定参数,默认是astore,行存表。_如果需要打开delete语句的审计功能,需要开启下面哪个参数
文章浏览阅读334次。1 xmlns是XML Namespaces的缩写,中文名称是XML(标准通用标记语言的子集)命名空间。 web-app是web.xml的根节点标签名称 version是版本的意思 xmlns是web.xml文件用到的命名空间 xmlns:xsi是指web.xml遵守xml规范 xsi:schemaLocation是指具体用到的schema资源_xml文件里面的名词
文章浏览阅读1.6w次,点赞12次,收藏69次。OpenGL 中点圆、椭圆生成算法_用setpixel函数中点画圆算法代码c++
文章浏览阅读2.1k次。首先在HTML中写入div,命名为img,在这个div中加入一个span标签并命名为img-bg和img50(5星为50).<div class="img"> <span class="img-bg img50"></span> <span class="img-bg img45"></span> <span class="img-bg img40"></span> </div> 在css代码._css背景图高度占据一半另一半有别的背景色
文章浏览阅读3.9k次。Android MPAndroidChart:动态添加统计数据线【8】本文在附录相关文章6的基础上,动态的依次增加若干条统计折线(相当于批量增加数据点)。布局文件:
文章浏览阅读6.3k次。vmware中 centos的磁盘大小 20G->30G现象:fdisk -l可以看到增大后的磁盘总量,但是需要增加分区并格式化然后挂载才能使用.一、vmware中的设置先关闭虚拟机vm->settings->hard disk->utilities->expand->输入大小(增加后的大小)二、启动虚拟机,进入命令行1、 fdisk /dev/sda进入命令行Comman_linux虚拟机磁盘空间不足
文章浏览阅读927次。hive安装前提:1.基于hadoop2.7的完全分布式集群搭建完成hadoop2.7集群搭建2.MySQL8.0安装完成 安装centos7上MySQL8.0Hive2.3.8的安装下载链接:https://mirrors.tuna.tsinghua.edu.cn/apache/下滑找到hive点击进去点击hive2.3.9(hive2.3.9和hive2.3.8差别不大)下载画红线的也就是bin.tar.gz后缀的hive解压安装下载完成后通过xftp传到虚拟机上(基操不在赘述)_hive2.3.8安装
文章浏览阅读430次,点赞8次,收藏4次。在进行安装的时候有一个是否联网的选择,选择链接网络,则在安装的时候,可以看到在安装过程中,它会主动下载grub-efi-amd64-signed' package,确确实实,我在安装详情里看到了它有这个的download过程以及update过程。_the grub-efiamd64-signed' package failed to install intotarget without the g
文章浏览阅读451次。n_learn_data = int ( n_samples * 0.8 ) # 80% 的可用数据点 learn_data , test_data = samples [: n_learn_data ], samples [ - n_learn_data :] learn_labels , test_labels = labels [: n_learn_data ], labels [ - n_learn_data :]_从零开始搭建神经网络
文章浏览阅读1.4k次。我的题解放在github仓库了(喜欢的话,记得star哈)下面是汇总导航,如果你只想看其中某个题的话,点击题解直达。乙级的题目每个题都是一个有趣的故事,引导你去思考解决问题的能力,不是单纯的刷题。然后只涉及数组,循环,判断,字符串等基础编程语言语法的知识,不会设计复杂的算法与数据结构。一开始可能会有点吃力,正常,但是如果你全部刷完,leetcode上部分简单题对你来说是小case了。甲级主要是算法与数据结构,乙级刷完了,也可刷甲级, 甲级的题目特别好,测试用例丰富如果是急需找工作,面试的话刷lee_找工作pat乙级