章节索引 :

Android Studio 开发 C/C++ 例子

前面的小节我们学习了 C/C++ 支持环境的安装和配置。本小节我们创建一个最简单的支持 C/C++ 的项目实例。

1. 创建项目

创建支持原生代码的新项目的步骤与创建任何其他 Android Studio 项目的步骤相似,但还需要执行一个额外的步骤:

  1. 在向导的 Choose your project 部分中,选择 Native C++ 项目类型。

  2. 点击 Next

  3. 填写向导下一部分中的所有其他字段。

  4. 点击 Next

  5. 在向导的 Customize C++ Support 部分中,您可以使用 C++ Standard 字段来自定义项目。使用下拉列表选择您想要使用哪种 C++ 标准化。选择 Toolchain Default 可使用默认的 CMake 设置。

  6. 点击 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++ 函数。