从Android Studio 2.2开始,Android Studio开始支持C++单步调试,为我们开启了一扇大门,开发效率大大提高。
但不可避免,新生事物存在他的不完美问题。今天遇到一个非常奇葩的现象。在使用Android Studio断点调试时发现:Java层的断点能够正常调试,但JNI c++层的断点无法正常调试。
解决思路:
- 从log入手,查看log发现中存在奇怪的Warning:
07-13 20:00:31.273 18569-18569/com.elevoc.gowildpcm W/linker: libnative-lib2.so: unused DT entry: type 0x6ffffffe arg 0x7aa0
07-13 20:00:31.273 18569-18569/com.elevoc.gowildpcm W/linker: libnative-lib2.so: unused DT entry: type 0x6fffffff arg 0x3
07-13 20:00:31.274 18569-18569/com.elevoc.gowildpcm W/linker: libgnustl_shared.so: unused DT entry: type 0x6ffffffe arg 0x47438
07-13 20:00:31.274 18569-18569/com.elevoc.gowildpcm W/linker: libgnustl_shared.so: unused DT entry: type 0x6fffffff arg 0x3
有点摸不清头脑。求助与强大的Google,stackoverflow后依然没啥结果。
猜测是否因为最近更新NDK导致或者设备出问题(就不得不吐槽这个实验平台的稳定性和易用性了)。实验:新建Jni工程,Run,发现竟然是好的。
两次尝试失败后,我开始对比两个工程配置的区别。发现我正式工程用Android.mk(ndk)方式构建,而刚新建的Demo工程默认是用cmake方式构建。莫非升级NDK后不支持Android.mk构建方式了???不会吧。把Demo工程也更改为Android.mk方式试试,结果更改后Demo工程依然完好。
-
实在想不到什么可能了。往前回溯,想到之前在执行‘‘Clean Project’’时遇到了问题,曾手动删除了build目录、隐藏文件夹".externalNativeBuild"及工程iml文件,猜测可能是工程配置出了问题。通过如下尝试,最终解决:
- 删除gradle中ndkBuild配置
ndkBuild { path 'src/main/jni/Android.mk' }
-
Sync Now后,选择工程->右键,出现 “Link C++ Project with Gradle”,如下图。
选择对应的Android.mk后,重新Clean、Build、Debug,一切恢复正常。
- 删除gradle中ndkBuild配置