1.下载ndk.
https://dl.google.com/android/repository/android-ndk-r16b-windows-x86_64.zip
2. 创建一个普通的工程
3.新建一个类,声明native方法。这个类是java与C/C++交互的中介,方法由java声明,由C/C++实现。
public class myJNI {
//加载so库
static {
System.loadLibrary("JniLib");
}
//native方法
public static native String sayHello();
}
4. Build->MakeProject, 生成class文件, 生成路径如下:
5. 命令行利用javah生成c++头文件
打开到上述debug目录, 然后利用javah命令生成c++ .h头文件
然后就看到.h文件了
6. 创建jni文件夹
7.将刚才生成的头文件放到jni文件夹下
创建一个与.h同名的cpp文件, 内部代码如下:
#include <jni.h>
#include "lynash_com_lyjnisodemo_myJNI.h"
JNIEXPORT jstring JNICALL Java_lynash_com_lyjnisodemo_myJNI_sayHello
(JNIEnv *env, jclass jobj){
return env->NewStringUTF("args in jni");
}
8.配置ndk路径
在local.properties文件增加
ndk.dir=F\:\\sdk\\android-ndk-r16b
9.在根目录gradle.properties下面加上: android.useDeprecatedNdk=true
意思就是允许使用低版本的NDK
10. 打开app Module的build.gradle文件
在defaultConfig节点里添加以下代码
注意这里的moduleName,是我们在之前自己编写的类里面加载的so库名
注意这里的moduleName,是我们在之前自己编写的类里面加载的so库名
defaultConfig {
applicationId "lynash.com.lyjnisodemo"
minSdkVersion 21
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
ndk {
moduleName "JniLib"
ldLibs "log", "z", "m"
abiFilters "armeabi-v7a", "x86","x86_64"
}
}
11.生成so库
Build->MakeProject
12.调用so库
建立jniLibs文件夹, 将上图中生成的so拷贝到jniLibs文件夹下
13.jni方法调用
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView text = (TextView)findViewById(R.id.text);
String s = myJNI.sayHello();
text.setText(s);
}
}
14. 主界面显示了 c++实现方法返回的字符串
初级使用方法大概如此. 后续研究点有用的. . .