大佬教程收集整理的这篇文章主要介绍了详解AndroidStudio3.0开发调试安卓NDK的C++代码,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
一、新建项目
新建项目,没有发现Include C++ Support 选项。因为印象中是有过该选项的,找了半天没找到。
@H_489_13@
后来无意间拖了下窗口大小,原来是被隐藏了,真特么坑。
新建一个测试项目,勾选Include C++ Support 选项,看看工程上有哪些不同。
1、gradle
2、CPP
与Java节点同级多了一个cpp的节点,对应目录为src\main\cpp,与src\main\java同级,默认只有一个native-lib.cpp文件,没有.mk文件及其他,比较简单:
#include <jni.h> #include <String> extern "C" JNIEXPORT jString JNICALL Java_com_bigsing_myapplication_MainActivity_StringFromJNI( jnienv *env,jobject /* this */) { std::string Hello = "Hello from C++"; return env->NewStringUTF(Hello.c_str()); }
3、CMakeLists.txt
# For more information about using CMake with Android studio,read the # documentation: https://d.android.com/studio/projects/add-native-code.html # Sets the minimum version of CMake required to build the native library. cmake_minimum_required(VERSION 3.4.1) # Creates and names a library,sets it as either STATIC # or SHARED,and provides the relative paths to its source code. # You can define multiple libraries,and CMake builds them for you. # Gradle automatically packages shared libraries with your APK. add_library( # Sets the name of the library. native-lib # Sets the library as a shared library. SHARED # Provides a relative path to your source file(s). src/main/cpp/native-lib.cpp ) # Searches for a specified prebuilt library and stores the path as a # variable. Because CMake includes system libraries in the search path by # default,you only need to specify the name of the public NDK library # you want to add. CMake verifies that the library exists before # compleTing its build. find_library( # Sets the name of the path variable. log-lib # Specifies the name of the NDK library that # you want CMake to locate. log ) # Specifies libraries CMake should link to your target library. You # can link multiple libraries,such as libraries you define in this # build script,prebuilt third-party libraries,or system libraries. target_link_libraries( # Specifies the target library. native-lib # Links the target library to the log library # included in the NDK. ${log-lib} )
其中native-lib为最终生成的SO的名称(libnative-lib.so),默认@L_262_27@为armeabi-v7a
默认的工程属性不用配置,debugger默认为auto会自动适配,直接在cpp里下断点,调试方式运行App,会自动断下,变量数值均能在调试状态下看到。
试用了下Androidstudio对NDK的调试支持的还不错,于是打算把过去的项目也支持起来,方法请看下节。
二、已有项目
1、安装C++调试器LLDB
由于之前一直没有使用过Androidstudio调试过native的代码,网上了解到Androidstudio调试NDK是需要一个LLDB的插件,默认是没有的,所以先手动安装一下。
这里有个另类的方法:“Edit Configurations”打开程序配置,在debugger里选择Native(默认为auto),然后运行App,因为工程之前一直是只有Java代码的,所以这里选择了Native,Androidstudio会提示并没有安装C++的调试器,根据提示安装即可。
可以看出,安装的调试器是LLDB。
2、Link C++ Project with Gradle
在老项目里面添加NDK的支持,可以右键项目选择菜单:Link C++ Project with Gradle
编译方式有两种:CMake和ndk-build,其中ndk-build是传统方式,Androidstudio默认推荐CMake方式,也许这是以后的主流方式,所以我们选择默认的CMake.
然后是指定CMakeLists.txt文件的路径,这里可以复制新建项目的CMakeLists.txt文件到现有项目的app目录下,把它放到和proguard-rules.pro相同的文件夹下即可。然后把这个CMakeLists.txt文件的全路径输入进去,点OK。
3、整理C++源码的文件组织形式
新建一个cpp目录:src\main\cpp,与src\main\java同级,把C++源码文件移动至此目录下,并有序组织好。
由于是复制的demo工程的CMakeLists.txt文件,比较简单,不能够满足现有工程,需要修改一下。这里说一下常用的几个功能:
file(GLOB native_srcs "src/main/cpp/*.cpp" "src/main/cpp/dalvik/*.cpp" "src/main/cpp/art/*.cpp" "src/main/cpp/art/*.S") add_library( # Sets the name of the library. native-lib # Sets the library as a shared library. SHARED # Provides a relative path to your source file(s). ${native_srcs} )
链接三方SO库文件(例如我需要使用三方的libsubstrate.so库做测试):
file(GLOB libs src/main/cpp/3rd/libsubstrate.so src/main/cpp/3rd/libsubstrate-dvm.so) target_link_libraries( # Specifies the target library. native-lib # Links the target library to the log library # included in the NDK. ${libs} ${log-lib} )
5、恢复debugger为默认的auto
“Edit Configurations”打开程序配置,在debugger里选择auto,因为之前修改为了Native。这样,无论是Java代码还是C++代码均可以调试了。
三、总结
能支持对C++代码的动态调试,无疑是非常强大的功能,关键现在Androidstudio对C++代码在编辑器也支持的很好,所以总体是建议迁移过来的。
不足就是编译速度太慢了,Visualstudio编译下来秒间就能完成了,Androidstudio下要十几秒甚至更长。在调试的时候启动LLDB也很慢,有时一直卡在StarTing LLDB server
建议VS和本方法结合使用,需要调试的时候就用Androidstudio调试,如果仅仅是编译C++代码则可以使用VS,VS的方法参见:使用VisualStudio高效开发调试AndroidNDK
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。
以上是大佬教程为你收集整理的详解AndroidStudio3.0开发调试安卓NDK的C++代码全部内容,希望文章能够帮你解决详解AndroidStudio3.0开发调试安卓NDK的C++代码所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。