概念
原生开发工具包(英语:native development kit,简称NDK)是一种基于原生程序接口的软件开发工具。通过此工具开发的程序直接以本地语言运行,而非虚拟机。因此只有java等基于虚拟机运行的语言的程序才会有原生开发工具包。
NDK帮助开发者快速地开发C(或C++)的动态库,自动将so和java应用一起打包到Apk
NDK提供工具以便JNI调用C/C++,而且提供了交叉编译器(交叉编译是在一个平台上生成另一个平台上的可执行代码。同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行。)可以修改.mk文件生成特定CPU平台的动态库。
NDK和JNI的关系
简单说就是JNI负责Java与C/C++进行互相操作,NDK提供工具方便在Android平台使用JNI。
通过实例了解NDK的用法
环境要求
1.Android studio3.X(老版本操作不太一样)
2.AS里安装安卓虚拟机
3.jdk配置
正式开始
1.建立一个空的安卓工程
2.安装NDK
选择File->project Structure->SDK Location->Android NDK location
两种安装方式
1.官网下载,在这里填写路径
2.没安装的情况下这里会有一个蓝色的download点击自动安装最新版本
这里安装完local.properties里会自动加上路径
手动在gradle.properties里面加上:
android.useDeprecatedNdk=true
(新版本好像不用加,不过建议加一下,最多警告一下弃用)
3.新建jni类,依次点击app–>src–>main–>java–>com.example.myapplication新建一个java类
(创建出来是.class结尾的我这里是已经ndk-build后的)
代码如下:
package com.example.myapplication;
public class JNITest {
JNITest(){
System.loadLibrary("JniLib");
}//加载动态链接库,名字要与后面建的一致
public native String getString();
//这个方法后面在C里面实现
}
4.在main下建一个jni文件夹来放.h头文件
5.建立头文件
alt+f12进入终端,直接是你的工程目录cd app/src/main
javac 命令生成.h头文件的格式为:
javac -encoding utf8 -h 目标文件夹 源文件夹
以我的为例
javac -encoding utf8 -h .\jni .\java\com\example\example\JNITest.java
然后就会发现生成了头文件
文件内容如下:(这个是自动生成的不用改)
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_example_myapplication_JNITest */
#ifndef _Included_com_example_myapplication_JNITest
#define _Included_com_example_myapplication_JNITest
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_example_myapplication_JNITest
* Method: getString
* Si