本文使用CMake进行NDK开发!!!
学会NDK就可以把你写或者别人写的C和C++代码在Android 下调用,可以大大提高性能和安全。
(注意)本文图文齐全,绝对可以让你轻松学会NDK开发的入门。注意Demo是Android Studio是自动生成的
一、概述
1.概述
Android 调c /c++代码,是每一个Android工程师进阶都要学的。本文简单讲解NDK入门。
我简单讲一下,接下要有到的东西。
NDK:
Native Development Kit
,是Android
的一个工具开发包 ,他属于Android,JNI属于JavaCMakeLists: 一款外部构建工具,可与 Gradle 搭配使用来构建原生库。如果您只计划使用 ndk-build,则不需要此组件。
LLDB是个开源的内置于XCode的具有REPL(read-eval-print-loop)特征的Debugger,其可以安装C++或者Python插件。
LLDB(这个我没有太了解,所以我没有下载)
2.环境配置
二、自动实现
1.新建项目:我建议你可以新建一个支持c++的Demo,来查看你的错误,做为Demo查看。
Android Studio已经相对智能,可以自动创建完成。
其实到这里Android调用c++已经完成了,运行一下,效果如下:
三、手动创建
接下来我们手动实现Android调用c/c++代码的Demo,首先再创建一个项目,为第一步。
这次我们不选择c++的选项,一直Net到Finsh完成新建项目。
1.创建我们需要的文件
NdkUtil.java
CMakeLists.txt
cpp文件夹里创建 native-lib.cpp
然后再一个个完善功能
1.把之前创建的文件写好
NdkUtil:一个调用c++的工具类,用来实现调用c++代码。注意这个类的类名和方法对c++的方法是有影响的
public class NdkUtil {
//静态代码,java最优先调用
static {
System.loadLibrary("native-lib");
}
//实现调用c++代码
public native String getCString();
}
native-lib.cpp:这是一个c语言的代码文件,如果你会c语言你可以自己写。不懂c也没有问题,你可以直接复制一下代码
#include <jni.h>
#include <string>
extern "C" JNIEXPORT jstring JNICALL
Java_com_example_ndk_1demo_NdkUtil_getCString(JNIEnv *env, jobject instance) {
std::string hello = "Hello from C++";
return env->NewStringUTF(hello.c_str());
}
CMakeLists.txt:用来配置Android调用c/c++
#这是个符号是注释的意思
#这个是配置版本最低为3.4.1
cmake_minimum_required(VERSION 3.4.1)
add_library(
# 设置库的名称。
native-lib
# 指定的NDK库的名称
# 你和我的一样就行
SHARED
# 你的cpp路径
src/main/cpp/native-lib.cpp)
2.链接c++项目和配置Gradle
右键 NdkUtil Link C++ project with Gradle
选择你的 CMakeLists.txt 的路径
如果你不知道,自己的CMakeLists.txt 在哪?你可以这样找到文件目录
3.实现
MainActivity
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView mText = findViewById(R.id.text);
NdkUtil ndkUtil = new NdkUtil();
mText.setText(ndkUtil.getCString());
}
}
布局文件
这样基本就完成简单NDK功能。