NDK

android jni生成so

…衆ロ難τιáo~ 提交于 2019-11-27 07:24:24
环境配置 进入android studio->setting->external Tools,创建Group命名NDK 命名1 name:javah,description:javah, Program:$JDKPath$\bin\javah.exe, Parameter:$FileClass$ Working directroy:$ModuleFileDir$\src\main\java 命名2 name:ndk-build,description:ndk-build, Program(本地ndk路径,没有的话需下载):xxxxx\ndk-build.cmd, Parameter:空 Working directroy:$ModuleFileDir$\src\main 创建好之后选中项目右击会出现NDK选项指向javah和ndk-build 配置文件创建 1、main下新建jni目录 2、在项目目录下新建MyJni.java:例如 public class MyJni { static { System.loadLibrary("MyJni"); } public native static String getString(); } 3、选中MyJni右击选NDK->javah生成 MyJni.h并放入jni目录下 6、jni目录下根据MyJni.h创建Test.c文件:例

linux下生成ffmpeg的so包用于android开发浅尝

北慕城南 提交于 2019-11-27 05:49:33
linux下生成ffmpeg的so包用于android开发浅尝 安装linux 下载ndk以及ffmpeg 修改配置文件 生产so包 首先,安装我是在windows里面安装的vwmware,然后安装的ubuntu虚拟机; 安装好以后,首先配置相关软件; //1.创建ffmpeg文件 jianghp92@ubuntu:~/Desktop$ mkdir ffmpeg jianghp92@ubuntu:~/Desktop$ //2.安装所需要的相关软件 //下载git jianghp92@ubuntu:~/Desktop$ sudo apt-get install git Reading package lists... Done Building dependency tree Reading state information... Done The following additional packages will be installed: git-man liberror-perl Suggested packages: git-daemon-run | git-daemon-sysvinit git-doc git-el git-email git-gui gitk gitweb git-cvs git-mediawiki git-svn The following NEW

Android Studio 2.2 更方便地创建JNI项目-CMake

只谈情不闲聊 提交于 2019-11-27 05:40:40
前段时间写了篇 Android Studio 第一个NDK例子 ,它是在使用 Android Studio2.1 版本的实现方案,最近发现 2.2 稳定版本已经出来了,所以更新了版本,发现使用该版本创建Jni项目更加方便了。 #使用Android Studio 2.2创建JNI项目(基于CMake) 1. 创建一个新项目(Create New Project) 点击 File — New — New Project ,把 Include C++ Support 前面的CheckBook勾上。 接下来的步骤跟创建普通项目一样。 2、配置C++支持功能(Customize C++ Support) 在 Customize C++ Support 界面默认即可。 C++ Standard 指定编译库的环境,其中 Toolchain Default 使用的是默认的 CMake 环境; C++ 11 也就是C++环境。两种环境都可以编库,至于区别,后续会跟进,当前博文使用的是 CMake环境 。 Exceptions Support 如果选中复选框,则表示当前项目支持C++异常处理,如果支持,在项目Module级别的 build.gradle 文件中会增加一个标识 -fexceptions 到 cppFlags 属性中,并且在so库构建时, gradle 会把该属性值传递给 CMake

Android Studio 第一个NDK例子

家住魔仙堡 提交于 2019-11-27 05:40:28
概述 NDK(Native Development Kit )一个工具集,它允许在Android开发中使用C/C++代码来使用物理设备的一些组件,比如传感器、输入设备等。 下载NDK和工具 NDK : NDK Downloads CMake :一个外部的构建工具,与Gradle建立自己的本地库。 你不需要这个组件,如果你只打算使用ndk-build。 LLDB :用于调试本地代码的调试器。 PS:这些工具都可以使用SDK Manager下载。 当前博文所用例子的环境如下所示: 名称 版本号 Android Studio 2.1 JDK 1.8.0_65 NDK 12.1.2977051 compileSdkVersion 23 buildToolsVersion 23.0.2 minSdkVersion 23 targetSdkVersion 23 PS:NDK如果在第三方平台下载,解压后需要配置环境变量—新建变量ANDROID_NDK,变量值为NDK解压路径,并把ANDROID_NDK追加到path中。 创建第一个NDK应用 1. 创建一个基本的项目 2. 配置NDK环境 在文件 local.properties 中配置ndk路径(追加即可) ndk.dir=C\:\\Users\\Administrator\\AppData\\Local\\Android\\sdk\\ndk

