zoukankan      html  css  js  c++  java
  • Android Studio22-NDK-LLDB调试

    Android Studio2.2更好的支持NDK开发,并可以像开发java一样的DEBUG程序,不需要添加gradle-experimental插件,就可调试代码!

    一,下载 NDK 和构建工具

    要编译和调试本地代码(native code),你需要下面的组件:

    (1)The Android Native Development Kit (NDK) : 让你能在 Android 上面使用 C 和 C++ 代码 的工具集。

    (2)CMake  外部构建工具。如果你准备只使用 ndk-build 的话,可以不使用它。

    (3)LLDB : Android Studio 上面调试本地代码的工匠。


    注意:要在 Android Studio 中 使用 CMake 或者 ndk-build,你需要使用 Android Studio 2.2 或更高的版本,同时需要

    配合使用 Android Plugin for Gradle 2.2.0 及以上的版本。

    安装上述组件:

    注:如SDK Tools 不显示LLDBCMake NDK,说明你配置了国内镜像站点!!

    要能上google官网才会显示,之前也是通过国内镜像,一直没显示出来!

    Tools > Android > SDK Manager >点击 SDK Tools 选项卡。

    勾选 LLDBCMake 和 NDK 

    已单独下载了 android-ndk-r11b所这里不再下载NDK!(最好勾选下载最新NDK)

    点击 Apply ,然后点击 OK 。

    二,新建项目:

    勾上 include C++ support

    在最后一步时可选择不同的C++库如图:

    说明:

    虽说是支持C/C++,但是不完全支持C/C++的全部特性,必须得按照 jni的约定来:参照 jni完全手册!教程参照:Jni入门: 官网demo

    C++ Standard: 选择C++库

    Toolchain Default默认 CMake 设置 

    C++ 11:支持C++11特性!

    Exceptions Support(-fexceptions):

    如果你想使用有关 C++ 异常处理的支持,就勾选它。勾选之后,Android Studio 会在 module 层的 build.gradle 文件中的 cppFlags 中添加 -fexcetions 标志。

    Runtime Type Information Support(-frtti):

    如果你想支持 RTTI,那么就勾选它。勾选之后,Android Studio 会在 module 层的 build.gradle 文件中的 cppFlags 中添加 -frtti 标志。

    完成后结构如下:

    说明:

    native-lib.cpp: 自动生成的C++源文件

    CMakeLists.txt:

    CMake 脚本根据构建脚本的指令去编译一个 C++ 源文件,也就是 native-lib.cpp ,并将编译后的产物扔进共享对象库中,并将其命名为 libnative-lib.so ,然后 Gradle 将其打包到 APK 中。

    External Build Files 

    存放 CMake 或 ndk-build 构建脚本的地方。有点类似于 build.gradle 文件告诉 Gradle 如何编译你的 APP 一样,CMake 和 ndk-build 也需要一个脚本来告知如何编译你的 native library。

    注意 :

    Android.mk与Application.mk,都是由工具自动管理,再也不用写了,当然也可自定义.

    编写请参照:android.mk分析一文!

    如果要在native-lib.cpp文件中添加多少方法,必须添加在 extern c { } 中,或者在每个方法前加 extern c , 否则会报找不到方法!

    配置后,默认的是C++的,如要改成C语言后缀的,直接把native-lib.cpp,改在C,并去掉 extern c,

    在CMakeLists.txt文件中native-lib.cpp也修改后缀名!

    最后调试,与java断点调试是一样的!





  • 相关阅读:
    learning scala view collection
    scala
    learning scala dependency injection
    learning scala implicit class
    learning scala type alise
    learning scala PartialFunction
    learning scala Function Recursive Tail Call
    learning scala Function Composition andThen
    System.Threading.Interlocked.CompareChange使用
    System.Threading.Monitor的使用
  • 原文地址:https://www.cnblogs.com/ut2016-progam/p/6066844.html
Copyright © 2011-2022 走看看