首页 > 开发工具 > Android Studio 编辑器教程 > Android Studio开发 C_C++ 例子

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++ 函数。
本文来自互联网用户投稿,不拥有所有权,该文观点仅代表作者本人,不代表本站立场。
访问者可将本网站提供的内容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯本网站及相关权利人的合法权利。
本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站,邮箱:80764001@qq.com,予以删除。
© 2023 PV138 · 站点地图 · 免责声明 · 联系我们 · 问题反馈