NDK

什么是Android NDK

痞子三分冷 提交于 2020-02-15 06:48:07
1、NDK是一系列工具的集合。 NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。这些工具对开发者的帮助是巨大的。 NDK集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。 NDK可以自动地将so和Java应用一起打包,极大地减轻了开发人员的打包工作。 2、NDK提供了一份稳定、功能有限的API头文件声明。 Google明确声明该API是稳定的,在后续所有版本中都稳定支持当前发布的API。从该版本的NDK中看出,这些API支持的功能非常有限,包含有:C标准库(libc)、标准数学库(libm)、压缩库(libz)、Log库(liblog)。 3、NDK的发布,使“Java+C”的开发方式终于转正,成为官方支持的开发方式。 使用NDK,我们可以将要求高性能的应用逻辑使用C开发,从而提高应用程序的执行效率。 使用NDK,我们可以将需要保密的应用逻辑使用C开发。毕竟,Java包都是可以反编译的。 NDK促使专业so组件商的出现。(乐观猜想,要视乎Android用户的数量) 4、NDK将使Android平台支持C开发的开端。 NDK提供了的开发工具集合,使开发人员可以便捷地开发、发布C组件。同时

FFmpeg ndk交叉编译, 集成到android

狂风中的少年 提交于 2020-02-14 00:15:04
1. 软件版本 1.1 ndk android-ndk-r15c 1.2 ffmepg ffmpeg-4.0.5.tar.bz2 1.3 x264 x264-stable.tar.gz 2. 编译x264静态库 tar -zxvf x264-stable.tar.gz mv x264-stable x264 vi build.sh #!/bin/bash NDK=/home/sheng/ndk/android-ndk-r15c configure() { CPU=$1 PREFIX=$(pwd)/android/$CPU HOST="" CROSS_PREFIX="" SYSROOT="" if [ "$CPU" == "armv7-a" ] then HOST=arm-linux SYSROOT=$NDK/platforms/android-21/arch-arm/ CROSS_PREFIX=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi- else HOST=aarch64-linux SYSROOT=$NDK/platforms/android-21/arch-arm64/ CROSS_PREFIX=$NDK/toolchains/aarch64

NDK学习(一)向现有安卓项目加入jni

ε祈祈猫儿з 提交于 2020-02-11 20:06:07
做安卓半年了,用的都是java,目前老大分配了一个任务,在现有项目上添加图片的滤镜功能,使用滤镜一般计算量比较大,需要用到NDK,也就是C相关的知识,虽然之前学过C/C++,但还没用到过项目中,尤其还要用到安卓中,这一篇算是为NDK学习开个头。 如何使得现有项目支持NDK呢? 首先就是要下载NDK相关的工具链,然后加入C文件。 1、首先我们在MainActivity中假如一个 getNdkText 的native方法,并且在 onCreate 方法中调用 public native String getNdkText(); 然后就要在c文件中实现这个方法了 2、工程目录切到project,在app模块下新建一个cpp文件夹,用于放置C文件 3、然后在cpp文件夹下面新建自己的c文件,命名为hello.cpp hello.cpp内容如下: #include <jni.h> #include <string> extern "C" JNIEXPORT jstring JNICALL Java_cn_hzw_ndk_1learn_MainActivity_getNdkText( JNIEnv *env, jobject /* this */) { std::string hello = "Hello from C++"; return env->NewStringUTF(hello.c

android gradle NDK简介

杀马特。学长 韩版系。学妹 提交于 2020-02-10 05:27:17
本章介绍在Android开发中,关于NDK,gradle相关的知识点。 1.NDK简介 (1)NDK是一系列工具的集合 NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。这些工具对开发者的帮助是巨大的。NDK集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。NDK可以自动地将so和Java应用一起打包,极大地减轻了开发人员的打包工作。 (2)NDK提供了一份稳定、功能有限的API头文件声明 Google明确声明该API是稳定的,在后续所有版本中都稳定支持当前发布的API。从该版本的NDK中看出,这些API支持的功能非常有限,包含有:C标准库(libc)、标准数学库(libm)、压缩库(libz)、Log库(liblog)。 2.NDK产生的背景   Android平台从诞生起,就已经支持C、C++开发。众所周知,Android的SDK基于Java实现,这意味着基于 Android SDK进行开发的第三方应用都必须使用Java语言。但这并不等同于“第三方应用只能使用Java”。在Android SDK首次发布 时,Google就宣称其虚拟机Dalvik支持JNI编程方式

android ndk开发之 application.mk

狂风中的少年 提交于 2020-02-08 05:38:00
  Application.mk 这个文件是被Android ndk编译系统使用的, 和android.mk文件一样也是被放在jni目录下, Applicaiton.mk也是一个GNU makefile, 他描述的对象是当前应用程序定义的所有模块, 在里面也可以定义变量,定义的变量可以被所有模块使用。   以下是Application.mk编译文件支持的一些内置变量: APP_MODULES : 默认Android ndk编译系。统会编译所有在Android.mk文件里面定义的模块, 这个变量可以覆盖这个行为,提供一个需要编译的用空格隔开的模块列表 APP_OPTIM :这个变量可以用来改变产生的二进制优化等级, 设置release或者debug的优化, 默认这里是release 模式, 这个变量可以设置debug模式去产生未优化的二进制代码以方便调试 APP_CPPFLAGS :这个变量列表定义要传递到所有模块的c++源文件中的标志。 APP_CLAGS :这个变量列表定义要传递到所有模块的c或者c++源文件中的标准 APP_BUILD_SCRIPT :默认android ndk编译系统会在工程的jni子目录下查找 Android.mk文件, 使用这个变量可以改变这种方式, 这样就可以使用其他的编译文件了 APP_ABI :默认android

