xmake-io / xmake-gradle

A gradle plugin that integrates xmake seamlessly
https://xmake.io
Apache License 2.0
46 stars 2 forks source link

android-studio 不能显示源码和调试 #5

Open imkerberos opened 4 years ago

imkerberos commented 4 years ago

描述问题

使用 xmake-gradle 编译 JNI, 在 build.gradle, xmake.lua 中配置 debug 模式, 在 jni 的 c++ 代码中设置的断点无效. 对比 CMAKE 工程:

  1. CMAKE 工程可以在 project 区显示 CPP 源代码的文件, xmake-gradle 没有显示.
  2. CMAKE 工程在调试状态断点工作正常, xmake-gradle 编译的工程断点工作不正常.

期待的结果

  1. 在 android-studio 的 project 区可以正常显示 xmake 搜索到的 jni 源文件列表.
  2. 调试模式下, jni 源文件中的断点工作正常.

错误信息

无错误信息.

相关环境

OS: MacOSX Catalina 10.15.4 xmake: 2.3.3 xmake-gradle: 1.0.7 android-studio: 3.6.3 android-ndk:

 Path                                     | Version | Description                             | Location
  -------                                  | ------- | -------                                 | -------
  build-tools;28.0.3                       | 28.0.3  | Android SDK Build-Tools 28.0.3          | build-tools/28.0.3/
  build-tools;29.0.3                       | 29.0.3  | Android SDK Build-Tools 29.0.3          | build-tools/29.0.3/
  cmake;3.10.2.4988404                     | 3.10.2  | CMake 3.10.2.4988404                    | cmake/3.10.2.4988404/
  emulator                                 | 30.0.12 | Android Emulator                        | emulator/
  patcher;v4                               | 1       | SDK Patch Applier v4                    | patcher/v4/
  platform-tools                           | 30.0.1  | Android SDK Platform-Tools              | platform-tools/
  platforms;android-19                     | 4       | Android SDK Platform 19                 | platforms/android-19/
  platforms;android-28                     | 6       | Android SDK Platform 28                 | platforms/android-28/
  system-images;android-29;google_apis;x86 | 10      | Google APIs Intel x86 Atom System Image | system-images/android-29/google_apis/x86/
  tools                                    | 26.1.1  | Android SDK Tools 26.1.1                | tools/
waruqi commented 4 years ago

CMAKE 工程可以在 project 区显示 CPP 源代码的文件, xmake-gradle 没有显示.

这个暂时支持不了,不能跟cmake比,人家是google官方给直接内置支持的,肯定跟as整合的更好些,而xmake-gradle只是作为gradle插件的方式扩展支持,目前暂时没精力去支持这个,先这么凑合着用吧,如果你有兴趣可以提个pr帮忙支持上。

CMAKE 工程在调试状态断点工作正常, xmake-gradle 编译的工程断点工作不正常.

这个我可以看看,如果支持起来不麻烦,我会考虑支持上,如果太花时间,那就只能先这样了。。

imkerberos commented 4 years ago

显示这个倒是可以凑合, 如果调试不行就很麻烦了. 另外, 对于 gradle java 之类的东西一点都不懂, 估计很难能提 PR 了.

waruqi commented 4 years ago

调试那个我可以先看看 不行也没办法,实在是忙不过来这么多东西,我通常也都是print调的 很少会去断点。

waruqi commented 4 years ago

我试了下确实不行,稍微看了看,似乎android studio跟gradle/build-tools里面内置的cmake/ndkBuild两边是配合同步的

gradle tools内置的cmake模块会去生成一些配置文件到.cxx目录,尤其是下面这个文件:

./nativelib/.cxx/cmake/debug/arm64-v8a/android_gradle_build.json

ndkbuild也去写一些配置到.cxx目录提供给as加载。

当android studio点击调试的时候,会判断如果是cmake模式,就回去加载这个文件,读取一些so库相关的信息来支持断点调试。

而xmake模式下,xmake不会去写入.cxx,即使模拟写入这些文件,Android Studio判断当前不是cmake,也不会去从.cxx加载任何文件。

所以目前看,是android studio/gradle两端同时配合原生支持的cmake/ndkbuild来实现的断点调试。

而xmake是通过gradle插件的方式提供,只能影响gradle,没法扰Android Studio,除非再整个Android Studio的插件,去hack调试这块。

有没有更省事的支持方式,我暂时还不清楚,理论上只要花时间肯定能支持上,但是目前我可能没法花太多精力在这块上,如果你有兴趣,可以帮忙研究下。

waruqi commented 4 years ago

我估计源码目录显示也跟.cxx里面配置相关,但是可能也需要as配合支持

imkerberos commented 4 years ago

我最近也有些忙, 先 Open 着吧, 等忙完了我仔细看看.