Android平台上的JNI技术介绍

て烟熏妆下的殇ゞ 提交于 2019-11-27 01:09:30
NDK简介 Android是由Google领导开发的操作系统,Android依靠其开放性,迅速普及,成为目前最流行的智能手机操作系统。 图0-1 Android系统架构图 图0-1是Android系统架构图。大多数程序位于最上层的Java Application层。Android通过把系统划分为几个层次从而使得开发者可以使用平台无关的Java语言进行Android应用开发,不必关心程序实际的硬件环境。 Google不仅为开发者提供了SDK开发套件,为了能让开发者使用C/C++编写的本地化的共享库,利用编译后的共享库更高效的完成计算密集型的操作来提高应用的性能,或者移植重用已有的C/C++组件,提高开发效率,Android 1.5之后,又推出了NDK(Native Development Kit)。有了NDK,开发者能够在Android平台上使用JNI(Java Native Interface)技术,实现应用程序中调用本地二进制共享库。 由于Android系统不同于以往的JNI使用环境而是在嵌入式硬件环境下,Android NDK提供了一套交叉编译工具链,和构建程序的工具方便开发者在桌面环境下编译目标平台的二进制共享库。 目前NDK提供了对ARMv5TE,ARMv7-A,x86和MIPS指令集平台的支持,同时在本地接口的支持上,目前以下本地接口支持 libc libm libz

Android NDK开发简介

帅比萌擦擦* 提交于 2019-11-27 01:09:17
最近由于项目的需要,使用到了Android的NDK技术,对项目核心算法跨平台的移植。简答而言,就是使用C对原来的算法进行了改进,并集成到原来的app项目里。 从前的项目一直没有使用NDK进行开发的机会,因而一直仰慕那些技术大牛们关于NDK以及C/C++开发而写的文章,觉得很深奥,因而一直蠢蠢欲动。 其实NDK的开发并不复杂,就入门而言甚至可以说是easy job,觉得它难是难于C/C++代码的编写与调试。这个是我最近从事NDK开发的一点感受! 首先,我们要弄懂几个概念,何为NDK,它和SDK以及JNI有什么关系?请前看下图: JNI (Java Native Interface),Java的本地接口 JNI 是Java众多开发技术中的一门,意在利用本地代码,为Java程序提供更高效,更灵活的拓展。应用场景包括:对运行效率敏感的算法实现、跨平台应用移植、调用系统的底层驱动、调用硬件等。尽管Java一贯以其良好的跨平台性而著称,但真正的跨平台之王,应该是C/C++,因为当前世上90%的系统都是基于C/C++编写的。Java的跨平台,是以牺牲效率换来对多种平台的兼容性,因而JNI可以说是Java短板的补充!举一例子说明,当前流行的移动操作系统Android,一直被说系统操作的流畅性不如IOS,原因在于Android的App是基于Java开发的,IOS的是基于Object-C开发的

Windows系统下配置Android NDK开发环境