android studio ndk配置和ndk开发

一笑奈何 提交于 2020-02-08 05:27:22
配置开发环境:   1:下载ndk,导入android studio中。     2:在项目中引入NDK    3:在计算机path变量中导入NDK路径,在编译.h文件的时候会用到。    一:建立java的native方法,然后编译生成.class文件. 二:根据.class文件生成.h文件。   1:打开Terminal,然后进入APP目录下的main主目录。   2:输入命令。       3:生成.h文件,生成的jni文件夹在main文件夹下。      三:根据.h文件编写.c文件 。   #include <string.h> #include <jni.h> jstring Java_com_xingdongmei_media_FirstJni_getFromName(JNIEnv *env, jobject ob){ return (*env)->NewStringUTF(env, "Hello from JNI !");}void Java_com_xingdongmei_media_FirstJni_setAge(JNIEnv *env, jobject ob, jfloat age){ // printf("asdf!");}调用getFromName方法,返回"hello from JNI !"四:在jni文件夹下新建application

NDK笔记(二)-在Android Studio中使用ndk-build

六眼飞鱼酱① 提交于 2020-02-08 05:25:59
前面一篇我们接触了CMake,这一篇写写关于ndk-build的使用过程。刚刚用到,想到哪儿写哪儿。 环境背景 Android开发IDE版本:AndroidStudio 2.2以上版本(目前已经升级到2.2.3) 计算机环境:Window 64位系统 Demo工程的创建与设置 1.新建一个工程,并在app/src/main路径下新建jni文件夹。 2.在java代码中,新建NdkBuildTest类(包含native方法),并用javah命令生成头文件。 这里需要注意几点: (1)javah是JDK中的程序,所以需要将JDK的bin路径添加到计算机的环境变量path中,才能在terminal中使用这个命令。 (2)javah命令中,-d指定创建头文件的目标路径,-classpath指定类的路径,由于当前路径是main,所以指定其中的java即可。 效果如下: 3.新建C文件,实现native方法 4.在jni路径下新建Android.mk文件 5.在Module(app)的build.gradle中进行ndk-build配置 这里主要配置两点: (1)在defaultConfig节点中,添加ndk,在这里作一个abi的过滤,(默认的abi好像是MIPS) (2)在android节点中,添加externalNativeBuild节点,在里面配置ndkBuild的makefile路径。

AS下NDK开发(一)

邮差的信 提交于 2020-02-08 05:23:08
捣鼓了一天的NDK,总结下。 Eclipse下开发ndk好像挺麻烦的样子,看书上要下载Cygwin,eclipse还要下载插件CDT。。而在AS上就方便多啦。下载android ndk。安装,配置环境,即可。 NDK(android native develop kits ):android 本地开发工具集 ,这些工具帮助开发者快速开发C或C++动态库,并自动将so和java文件打包成apk,可以把c/c++ ->编译成一个 linux下可以执行的二进制文件 java代码里面就可以通过jni 调用执行二进制的文件. JNI :java本地开发接口,JNI是一个协议这个协议用来沟通java代码和外部的本地代码(c/c++).通过这个协议,java代码就可以调用外部的c/c++,代码外部的c/c++代码也可以调用java代码。 JNI开发用途:Native code效率高,数学运算,实时渲染的游戏上,音视频处理(极品飞车,opengl,ffmpeg等。 一、配置NDK环境 下载NDK,网上有很多,下载好之后,解压即可。然后在AS中配置,依次点击:File ->ProjectStructure:如图: 配置好之后,会在项目下的local.properties文件里自动添加:ndk.dir=D\:\\android-ndk-r10d 如果没有就自己加上,我的是自动的。 二、建立app项目

Android NDK简介

浪尽此生 提交于 2020-02-05 17:30:24
Android NDK 是Android SDK的相关工具集,用于扩展Android SDK的功能。 AndroidNDK不是一个单独的工具,它是一个包含API、交叉编译器、链接程序、调试器、构建工具、文档和示例应用程序的综合工具集。 Android NDK的一些主要组件 : ·ARM、x86和MIPS交叉编译器 ·构建系统 ·Java原生接口头文件 ·C库 ·Math库 ·POSIX线程 ·最小的C++库 ·ZLib压缩库 ·动态链接库 ·Android日志库 ·Android像素缓存区库 ·Android原生应用APIS ·OpenGL ES 3D图形库 ·OpenSL ES 原生音频库 ·OpenMAX AL最小支持 Android NDK的结构(一些重要的文件和子目录): ndk-build:该shell脚本是Android NDK构建系统的起始点。 ndk-gdb:该shell脚本允许用GUN调试器调试原生组件。 ndk-stack:该shell脚本可以帮助分析原生组件崩溃时的堆栈追踪。 build:该目录包含了Android NDK构建系统的所有模块。 platforms:该目录包含了支持不同Android目标版本的头文件和库文件。Android NDK构建系统会根据具体的Android版本自动引用这些文档。 samples:该目录包含了一些示例应用程序

Android NDK学习(1) 简介

大憨熊 提交于 2020-02-05 09:15:39
转: http://www.cnblogs.com/fww330666557/archive/2012/12/14/2817385.html 一、What is the NDK? The Android NDK is a toolset that lets you embed components that make use of native code in your Android applications. Android applications run in the Dalvik virtual machine. The NDK allows you to implement parts of your applications using native-code languages such as C and C++. This can provide benefits to certain classes of applications, in the form of reuse of existing code and in some cases increased speed. Android NDK是一个工具集合,它可以让你利用原生代码在你的Android Applications中嵌入组件。。 Android应用在虚拟机上执行.NDK允许你的应用通过