Android Studio 开发 C/C++ 例子
前面的小节我们学习了 C/C++ 支持环境的安装和配置。本小节我们创建一个最简单的支持 C/C++ 的项目实例。
1. 创建项目
创建支持原生代码的新项目的步骤与创建任何其他 Android Studio 项目的步骤相似,但还需要执行一个额外的步骤:
-
在向导的 Choose your project 部分中,选择 Native C++ 项目类型。
-
点击 Next。
-
填写向导下一部分中的所有其他字段。
-
点击 Next。
-
在向导的 Customize C++ Support 部分中,您可以使用 C++ Standard 字段来自定义项目。使用下拉列表选择您想要使用哪种 C++ 标准化。选择 Toolchain Default 可使用默认的 CMake 设置。
-
点击 Finish。
至此,项目创建完成,我们可以看到项目中同时包含了 Java 代码和 Cpp 代码。
2. 分析代码
2.1 Cpp 代码
项目中包含一个 cpp 源码文件:native-lib.cpp
extern "C" JNIEXPORT jstring JNICALL
Java_com_imooc_hellojni_MainActivity_stringFromJNI(
JNIEnv* env,
jobject /* this */) {
std::string hello = "This string from C++";
return env->NewStringUTF(hello.c_str());
}
这个函数的功能很简单,返回一个字串 “This string from C++”。
我们看到这个函数的函数名很长:Java_com_imooc_hellojni_MainActivity_stringFromJNI,这是按特定的规范组织的,分解之后各部分的含义如下:
-
Java:表示是给 Java 源码中调用的。
-
com_imooc_hellojni_MainActivity:表示由哪个 Java 类(包名类名)来调用。
-
stringFromJNI:表示本地方法名称,会在 Java 源码中声明。
2.2 Java 代码
项目中包含的 java 源文件:MainActivity.java:
// Used to load the 'native-lib' library on application startup.
static {
System.loadLibrary("native-lib");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Example of a call to a native method
TextView tv = findViewById(R.id.sample_text);
tv.setText(stringFromJNI());
}
/**
* A native method that is implemented by the 'native-lib' native library,
* which is packaged with this application.
*/
public native String stringFromJNI();
-
System.loadLibrary:加载我们自己的原生库 native-lib;
-
setText(stringFromJNI()):把 stringFromJNI 函数返回的字串赋给 TextView 显示出来;
-
public native String stringFromJNI():声明本地方法 stringFromJNI。
3. 运行效果
虽然运行效果比较简单,但是通过前面的代码分析,我们可以知道,“This string from C++” 这个字串是在 Java 源码中调用 Cpp 源码中的函数来获取的。这是一个最简单的项目支持 C/C++ 的例子。
4. 小结
本节课程我们主要学习了如何创建一个支持 C/C++ 的项目。本节课程的重点如下:
- 掌握如何创建支持 C/C++ 的项目;
- 掌握如何从 Java 中调用 C/C++ 函数。