NDK

Android JNI和NDK关系

痞子三分冷 提交于 2019-11-27 23:03:05
1、什么JNI Java Native Interface(JNI)标准是java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI 是本地编程接口,它使得在 Java 虚拟机(VM) 内部运行的 Java 代码能够与用其它编程语言(如 C、C++ 和汇编语言)编写的应用程序和库进行交互操作。 上面过程分为2个部分: 第一、用C语言生成一个库文件。 第二、在java中调用这个库文件的函数。 2、NDK NDK全称:Native Development Kit。 NDK是一系列工具的集合。 * NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。这些工具对开发者的帮助是巨大的。 * NDK集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。 * NDK可以自动地将so和Java应用一起打包,极大地减轻了开发人员的打包工作。 个人理解,NDK就是能够方便快捷开发.so文件的工具。 JNI的过程比较复杂,生成.so需要大量操作,而NDK就是简化了这个过程。 3、java中调用.so文件代码 其中,在java中加载库文件的代码如下: System.loadLibrary(*.so的档案名); 例如

史上最强NDK入门项目实战

只愿长相守 提交于 2019-11-27 23:02:47
目标: 利用NDK生成SO库,使用SO库进行JNI调用,在Android sdcard创建文件并写入数据。 工具: NDK1.5 R1, android SDK1.5 R1, SDCARD, Eclipse , ADT 0.9, Eclipse Galileo for C/C++, Cygwin 1.5。 工具比较多,我是在Windows XP进行操作的,如果在Ubuntu或者其他的Linux系统下进行操作直接进入步骤2即可。请看步骤: 1. 安装Cygwin 关于Cygwin的安装请自行百度或者google,因为网速原因,建议大家使用本地安装包进行下载: http://www.gougou.com/search?search=cygwin&id=2 下载一个38.2M 即可,我用的就是这个版本。 2. 安装NDK 进入正题安装NDK,首先打开cygwin,然后使用cd命令进入你的NDK根目录,(不会用linux命令??Google去),然后运行:build/host-setup.sh 如果出现以上的信息,说明安装正确,如果出现GCC为找到,请输入gcc命令查看,如果出现toolchain未找到的信息,请试着修改build/host-setup.sh文件第一行代码, 将:#!/bin/sh 改成#!/bin/bash, 在Ubuntu上这个是需要修改的 安装成后

Android NDK编译

