AndroidStudio向项⽬添加CC++原⽣代码教程
说明:本⽂相当于官⽅⽂档的个⼈重新实现,官⽅⽂档链接:
向项⽬添加C/C++代码分为两种情况,⼀种是创建⽀持C/C++代码的新项⽬,⼀种是向原先不⽀持C/C++的已有项⽬添加C/C++代码。这两种情况分别对应本教程的第⼀⼤点和第⼆⼤点。
⼀、创建⽀持C/C++原⽣代码的新项⽬教程
1.1、下载NDK和构建⼯具
原生安卓app开发
要为应⽤编译和调试原⽣代码,需要安装以下组件:
Android原⽣开发⼯具包 (NDK)----这套⼯具集允许我们为Android使⽤C和C++代码,且其提供众多平台库让我们可以管理原⽣Activity和访问物理设备组件,例如传感器和触摸输⼊。
CMake----⼀款外部构建⼯具,可与Gradle搭配使⽤来构建原⽣库。如果只计划使⽤ndk-build,则不需要此组件。
LLDB----⼀种调试程序,Android Studio使⽤它来调试原⽣代码。
安装步骤如下:
菜单栏----Tools----SDK Manager
SDK Tools----钩选CMake/LLDB/NDK三项----点击确定
⽂件⽐较⼤,⼤概需要⼀⼆⼗分钟(受⽹速影响),完成后点击“Finish”即可
1.2、创建⽀持C/C++的新项⽬
菜单栏--File---new---New Project
其他信息按⾃⼰的需要填,主要是钩选“Include C++ support”
接下来的三步和正常的项⽬创建没什么区,按⾃⼰的需要钩选或填写即可。我这⾥演⽰使⽤,全直接使⽤默认配置。
在向导最后“Customize C++ Support”会有以下⼏项内容:
C++ Standard----使⽤下拉列表选择您希望使⽤哪种 C++ 标准。选择 Toolchain Default 会使⽤默认的 CMake 设置。
Exceptions Support----如果您希望启⽤对 C++ 异常处理的⽀持,请选中此复选框。如果启⽤此复选框,Android Studio 会将 -fexceptions 标志添加到模块级 adle ⽂件的 cppFlags 中,Gradle 会将其传递到 CMake。
Runtime Type Information Support----如果您希望⽀持 RTTI,请选中此复选框。如果启⽤此复选框,Android Studio 会将 -frtti 标志添加到模块级 adle ⽂件的 cppFlags 中,Gradle 会将其传递到 CMake。
我这⾥使⽤默认配置,直接点击“Finish”
1.3、确认程序可以成功调⽤C++函数
将项⽬切换到“Android”视图观察整个项⽬,可发现较没有“Include C++ support”的项⽬,多了cpp和External Build Files两个组
在设计中cpp组⽤于存放项⽬的所有原⽣源⽂件、标头和预构建库。对于当前项⽬,Android Studio只创建了⼀个名为native-lib.cpp的C++源⽂件(位于src/main/cpp/⽬录)其中只有⼀个简单的C++函数stringFromJNI(),该函数返回字符串“Hello from C++”。
External Build Files组⽤于存放CMake或ndk-build的构建脚本。与Gradle需要adle⽂件来指⽰如何构建应⽤⼀样,CMake和ndk-build依照⼀个构建脚本来构建原⽣库。对于当前项⽬,Android Studio创建了⼀个CMake构建脚本(位于模块的根⽬录),⽤于指⽰编译构建native-lib.cpp。
点击查看“native-lib.cpp”内容如下,只有⼀个返回“Hello from C++”的函数
查看⽣成的l,如容如下,和Android Studio正常默认⽣成的项⽬⼀样,只有⼀个显⽰“Hello World!”的⽂本框
查看MainActivity.java内容如下,⾸选使⽤了System.loadLibrary()加载了本地库,然后在onCreate()中将l中的⽂框的内容修改为原⽣函数stringFromJNI()返回的字符串(Hello from C++)
我们直接在模拟器上运⾏app,如果界⾯⽂本框显⽰的不是“Hello World!”⽽是“Hello from C++”那说明程序成功调⽤原⽣函数。菜单栏----Run----Run ‘app’选择虚拟机运⾏
图中的”Nexus 5X API 28”是我之前创建的虚拟机,没有虚拟机点击左下⽅的“Create New Virtual Device”创建即可。
可以看到界⾯如下,确实显⽰的是“Hello from C++”,也就是说经过如此配置之后程序确实可以成功调⽤C++函数
1.4 创建新的原⽣源⽂件【可选】

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。