阅读前提
- 针对windows平台
- 假设你有一定的NDK开发基础.
- 对CMake有一定的了解.
- windows下CMake方式生成Android平台的静态库/动态库:http://blog.csdn.net/LLJJYY001/article/details/77866049
- 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中配置
如果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"
在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 }
AndroidStudio中快键键ctrl+alt+shift+S打开project structure窗口,也可以如图打开:
选中native,同时选中build Types–>debug(根据自己的需求,如果Release也想debug的话那就一起设置),然后将Debuggable 和Jni Debuggable 都设置为true.如果JNI开发没有分开,那就直接设置app
按如图方式打开Run/Debug Configurations窗口
按照如下标记步骤设置,其中设置Debug Type的时候选择Auto,如果选择Java或者Native的话只能调试java或者Native.
扫描二维码关注公众号,回复: 713309 查看本文章[修正:源码没有在AS中的,经过验证,直接拖到AS中也可以调试,所以该步可以不看了]
对于C++源码就在Android工程中的,经过上面6步就可以在需要调试的地方进行断点调试了.但是,如果需求跟我的一样,使用的是第三方静态库或者动态库,有源码但源码不在Android工程中,还需要设置 Symbol Directores ,设置什么鬼?我也不知道,@^_^,百度吧!怎么设置呢?直接点击"+ "按钮,定位到源码的最外层目录,如我当前的C++源码我放在了桌面,直接定位的桌面对应的文件夹,点击确定就可以了.将需要调试的源码拖到AS编辑窗口中(注意,将As缩小点然后打开源码文件拖动到编辑区域就可以了),如,假设我当前需要调试Add.cpp的方法,我的断点如图,shift+f9启动调试,看看是不是可以跟调试java代码一样的调试了.@^_^
上面的忘记一点,补充下.Native调试需要LLDB,打开SDK Manager中SDK Tools里面选中LLDB,然后进行安装.
最后
由于开启JNI debug调试,所以启动调试的时候要加载很多库,导致很慢很慢,我没有找到好的解决办法,如果哪位大神有好的解决方案,请告知!
以上就是AS中调试Native代码的以及关联静态库动态库源码的配置.
有问题请留言或者:[email protected]