亡梦爱人 提交于 2019-11-27 19:27:28
记录下ndk如何编译.so文件 按部就班的说下: 首先下载NDK,这个我是直接在Android studio里面下载的,也没去官网下载,下载好了,就是配置环境变量了,因为我是从Android studio里面下载的,所以就直接在path中配置D:android_sdk/ndk-bundle这个路径了,配好了后我们可以用ndk-build去cmd命令台检测下看下是否配置成功 接下来就是在Android studio中配置了,需要在sdklocation中配置下,还有local.properties以及gradle.properties中去配置,具体配置网上一大堆,这里没有难点 首先我们想要打出一个.so文件来,我们肯定是要先写Java代码 **第一步:**解释一下这里代码的意思: native这个就是我们提供出去的方法,这个方法到时候要和.c文件里面或者.cc文件里面的方法名一致,我们再静态中去加载我们打出来的.so文件, 这里的参数名字不是.so文件的名字,而是我们在打包的时候配置的名字,这个配置下面介绍 public class JniKit { //这里的方法名如果报错那是正常的,不影响 public static native int calculate(int num); static { System.loadLibrary("JniDemo"); } } 第二步: *

Android NDK编译

浪子不回头ぞ 提交于 2019-11-27 19:27:21
记录下ndk如何编译.so文件 按部就班的说下: 首先下载NDK,这个我是直接在Android studio里面下载的,也没去官网下载,下载好了,就是配置环境变量了,因为我是从Android studio里面下载的,所以就直接在path中配置D:android_sdk/ndk-bundle这个路径了,配好了后我们可以用ndk-build去cmd命令台检测下看下是否配置成功 接下来就是在Android studio中配置了,需要在sdklocation中配置下,还有local.properties以及gradle.properties中去配置,具体配置网上一大堆,这里没有难点 首先我们想要打出一个.so文件来,我们肯定是要先写Java代码 **第一步:**解释一下这里代码的意思: native这个就是我们提供出去的方法,这个方法到时候要和.c文件里面或者.cc文件里面的方法名一致,我们再静态中去加载我们打出来的.so文件, 这里的参数名字不是.so文件的名字,而是我们在打包的时候配置的名字,这个配置下面介绍 public class JniKit { //这里的方法名如果报错那是正常的,不影响 public static native int calculate(int num); static { System.loadLibrary("JniDemo"); } } 第二步: *

Eclipse之NDK编译-- Type 'jint' could not be resolved, and JNIEnv, jclass错误解决办法

折月煮酒 提交于 2019-11-27 17:07:59
最近在研究面部识别美白相关的功能。使用的是opencv,就去研究了。今天正好有空就把安装了ndk,安装完成之后就试图去编译demo程序,hellow-jni c代码,一开始编辑就报错了3个错误信息: Type 'jint' could not be resolved Type 'JNIEnv' could not be resolved Type 'jclass' could not be resolved 之后我就网上Google了一下,找到了解决方案,下面将解决方案共享给大家: 在jni项目上右键选择属性 在选项面板的左侧选择 C/C++ General->Paths and Symbols . 在面板的右侧选择 Includes, 然后点击Add %ndkroot%\platforms\android-20\arch-arm\usr\include (%ndkroot%是ndk的根目录路径) 你可以自己选择不同版本的ndk,只要更android-20就可以了。 来源: http://www.cnblogs.com/wangpf/p/5019466.html

Application.mk文件使用说明

耗尽温柔 提交于 2019-11-27 15:53:12
本文档介绍了 ndk-build 所使用的 Application.mk 编译文件。 我们建议先阅读 概念 页面,然后再阅读本页面。 概览 Application.mk 指定了 ndk-build 的项目范围设置。默认情况下,它位于应用项目目录中的 jni/Application.mk 下。 注意 :其中许多参数也具有模块等效项。例如, APP_CFLAGS 对应于 LOCAL_CFLAGS 。无论何种情况下,特定于模块的选项都将优先于应用范围选项。对于标记,两者都使用,但特定于模块的标记将后出现在命令行中,因此它们可能会替换项目范围设置。 变量 APP_ABI 默认情况下,NDK 编译系统会为所有非弃用 ABI 生成代码。您可以使用 APP_ABI 设置为特定 ABI 生成代码。表 1 显示了不同指令集的 APP_ABI 设置。 表 1. 不同指令集的 APP_ABI 设置。 指令集 值 32 位 ARMv7 APP_ABI := armeabi-v7a 64 位 ARMv8 (AArch64) APP_ABI := arm64-v8a x86 APP_ABI := x86 x86-64 APP_ABI := x86_64 所有支持的 ABI(默认) APP_ABI := all 您也可以指定多个值,方法是将它们放在同一行上,中间用空格分隔。例如: APP_ABI :=

ndk-build使用说明

老子叫甜甜 提交于 2019-11-27 15:51:38
ndk-build 脚本可用于编译采用 NDK 基于 Make 的编译系统的项目。此外,我们还针对 ndk-build 使用的 Android.mk 和 Application.mk 配置提供了更具体的文档。 内部编译 运行 ndk-build 脚本相当于运行以下命令: $GNUMAKE -f <ndk>/build/core/build-local.mk <parameters> $GNUMAKE 指向 GNU Make 3.81 或更高版本, <ndk> 则指向 NDK 安装目录。您可以根据这项信息从其他 shell 脚本(甚至是您自己的 Make 文件)中调用 ndk-build。 从命令行调用 ndk-build 脚本位于 NDK 安装目录顶层。要从命令行运行该脚本,请在应用项目目录或其子目录中进行调用。例如: $ cd <project> $ <ndk>/ndk-build 在此示例中, <project> 指向项目的根目录, <ndk> 则是您安装 NDK 的目录。 选项 ndk-build 的所有参数都将直接传递到运行 NDK 编译脚本的底层 GNU make 命令。请将 ndk-build 和表单 ndk-build <option> 中的选项结合使用。例如: $ ndk-build clean 您可以使用以下选项: clean 移除之前生成的所有二进制文件。 注意

Android JNI MAC OS环境配置

左心房为你撑大大i 提交于 2019-11-27 14:22:54
Android JNI MAC OS环境配置 http://whbzju.github.io/blog/2013/06/01/android-jni-config/ JUN 1ST, 2013 | COMMENTS 前言—JNI技术简介 JNI是Java Native Interface的缩写,即“Java本地调用”,它是Java世界和Native世界的中介桥梁。其中Native世界一般指C/C++的世界。众所周知,Java是一种跨平台的语言,即Java编写的应用与平台无关。但是,计算机的世界在Java出现之前已经发展了很久,有很多优秀健壮的代码可以复用。比如Linux下的好多驱动模块、文件系统等。Java若去重新实现这些功能,未免费力不讨好,落下重复造轮子的名声。通过JNI技术,使用这些Native的模块,便成了一个折中的办法。同时,Java的世界依靠虚拟机构建,而虚拟机是native语言实现,并且虚拟机运行在具体的平台上,所以虚拟机本身是无法做到平台无关。通过JNI技术,可能做到在Java层的平台无关,即在Java层,底层的细节完全被屏蔽掉了。综合来讲,JNI技术一直支撑这Java世界,只不过我们平时接触的较少。 在Android的世界里,不允许纯C/C++的程序出现,但是它支持JNI,通过JNI来实现java和C/C++的交互。因此,JNI对于需要接触到Android源码

在Native code中访问java 对象(I)

跟風遠走 提交于 2019-11-27 14:20:23
打通了连接Java世界和native世界的通道之后,摆在我们面前的问题,就变为了,如何在native code中,来操作Java object呢?Java object可以分为如下3种: Java Language的基本数据类型,或称为原始数据类型 Java Language中内置的引用数据类型,如String,基本数据类型的数组 非Java Language内置的引用数据类型 Java Language的基本数据类型,与C/C++中的那些基本数据类型并无太大的差别,无论是作为参数传递,还是要作为返回值 。因而此处,对于 Java Language的基本数据类型就不再多做描述。下面主要说明一下在native code中访问 Java Language中内置的引用数据类型 和 非Java Language内置的引用数据类型。 Java Language中内置的引用数据类型 Java Language中内置的引用数据类型,又主要包括String和原始数据类型的数组。 String 首先来看String 。String所对应的native 类型为jstring。jstring既不同于C风格的一‘\0’结尾的char *的string,也不同于C++标准库中的string类型。我们不能像操作C风格的string那样来操作jstring,而必须首先经过JNI函数的转换,转换为UTF

Windows环境下Android NDK环境搭建

a 夏天 提交于 2019-11-27 13:04:36
前面介绍Windows下Android 开发环境配置,主要是面向JAVA开发环境,对只做APK上层应用开发人员来讲,基本够用了,由于Linux系统的权限限制和Android封装架构限制,很多涉及底层设备、接口、驱动控制的应用开发,不得不使用到本文的NDK开发环境(基于Android源码或内核源码修改),开发语言使用C/C++,NDK开发更接近于Linux开发,需要更多关于Linux应用编程知识。本文就介绍一下NDK环境搭建及基础编程思想。 本文演示环境:Windows 7 Ultimate+Cygwin+NDK r4。 基础阅读: Windows下Android开发环境搭建和配置 Android开发入门之环境概念介绍 一、下载android NDK 您可以下载NDK r4 for Windows或NDK r5 for Windows安装包,下载地址: 地址: http://developer.android.com/sdk/ndk/index.html 下载后解压缩到你的工作目录,例如:E:\Android\develop,结果如下图: Android NDK包含build、docs、samples、sources、GNUmakefile、ndk-build、ndk-gdb及readme等内容。samples下面包含几个实例开发演示项目,第一次接触NDK开发,建议先从示例开始