Android Studio NDK开发入门
1.点击android studio 的左上角的“File”-->"Settings"-->"Appearance & Behavior"-->"Android SDK"-->"SDK Tools",下载NDK和CMake。
2.点击android studio 的左上角的“File”-->"project structure"-->"SDK Location"配置好NDK的路径
3.旧版本android studio:创建jni目录:右击“app”--> “New > Folder”--> “JNI Folder”创建jni目录,创建后app目录下会显示cpp文件夹
花粟鼠版的android studio :创建jni目录的项目右击“app”--> “New >New Project>Native C++“创建jni目录的项目,创建后app目录下会显示cpp文件夹
4.创建C++文件:右击cpp > New > C/C++ Source File,在弹出的对话框中输入文件名为 test(随意取名),Type选择".cpp",这样就创建出了一个test.cpp的文件,用于写C++代码。
在test.cpp文件里写两个函数getString()和 add(),代码如下:
#include <jni.h>
#include <string>
extern "C"
JNIEXPORT jstring JNICALL
Java_com_ndkdemo_MainActivity_getString(JNIEnv *env, jobject thiz) {
std::string hello = "Hello C++";
return env->NewStringUTF(hello.c_str());
}
extern "C"
JNIEXPORT jint JNICALL
Java_com_ndkdemo_MainActivity_add(JNIEnv *env, jobject thiz, jint x, jint y) {
return x+y;
}
其中com_ndkdemo是你的项目的包名,我项目的包名是 com.ndkdemo,这里就写成com_ndkdemo
6.创建CMakeLists.txt文件:右击cpp > New > File,在弹出来的输入框中输入:CMakeLists.txt (注:必须用这个名字),并输入如下代码:
# 设置构建native library所需的CMake最低版本。
cmake_minimum_required(VERSION 3.1.0)
#创建一个库(多次调用add_library即可创建多个库)
add_library( # 设置库的名称
test-lib
# 将库设置为共享库(即so文件)
SHARED
# 指定源文件的相对路径
test.cpp )
7.进行编译
右击app > Link C++ Project with Gradle,在弹出来的对话框中指定CMakeLists.txt文件的位置,如下:
编译完成后会在app目录下的build.gradle文件中生成如下内容:
android {
externalNativeBuild {
cmake {
path file('src/main/jni/CMakeLists.txt')
}
}
}
8.调用test.cpp里的函数,getString()和 add()方法
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
Toast.makeText(this, getString(), Toast.LENGTH_SHORT).show()
Log.i("TAG", "add=${add(1, 2)}")
}
external fun getString(): String
external fun add(x: Int, y: Int): Int
companion object {
init {
System.loadLibrary("test-lib")
}
}
}
public class MainActivity extends AppCompatActivity {
static {
System.loadLibrary("test-lib");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toast.makeText(this,getString(),Toast.LENGTH_SHORT).show;
Log.e("TAG","add="+add(1,2));
}
public static native String getString();
public static native int add(int x,int y);
}
运行APP,界面会吐司出 "Hello C++" ,并打印add=3。
OK,简单的NDK入门就这样完成了。