通用编程

Unity程序员也该掌握的原生开发——快速上手:在AndroidStudio使用CMake编写NDK

阅读此文前你需要掌握:

基础的Android开发知识,创建普通的界面

基础的CMake知识,可以编写简单的CMake工程

创建工程

  • 打开AndroidStudio 勾选C++选项

勾选选项

  • 添加External Tool

其实Externa Tool我们就是使用了javah:

  • Program:$JDKPath$/bin/javah(调用javah)
  • Args:-classpath “$Classpath$” -v -jni “$FileClass$”(设置参数)
  • Work Directory:$SourcepathEntry$/../jni(设置工作目录)

这样我们就可以通过右键将Jni的.h文件生成到jni文件夹下了。

右键:ExternalTools/javah

文件目录如下:

  • src/main/java —— 存放Java源代码
  • src/main/jni —— 存放C++源代码

然后我们对CMakeLists进行编写:

Include文件夹在jni下,源代码文件夹也在jni下。

模块名为NDKDemo

如果要使用android库时则加入android-lib

如下:

然后我们编写NDKHelper

我们编写了一个native函数add

并且加载NDKDemo这个库

注意我们需要先对Java进行编译然后再执行javah

我们对Gradle进行调整

添加了NDK以及sourceSets模块。

ndk{
    moduleName "NDKDemo"
}
sourceSets {
    main{
        jni.srcDirs = []
        jniLibs.srcDir "src/main/libs"
    }
}

指定模块名以及数据源

编写以及编译C++

生成的jni wrapper如上图。

对其进行实现。

最后再主界面使用该函数即可。

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

发表回复

您的电子邮箱地址不会被公开。