我有一个大的Android Studio项目,它有一个单独的模块,其中包含本机代码。本机构建是用CMake定义的,并且包括一堆C++代码的源文件。
我注意到自从最近的更新(可能是Android Studio3.5)以来,NDK一直在重建所有的东西。这可能发生在Java代码中的一个小变化,在项目中的无关模块中切换风格,递增版本代码,等等。
这是一个大问题,因为它一次可以无缘无故地浪费10分钟。我找不到一种合理的方法来分析Android Studio中的NDK构建,并检查是什么导致了重建,或者是什么花了这么长时间。
不幸的是,该项目的构建文件太大,无法附加到这里。有什么值得注意的地方吗?
发布于 2019-10-05 01:52:08
对于使用cmake构建的C/C++代码,请确保将cmake指向可以保存其目标文件和二进制输出的目录。
假设您在顶级CMakeLists.txt中有一个对游戏的依赖,如下所示:
# dependency: Game
set ( game_src_DIR ../Game )
add_subdirectory( ${game_src_DIR} ${CMAKE_CURRENT_BINARY_DIR}/game )然后,add_subdirectory的第二个参数指定了AndroidStudio保存目标文件的位置。
调试和发布对象文件将位于不同的子目录中,每个依赖项也将位于不同的子目录中,因此切换调试/发布不会发生冲突。
发布于 2020-03-25 23:15:13
这似乎是从Android Studio3.4开始的一种行为回归,并在Android Studio4.1 Canary 4中得到了修复。发行说明为here。
发布于 2019-09-24 02:51:24
通常,拆分AS项目会有所帮助,这样C++部件(可能还有它的Java包装器)成为单独的(库)模块。希望这个模块更稳定,对应用程序版本代码的增量不敏感。
这样的模块不应该定义太多的风格,但要小心地与其他模块的风格匹配。有时,甚至可以禁用这类库的"debug“变体。NDK团队曾努力更好地处理调试与发布版本切换,但这仍然很棘手。
但是,如果在这些改进之后,对项目的无关紧要的更改仍然会导致大量的重建,我会建议考虑ccache。
https://stackoverflow.com/questions/58063705
复制相似问题