阅读此文前你需要掌握:
基础的Android开发知识,创建普通的界面
基础的CMake知识,可以编写简单的CMake工程
创建工程
![](https://pic2.zhimg.com/80/v2-2884c3b8274eb7ccbdf0460fe3028861_720w.jpg)
- 打开AndroidStudio 勾选C++选项
![](https://pic2.zhimg.com/80/v2-de665b34b18d891ecbabf07ae6878c81_720w.jpg)
勾选选项
- 添加External Tool
其实Externa Tool我们就是使用了javah:
![](https://pic1.zhimg.com/80/v2-dc6bdba7597d5e26abf6dda018078230_720w.jpg)
- Program:$JDKPath$/bin/javah(调用javah)
- Args:-classpath “$Classpath$” -v -jni “$FileClass$”(设置参数)
- Work Directory:$SourcepathEntry$/../jni(设置工作目录)
这样我们就可以通过右键将Jni的.h文件生成到jni文件夹下了。
右键:ExternalTools/javah
![](https://pic4.zhimg.com/80/v2-58101a8c14d3e6d62a49adfe7a726fb7_720w.jpg)
文件目录如下:
- src/main/java —— 存放Java源代码
- src/main/jni —— 存放C++源代码
然后我们对CMakeLists进行编写:
![](https://pic2.zhimg.com/80/v2-aa47f21007fade7a5628f50818a9097d_720w.jpg)
Include文件夹在jni下,源代码文件夹也在jni下。
模块名为NDKDemo
如果要使用android库时则加入android-lib
如下:
![](https://pic1.zhimg.com/80/v2-c60e24d1c8e66dea0d863f5faacca618_720w.jpg)
然后我们编写NDKHelper
![](https://pic1.zhimg.com/80/v2-c4c2d81943b928b81fd168a3436eb0b4_720w.jpg)
我们编写了一个native函数add
并且加载NDKDemo这个库
注意我们需要先对Java进行编译然后再执行javah
我们对Gradle进行调整
![](https://pic4.zhimg.com/80/v2-d0c9212381ea1348e2e344aa6ecafb03_720w.jpg)
添加了NDK以及sourceSets模块。
ndk{
moduleName "NDKDemo"
}
sourceSets {
main{
jni.srcDirs = []
jniLibs.srcDir "src/main/libs"
}
}
指定模块名以及数据源
编写以及编译C++
![](https://pic3.zhimg.com/80/v2-b168f7a2ea71282b10396383bd58354a_720w.jpg)
生成的jni wrapper如上图。
![](https://pic1.zhimg.com/80/v2-2782a9881bed76e4c73733a0d662e62c_720w.jpg)
对其进行实现。
最后再主界面使用该函数即可。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout./activity_main/);
// Example of a call to a native method
TextView tv = (TextView) findViewById(R.id./sample_text/);
tv.setText(String./valueOf/(NDKHelper./Instance/.Add(100, 200)));
}
}
工程地址:vgvgvvv/ResetCore