
安卓NDK
whoami_I
这个作者很懒,什么都没留下…
展开
-
NDK学习(七)实现马赛克功能
之前在网上查找如何对图片进行打码操作,大多数的实现方式都是利用高斯模糊之类的方法来实现打码,最终在GPUImage里面找到了像素块那种形式的马赛克,不过GPUImage是用opengl实现的,因此在这里使用c来实现马赛克功能。像素块马赛克的基本思想是一个大的马赛克像素块里面的颜色是一样的,比如在一个30*30的区域内,统一使用左上角的像素值来表示整个马赛克像素块的颜色值。实现最终效果:代码:void mosaicBitmap(JNIEnv *env, jobject thiz, jobject b原创 2020-06-15 18:29:37 · 471 阅读 · 3 评论 -
Caused by: java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "_ZTINSt6__ndk18ios_b
今天更新一个库文件到项目上,编译是正常的,但是运行的时候报了这样一个错: Caused by: java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "_ZTINSt6__ndk18ios_baseE" referenced by "/data/app/com.tclhz.gallery.dev-jbo9-...原创 2020-04-26 19:53:24 · 4268 阅读 · 0 评论 -
NDK学习(六)C++的虚函数实现原理
谈到C和C++最大的不同之处,恐怕就是C++的多态了,通过一个基类指针调用函数的时候,能够知道根据具体的对象去调用合适的函数,如果是Java的话,因为有jvm的存在,我们可以脑补出这样一个画面,基类指针p指向一个对象,首先我们可以判断这个对象的类型,在Java中判断类型是很好实现的(类的信息储存在对象头中),获取到类信息之后,就沿着这个类的继承层次往上找,直到找到一个相同方法签名的方法。那么这个过...原创 2020-02-18 00:14:08 · 266 阅读 · 0 评论 -
NDK学习(五)C++的sizeof操作符
上一篇中已经提到了由于cpu的寻址特性,导致只能读取某些地址的数据,因此就有了一个对齐的概念,编译器会为我们的程序中私自添加一些填充数据,使得对象在内存中能够对齐,从而获取更佳的存取速度。C++中获取一个对象大小的操作符,之所以说是操作符,因为sizeof并不是一个语句,而是一个C++的内置操作符,sizeof的值在编译的时候,就已经定下来了,不需要等到运行时,通过sizeof来学习C++中数据...原创 2020-02-17 22:10:11 · 229 阅读 · 0 评论 -
NDK学习(四)C++开篇
之前学习过C++,但是几乎都忘的差不多了,连语法好多都忘了,因此就C++几个重要的点复习一下,顺便深入C++的内存模型来探讨C++和C有什么区别和共同点,C++的多态实现和Java的多态有什么不同,另外就C++的一些专有特性写一些文章,比如:模板、运算符重载、STL模版库、复制构造函数等。其实从编译得到的可执行文件来讲,C和C++并没有什么不一样,都是二进制代码,访问变量,就是到相应的地址获取变...原创 2020-02-17 21:12:24 · 277 阅读 · 0 评论 -
NDK学习(三)从Parcel源码学习如何创建自己的JNI层对象
上一篇中学到了jni和java中的类型和函数是如何对应的,这一篇讲一下如何定义自己的Java类型,使得JNI层也能对应上。1、jni函数的静态注册和动态注册java函数与jni函数能够对应起来是jvm在其中做工作的,之前我们已经知道根据java方法名称和ID,能够拼凑出一个jni层对应的方法,只要我们在编译的时候实现了这个方法,那么jvm就能够识别,准确的将java方法和jni函数匹配。但是这...原创 2020-02-12 22:58:43 · 483 阅读 · 0 评论 -
NDK学习(二)认识jni的类型
C要和Java进行交互,那么他们之间必然要进行数据的交流,那么C中如何获取到Java中的数据呢?这就是本篇需要介绍的核心。推荐一个网站https://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/jniTOC.html这个网站是jni的官方文档类型分两种,Primitive和引用类型。这两种类型的对照表如下:其实查看代码得...原创 2020-02-11 19:04:37 · 314 阅读 · 0 评论 -
NDK学习(一)向现有安卓项目加入jni
做安卓半年了,用的都是java,目前老大分配了一个任务,在现有项目上添加图片的滤镜功能,使用滤镜一般计算量比较大,需要用到NDK,也就是C相关的知识,虽然之前学过C/C++,但还没用到过项目中,尤其还要用到安卓中,这一篇算是为NDK学习开个头。如何使得现有项目支持NDK呢?首先就是要下载NDK相关的工具链,然后加入C文件。1、首先我们在MainActivity中假如一个getNdkText的...原创 2020-02-11 18:15:08 · 325 阅读 · 0 评论