1、配置NDK路径,右击Module->Open Module Setting->SDK Location->Android NDK Location(ndk根目录)
2.local.properties中配置
ndk.dir=E:\android-ndk64-r10-windows-x86_64\android-ndk-r10
3.创建一个AndroidLibrary
4.在这个module中的build.gradle 里面的defaultConfig中添加:
ndk{
moduleName "ndklib" //生成的so名字,实际为 libndklib.so
abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86" //输出指定三种abi体系结构下的so库
}
3.创建一个java类
public class MathAdd
{
public static native int add(int num1,int num2);
}
4.创建jni目录,默认为src/main/jni
5.在Terminal中,执行javah命令生成.h文件
javah -d ndklib/src/main/jni/
-classpath \Users\Mrxingkong\studio\ViewPagerTab1510\Android5_x\ndklib\build\intermediates\classes\debug
-jni com.zxk.mrxingkong.ndklib.MathAdd
-d . 表示将在当前目录下生成一个当前命令行文件夹,产生的头文件就在这里面了;
-classpath 指明class文件所在的位置(目录)
-jni com.ndkdemo.MathKit 指定类名(包名+指定的类名)
6.在jni中会生成.h文件,该文件文件名可以更改,里面生成内容。
JNIEXPORT jint JNICALL Java_com_zxk_mrxingkong_ndklib_MathAdd_add
(JNIEnv *, jclass, jint, jint);
7.在jni中创建与.h文件名相同的cpp文件。(最好相同),实现相加。
#include "MathAdd.h"
JNIEXPORT jint JNICALL Java_com_zxk_mrxingkong_ndklib_MathAdd_add
(JNIEnv *env, jclass jcls, jint num1, jint num2)
{
return num1 + num2;
}
10.make项目,若是报错。
gradle.properties 中添加:android.useDeprecatedNdk = true
在jni包下面创建util.c的空文件。
再make一遍。
11.Make成功后在/build/intermediates/ndk/debug/lib/下生成4个so文件。
至此,so库创建完成。
以下是对这个库进行引用。
1.copy以上make生成的再lib下的4个文件夹,到新建module的libs下。
2.在新建module的build.grade中添加路径进行libs
sourceSets.main {
jniLibs.srcDir 'libs' // <-- 你的.so库的实际路径
}
3.在module的java包下面创建之前lib创建的类,必须是包名+ 类名(com.zxk.mrxingkong.ndklib.MathAdd)
package com.zxk.mrxingkong.ndklib;
/**
* Created by Mr.xingkong on 2016/1/20.
*/
public class MathAdd
{
static {
System.loadLibrary("ndklib");
}
public static native int add(int num1,int num2);
}
至此,工作基本完成,现在可以在MainActivity中调用,点击按钮,toast出结果:
public void add(View view)
{
int result = MathAdd.add(100, 200);
Toast.makeText(MainActivity.this,result+ "", Toast.LENGTH_SHORT).show();
}
描述的有点乱,有空我会再缕缕。