谁说胖子不能爱 提交于 2019-11-27 00:07:48
通常Android系统中的应用都是用Java语言开发的,而Android NDK能让我们在Android开发中使用C/C++原生代码。使用NDK的好处包括合理复用现有的代码、提高程序中某些关键部分的执行效率。 本文就来讲讲怎样在Windows系统下配置NDK开发环境。这里假设大家已经安装好了Android的开发环境,包括jdk、android sdk以及eclipse。 步骤一:下载并安装NDK 首先,前往从网站 http://developer.android.com/sdk/ndk/index.html 获取Windows 平台的最新的Android NDK 套件,下载完成会得到一个安装文件。将下载的压缩包解压到 C:\ 盘的根目录下,得到文件夹android-ndk-r5b,NDK是不需要安装的,直接可以使用了。 步骤二:下载并安装cygwin 我们可以到Cygwin的官方网站下载Cygwin的安装程序,地址是: http://www.cygwin.com/ 或者直接使用下载连接来下载安装程序,下载连接是: http://www.cygwin.com/setup.exe 下载完成后,运行setup.exe程序,出现安装画面。下面是安装步骤: 1. 直接点“下一步”,出现安装模式的对话框。在对话框中我们看到有三种安装模式: Install from Internet

Android NDK开发之数组类型的操作

泪湿孤枕 提交于 2019-11-26 17:36:58
Jni 可以通过JNIEnv提供的方法,对传过来的Java数组进行相应的操作。它提供了两种函数:一种是操作Java的简单型数组的,另一种是操作对象类型数组的。 操作Java的简单型数组 因为速度的原因,简单类型的Java数组,会作为指向本地类型的指针暴露给本地代码调用。因此,它们 能作为常规的数组存取 。这个指针是指向实际的Java数组或者Java数组的拷贝的指针。另外,数组的布置保证匹配本地类型。 在C/C++中,jintArray 不能用下标对其进行直接存取,必须用到JNI中提供的接口函数进行操作。 为了存取Java简单类型的数组,就要要使用GetXXXArrayElements函数(见表),XXX代表了数组的类型。这个函数把Java数组看成参数,返回一个指向对应的本地类型的数组的指针。 函数 Java 数组类型 本地类型 GetBooleanArrayElements jbooleanArray jboolean GetByteArrayElements jbyteArray jbyte GetCharArrayElements jcharArray jchar GetShortArrayElements jshortArray jshort GetIntArrayElements jintArray jint GetLongArrayElements jlongArray

Android Studio, gradle and NDK integration

删除回忆录丶 提交于 2019-11-26 16:28:13
With the recent changes (release 0.7.3 around Dec 27), the new Android Build System starts to be really interesting also if you are using the NDK! Now this is really easy to integrate native libraries in your package and generate APKs for different architectures while correctly handling version codes (for more information on why this may be important, please refer to my first article ). update 2014/12/09: this article remains fully up-to-date if you’re using the recent android studio and gradle plugin’s 1.0+ releases. update 2014/11/1: changed output.abiFilter to output.getFilter(com.android

Android NDK开发之Jni的数据类型

痞子三分冷 提交于 2019-11-26 15:18:01
在前面的一篇博客《 Android NDK开发简介 》,我简单地说明了Android NDK开发的流程,以及其重要的一环:JNI层得开发。今天我再详细说明一下自己的学习经验。 JNI是Java代码和C/C++代码通信的桥梁,其角色在某种意义上 就是一个翻译员 ,从设计模式来看叫 适配器。 两者的沟通,首要的一定要对嘴型,对channel,沟通才能到位。计算机程序的基本组 成, 从狭义来讲,就是数据结构+算法。由于Java和C/C++是两种不同的编程语言,它们各自拥有自家定义的数据类型和结构。JNI的第一步就是统一转换其中一方的数据类型,这就好比我们跟外国友人沟通,我们得说英语一样子 。下表是Java的8大基本类型,在Jni层对应的数据描述: Java Native(jni.h) boolean jboolean byte jbyte char jchar short jshort int jint long jlong float jfloat double jdouble 复杂一点的对象类型,其对应的数据描述如下图: 这里补充说明一下: Java中的返回值void和JNI中的void是完全对应的 Java中的基本数据类型(boolean, byte, char, short, int, long, float, double),在JNI中对应的数据类型只要在前面加上 j 就对应了