![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Android NDK
程序猿强哥
这个作者很懒,什么都没留下…
展开
-
gradle flag contained ARMEABI, ARM64_V8A not targeted by this project.的解决方案
ABIs [arm64-v8a,armeabi-v7a,armeabi] set by 'android.injected.build.abi' gradle flag contained 'ARMEABI, ARM64_V8A' not targeted by this project.你使用NDK时,出现了上面的这个错误,运行项目时,会发现apk中,没有生成相应的动态库。上面报错和AndroidStudio版本有一定关系,有一种简单的解决方案,就是不管上面的错误,只要我们在build.gradle中,原创 2020-05-20 00:15:43 · 2411 阅读 · 0 评论 -
AndroidStudio3.6 用ffmpeg开发音视频02 将编译好的ffmpeg静态库和头文件拷贝到AndroidStudio中
在AndroidStudio上新建一个项目我的AndroidStudio是3.6的,可能你们的创建过程和我的不一样,但我建议更新到3.6,AndroidStudio3.6开发NDK特别高效.直接点击Finish如果你们出现和我下面一样的错误这里说的是没有指定NDK的根目录,在你已经下载ndk的情况下,你可以点击project struct ->在如下选择ndk的路径如果你没有下载过ndk,那么你可以根据我下方博客进行搭建Android JNI学习01-A原创 2020-05-17 13:14:42 · 308 阅读 · 0 评论 -
AndroidStudio3.6 用ffmpeg开发音视频01 带领初学者一步一步在ubuntu上开始编译ffmpeg
链接:https://pan.baidu.com/s/1zB9r5WwuTMIPNMlYl5HlvA提取码:5ndl没有Ubuntu的朋友,可以看我下篇博客进行搭建VMware 搭建 Ubuntu 教程为什么需要编译ffmpeg?ffmpeg是用C语言写的,我们想要使用在JNI中引用ffmpeg提供的函数,那么首先就需要将ffmpeg的源代码编译成静态库或者是动态库,这样在JNI中,我们就可以以静态库或动态库的方式去加载ffmpeg中的函数。为什么需要NDK?ffmpeg虽然是C.原创 2020-05-15 15:21:14 · 241 阅读 · 0 评论 -
Android JNI学习10-AndroidStudio3.6 在JNI中创建JNI线程,并且实现在JNI线程中调用java层的方法
来模拟一个小功能,在JNI中,创建一个线程,用于下载文件,当文件下载成功之后,通知java层的方法进行更新。开始实践吧首先在MainActivity中创建native方法downloadThread编写downloadThread对应的实现函数extern "C"JNIEXPORT void JNICALLJava_com_example_jnistudy_MainActivity_downloadThread(JNIEnv *env, jobject thiz) { }原创 2020-05-11 20:05:32 · 424 阅读 · 0 评论 -
Android JNI学习09-AndroidStudio3.6 在JNI中动态注册java层的方法
链接:https://pan.baidu.com/s/1zB9r5WwuTMIPNMlYl5HlvA提取码:5ndl在了解动态注册之前,先来看下静态注册,如下在你编写java的native方法后,立即根据相应规则编写对应的native实现函数,这种native实现方式叫做静态注册,即在编译期间,就确定了对应关系。还有一种就是在运行期间,才确定java的native方法和native实现函数的对应,这种对应方式就叫做动态注册。现在就用代码来演示这个动态注册的过程。先在MainAct.原创 2020-05-11 16:55:40 · 258 阅读 · 0 评论 -
Android JNI学习08-AndroidStudio3.6 在JNI中创建java的实体类
链接:https://pan.baidu.com/s/1zB9r5WwuTMIPNMlYl5HlvA提取码:5ndl先创建实体类Beanpublic class Bean { public String info; public Bean(String info){ this.info = info; } public void jniCall(){ System.out.println(info); }}创建.原创 2020-05-11 14:14:42 · 278 阅读 · 0 评论 -
Android JNI学习07-AndroidStudio3.6 JNI函数调用java层实体类get,set 和 静态方法,以及获取和修改成员属性
本篇将实现的功能:通过JNI函数调用java层实体类的get,set 和 静态方法,以及成员属性先创建一个实体类public class User { public String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public原创 2020-05-11 11:31:20 · 562 阅读 · 0 评论 -
Android JNI学习06-AndroidStudio3.6 JNI函数更新java层的数组
链接:https://pan.baidu.com/s/1zB9r5WwuTMIPNMlYl5HlvA提取码:5ndl本篇以下篇的代码为例,实现在JNI函数里更新java层的数组,没有看过下篇的朋友,可以先去看下。Android JNI学习04-AndroidStudio3.6 java 向 C++函数传递数组在MainActivity中调用sendIntArrayToJNIsendIntArrayToJNI对应的JNI函数内容如下extern "C"JNIEXPORT j.原创 2020-05-10 00:40:13 · 334 阅读 · 1 评论 -
Android JNI学习04-AndroidStudio3.6 java 向 C++函数传递数组
链接:https://pan.baidu.com/s/1zB9r5WwuTMIPNMlYl5HlvA提取码:5ndl在MainActivity中添加如下代码可以发现,报红色,AndroidStudio希望我们继续创建sendIntArrayToJNI()的C++函数。快捷生成对应的C++函数鼠标放到红色上面:alt + enter生成的C++函数如下extern "C"JNIEXPORT jstring JNICALLJava_com_example_jnistud.原创 2020-05-09 15:34:58 · 635 阅读 · 0 评论 -
Android JNI学习03-AndroidStudio3.6 动手实现一个java调用c++的函数
C或者C++的函数想要被java调用,首先我们得写一个native方法,到时候JVM就可以通过native方法的名字去动态库里找对应的C或者C++函数。先编写一个native方法myJNIFunction(),如下AndroidStudio还挺智能,知道我们还没有编写对应的C++函数,所以报了个错,提示我们要赶快将C++函数写好。编写对应的C++函数.这时我们创建了一个空的...原创 2020-05-08 15:40:32 · 522 阅读 · 0 评论 -
Android JNI学习02-AndroidStudio3.6JNI示例demo讲解
请看第一个步骤,当执行到stringFromJNI()时,JVM一看,原来是一个native方法,这时,它就会去对应的位置找对应的c++函数。那么这时,问题就来了,这里的对应位置具体是在哪里呢?这里的位置实际上就是C++的动态库里,这个动态库等同于java中的jar包,jar包里有编译好的class文件。动态库里同样有提前编译好的c++文件。明白了,是在动态库里找之后,那么这个动态库长...原创 2020-05-08 14:02:29 · 199 阅读 · 0 评论 -
Android JNI学习01-AndroidStudio3.6搭建JNI环境
什么是JNI?有这么一种需求,比如,java函数想要调用C/C++的函数,如何实现呢?直接调用,肯定是不行的,这时,就需要一个中间人,java 去调用中间人的函数,然后中间人再去调用对应的C/C++函数。这里的中间人,实际上就是JNI,JNI的英文全称是:java Native InterfaceJNI是一套程序框架,我们只要在它的基础上,按照它给定的规则,就可以实现java函数...原创 2020-05-08 11:51:54 · 325 阅读 · 0 评论 -
在vs2017中通过CMake 配置ffmpeg 环境
ffmpeg工具包和本篇测试代码在如下链接:https://pan.baidu.com/s/1zB9r5WwuTMIPNMlYl5HlvA提取码:5ndl先用CMkae创建一个项目,之后在该项目中配置ffmpeg项目创建成功后,解压ffmpeg工具包解压之后,有3个文件夹配置CMakeLists.txt在创建的项目中,找到CMakeLists.txt...原创 2020-04-29 17:27:10 · 2198 阅读 · 0 评论 -
Android NDK 入门学习 C语言04 理解指针的本质
什么是指针?举个生活中的例子,当一个人披上护士服,我们把这个人叫做护士,当这个人披上军服,我们又会把这个人叫做军人。同样的道理,当一个变量保存的是内存中的一个值的时候,那么这个变量就叫做普通变量,而当这个变量保存的是一个内存地址的时候,那么这个变量就叫做指针。如果还是不理解,那么就来看下面的图。在计算机里,内存是以字节为单位进行组织的,每一个字节都会对应一个内存地址。内存地址中,保...原创 2020-04-26 22:17:51 · 156 阅读 · 0 评论 -
Android NDK 入门学习 C语言03基本数据类型
在C语言里,基本数据类型有如下intlongfloatdoubleint 用于保存整数 代码示例如下long 也是用于保存整数,代码示例如下都是用于保存整数,那么int 和long之间有什么区别吗?额,在计算机早期的时候有区别,但是在现代的计算机已经没有区别了,早期时int 占用2字节的空间,long占用4字节的空间,而现在的计算机int 和 long ...原创 2020-04-26 21:02:19 · 126 阅读 · 0 评论 -
Android NDK 入门学习 C语言02创建第一个C项目
打开vs2017,按如下图,依次点击文件-新建-项目选择CMake,然后点击确定创建好项目后,结构如下接下来,我们先运行下这个项目,看下具体效果,双击如下按钮它会提示你选择一个启动项目,我们将CMakeProject1.cpp作为启动项目,只需要双击CMakeProject1.cpp就行了,双击后,效果如下此时再点击运行按钮,就可以正常运行了运行后,...原创 2020-04-26 11:41:35 · 229 阅读 · 0 评论 -
Android NDK 入门学习 C语言01-vs2017安装
由于NDK涉及到C和C++的知识,所以前期我打算先写一些C和C++的教程,后面再讲NDK。C/C++的开发软件是vs2017,没有安装的朋友可参考下方进行安装,相关软件都在百度网盘中。链接:https://pan.baidu.com/s/1zB9r5WwuTMIPNMlYl5HlvA提取码:5ndl双击vs2017安装文件首次运行会出现如下界面,点击继续点击继续后...原创 2020-04-25 21:44:14 · 269 阅读 · 0 评论