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,后来不用代码也能调试。(这不是结论,这是我遇到的一个情况)

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

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的原因。有朋友知道原因的可以指点一下

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