C++
文章平均质量分 88
Android小安
这个作者很懒,什么都没留下…
展开
-
Android C++系列:JNI中发送Http网络请求
之前Linux网络编程的文章下有小伙帮咨询jni中发送http请求的示例,本文基于libcurl库实现http网络请求发送功能。libcurl是一个免费和易于使用的客户端URL传输库,支持DICT, FILE, FTP, FTPS, GOPHER, gopers, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, MQTT, POP3, POP3S, RTMP, RTMP, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET和TFTP。原创 2022-06-17 16:20:54 · 2108 阅读 · 0 评论 -
Android C++系列:JNI引用管理
在 Native 代码中有时候会接收 Java 传入的引用类型参数,有时候也会通过 NewObject 方法来创建一个 Java 的引用类型变量。在编写 Native 代码时,要注意这个代表 Java 数据结构类型的引用在使用时会被 GC 回收的可能性。我们知道,在Java中提供了四个级别的引用:强引用,软引用,弱引用和虚引用:虚引用:虚引用是最弱的一种引用关系,如果一个对象仅持有虚引用,那么它就和没有任何引用一样,它随时可能会被回收,在 JDK1.2 之后,用 PhantomReference 类来原创 2022-06-14 21:33:33 · 352 阅读 · 0 评论 -
Android C++系列:JNI开发准则
JNI 定义了 Android 使用 Java 或 Kotlin 编程语言编的代码编译的字节码与原生代码(使用 C/C++ 编写)互动的方式。JNI 是一套标准的协议,不受硬件限制,支持从动态共享库加载代码,在一些情况对比直接使用Java高效。我们可以使用 Android Studio 3.2 及更高版本的内存性能剖析器中的 JNI 堆视图来查看全局 JNI 引用,并查看这些引用创建和删除的位置。本文基于Android NDK官方文档中的提示信息结合自己开发过程的思考,从性能、可维护性、鲁棒性等角度总结JN原创 2022-06-10 21:20:58 · 760 阅读 · 0 评论 -
Android C++系列:JNI常见问题
本文整理了JNI开发中常见的问题和解决方案。智能语音交互SDK工程模块编译时指定的ANDROID_PLATFORM统一是23:,ndk使用的是版本是17,在手上现有设备跑的都没问题,但是在一个新采购的temi移动机器人上跑不起来,定位到问题是信号处理库报了下面问题:最开始以为是信号处理库中用到了什么不兼容方法,把库的实现都改为空实现后仍报该错误,网上查询到是target version和目标设备不对应会报该错,机器人的系统版本是6.0,信号处理库编译时Application.mk中设置的,修改完后就果然解原创 2022-06-08 21:44:45 · 2162 阅读 · 0 评论 -
Android C++系列:C++最佳实践3 constexpr与decltype
有一种值不会改变并且在编译过程就能得到计算结果的表达式我们称为常量表达式。字面值属于常量表达式,用常量表达式初始化的const对象也是常量表达式:一个对象或者表达式是不是常量表达式由它的数据类型和初始值共同决定,但是在一些复杂的系统中,我们难以分辨一个初始值是不是常量表达式。如何让编译器帮助我们判断是否是常量表达式呢?C++11中,引入了关键字constexpr,允许将变量声明为constexpr类型以便由编译器来验证变量的值是否是常量表达式。声明为constexpr的变量一定是一个常量,而且必须用常量表原创 2022-06-06 21:32:21 · 197 阅读 · 0 评论 -
Android C++系列:C++最佳实践2多重继承与虚继承
Java和C++在语法层面比较的时候就不得不提到C++的多继承,我们知道Android是单继承,C++是多继承。在大型项目中不可避免的会用到多继承,本文分析C++多继承的一些特征。C++中,我们可以在派生列表中包含多个基类:关于多继承的几点说明:在多继承中,子类的对象包含每个基类的子对象,比如Sub继承Base1,Base2,Base1又继承自Base,那么Sub对象的结构如下图:构造一个派生类的对象将同时构造并初始化它的所有基类子对象,并且多重继承的派生类的构造函数值也只能初始化它的直接子类。子类的构造原创 2022-06-01 22:00:06 · 302 阅读 · 0 评论 -
Android C++系列:C++最佳实践1虚函数
1. 背景C++多态的核心技术基础就是虚函数,虚函数允许我们使用同样的基类指针调用同一个方法的不同实现版本。我们Android使用Java开发过程中,方法重写技术自动实现了多态,C++角度可能更繁琐一些,本文从Java程序员思维角度来阐述C++虚函数及开发过程一些准则。2. 什么是虚函数在Java中我们实现继承结构的两个类:class Base{ public void action(){ System.out.pritln("in Base"); }}class Sub extend原创 2022-05-30 21:22:44 · 170 阅读 · 0 评论