androidStudio关联静态库(.a)/动态库(.so)源码调试

阅读前提

  1. 针对windows平台
  2. 假设你有一定的NDK开发基础.
  3. 对CMake有一定的了解.
  4. windows下CMake方式生成Android平台的静态库/动态库:http://blog.csdn.net/LLJJYY001/article/details/77866049
  5. Android中使用具有依赖关系的动态库静态库注意:http://blog.csdn.net/LLJJYY001/article/details/78041544

需求

Android JNI开发的时候,需要对C++源码进行调试,如果C++源码就在项目中,那好办,阅读该文到一半就可以调试了,如果项目中只有C++对应的动态库静态库,源码另外存在,那怎么办?

参照物

配置得有一个项目吧,而这些我都准备好了.
本文使用的Android项目:https://github.com/lijiayan2015/NativeDemo
本文使用的C++项目源码:https://github.com/lijiayan2015/AndroidNativeLib
C++源码的项目可直接下载安装包解压后直接用.

AndroidStudio中配置

  1. 如果Android jni是以module(native)的形式存在的,如我的Android项目,需要在module(native)的gradle中配置如下:

    android {
        //关键点*****
        publishNonDefault true
        compileSdkVersion 26
        buildToolsVersion "26.0.1"
    
        defaultConfig {
            minSdkVersion 14
            targetSdkVersion 26
            versionCode 1
            versionName "1.0"
  2. 在app的gradle中添加依赖,如下:

        dependencies {
            compile fileTree(dir: 'libs', include: ['*.jar'])
            androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
                exclude group: 'com.android.support', module: 'support-annotations'
            })
            compile 'com.android.support:appcompat-v7:26.+'
            compile 'com.android.support.constraint:constraint-layout:1.0.2'
            testCompile 'junit:junit:4.12'
            //关键点*****start
            releaseCompile project(path: ':native', configuration: 'release')
            debugCompile project(path: ':native', configuration: 'debug')
            //关键点*****end
        }
  3. AndroidStudio中快键键ctrl+alt+shift+S打开project structure窗口,也可以如图打开:

    打开设置窗口

  4. 选中native,同时选中build Types–>debug(根据自己的需求,如果Release也想debug的话那就一起设置),然后将DebuggableJni Debuggable 都设置为true.如果JNI开发没有分开,那就直接设置app

    设置结果

  5. 按如图方式打开Run/Debug Configurations窗口

    这里写图片描述

  6. 按照如下标记步骤设置,其中设置Debug Type的时候选择Auto,如果选择Java或者Native的话只能调试java或者Native.

    这里写图片描述

  7. [修正:源码没有在AS中的,经过验证,直接拖到AS中也可以调试,所以该步可以不看了]对于C++源码就在Android工程中的,经过上面6步就可以在需要调试的地方进行断点调试了.但是,如果需求跟我的一样,使用的是第三方静态库或者动态库,有源码但源码不在Android工程中,还需要设置 Symbol Directores ,设置什么鬼?我也不知道,@^_^,百度吧!怎么设置呢?直接点击"+ "按钮,定位到源码的最外层目录,如我当前的C++源码我放在了桌面,直接定位的桌面对应的文件夹,点击确定就可以了.

    这里写图片描述

    这里写图片描述

  8. 将需要调试的源码拖到AS编辑窗口中(注意,将As缩小点然后打开源码文件拖动到编辑区域就可以了),如,假设我当前需要调试Add.cpp的方法,我的断点如图,shift+f9启动调试,看看是不是可以跟调试java代码一样的调试了.@^_^
    这里写图片描述
    这里写图片描述

  9. 上面的忘记一点,补充下.Native调试需要LLDB,打开SDK Manager中SDK Tools里面选中LLDB,然后进行安装.

    这里写图片描述

最后

由于开启JNI debug调试,所以启动调试的时候要加载很多库,导致很慢很慢,我没有找到好的解决办法,如果哪位大神有好的解决方案,请告知!
以上就是AS中调试Native代码的以及关联静态库动态库源码的配置.
有问题请留言或者:[email protected]

猜你喜欢

转载自blog.csdn.net/lljjyy001/article/details/78042975