Android studio 调试NDK C++ 代码,遇到的问题

来源:互联网 发布:巴黎散步道 知乎 编辑:程序博客网 时间:2024/05/29 11:10

NDK调试问题:

在使用AS调试NDK代码的时候,出现一些问题,java中的jni函数红名,之前也出现过,在网上找了好多,也询问了鹅场的技术,他说有可能是AS不稳定。确实我重新安装AS,jni函数会显示正常,但不知道怎么一下jni函数就又红名了。

最近又去搞了一下这个问题,把过程总结了一下,

操作流程 工程 状态 更改 更改后改变的状态 1 B工程 1、ndkbuild
2、jni函数正常(函数颜色不是红色,可以跟进去c++代码)
3、不能调试。
不能调试 2 A工程 1、ndkbuild
2、jni函数正常
3、不能调试。
使用gradle-experimental 可以调试 3 B工程 1、ndkbuild
2、jni函数正常
3、不能调试。
A工程使用gradle-experimental后 jni函数显示红色.(难道需要invalidate cache and restart)
把ndkbuild 工程换成 cmake jni函数正常
没有使用 gradle-experimental 也能调试 4 A工程 去掉gradle-experimental 可以调试
jni函数正常

网上有人说NDK调试需要gradle-experimental,但是官方文档并没有提这个。我后来没有使用gradle-experimental,确实也可以调试。没用gradle-experimental的时候,是不能调试的,也就是说,用了一下gradle-experimental,后来不用代码也能调试。(这不是结论,这是我遇到的一个情况)

Android Studio NDk调试(基于gradle-experimental插件与LLDB)
官方文档:https://developer.android.com/studio/debug/index.html

很奇怪的一个问题,我暂时得出的结论是:

1. 调试不需要gradle-experimental
2. 最好使用cmake编译ndk代码。

有朋友知道原因的可以指点一下

gradle-experimental与gradle版本对应关系

在官方文档中, Experimental Plugin User Guide这个对应关系只更新到gradle 2.14.1

后来我找来找去,我想既然文档没有,源码中应该有这个关系的代码吧。果然被我发现了

在这里查看gradle-experimental的历代版本,其中包括源码。找到.pom文件,其中声明使用’com.android.tools.build’ 的gradle-core版本,跟你的AS版本一致的就能用。

遇到这么一个事情,分享给大家,我是在2017.5.12早上更新的AS 版本是2.3.2,在查找.pom文件的时候,发现0.9.1的gradle-experimental,依赖com.android.tools.build的gradle-core: 版本2.3.1,在往上找0.10.0-alpha1,却依赖com.android.tools.build的gradle-core: 版本是2.4.0-alpha1’。找了半天没找到2.3.2的版本,于是就用了0.9.1的gradle-experimental,结果sync project的时候提示更新到0.9.2。这说明0.9.2的版本是存在的。

当时好奇怪,结果第二天这里就出现了0.9.2版本

https://bintray.com 网站更新库,可能不是很及时,所以如果没找到自己要的,可以先直接用上

CMake和ndkbuild使用过程的一些情况

B工程使用ndkbuild的时候,使用的是r10,使用13.1.3345770会出现这个错误。 但使用cmake后,使用13.1.3345770也正常了。

不知道是mk文件配置不正确,还是ndkbuild不兼容13.1的原因。有朋友知道原因的可以指点一下

1 0