提问人:SirKnigget 提问时间:9/23/2019 更新时间:3/25/2020 访问量:1149
Android Studio 上的 NDK 一直在不断重建,需要很长时间
NDK on Android Studio keeps rebuilding all the time, takes forever
问:
我有一个大型 Android Studio 项目,它有一个单独的模块,其中包含本机代码。 本机构建是使用 CMake 定义的,包括一堆 C++ 代码的源文件。
我注意到,自从最近的更新(可能是 Android Studio 3.5)以来,NDK 一直在重建所有内容。 它可能发生在 Java 代码的微小更改、项目中不相关模块的切换风格、递增版本代码等。
这是一个主要问题,因为它可以无缘无故地一次浪费 10 分钟。 我找不到一种合理的方法来分析 Android Studio 中的 NDK 构建,并检查导致重建的原因或花费这么长时间的原因。
不幸的是,该项目的构建文件太大,无法在此处附加。有什么需要注意的事情吗?
答:
通常,拆分 AS 项目有助于使 C++ 部分(可能与其 Java 包装器一起)成为一个单独的(库)模块。希望这个模块会更稳定,对应用程序版本代码的增量不敏感。
这样的模块不应该定义很多风格,但要仔细匹配其他模块的风格。有时,即使禁用此类库的“调试”变体也是有意义的。NDK 团队努力更好地处理调试与发布版本的切换,但这仍然很棘手。
但是,如果在这些改进之后,对项目的微不足道的更改仍然会导致大规模的重建,我建议考虑 ccache。
评论
对于使用 cmake 生成的 C/C++ 代码,请确保将 cmake 指向可以保存其对象文件和二进制输出的目录。
假设您在顶级 CMakeLists 中依赖于 Game.txt如下所示:
# dependency: Game
set ( game_src_DIR ../Game )
add_subdirectory( ${game_src_DIR} ${CMAKE_CURRENT_BINARY_DIR}/game )
然后,要add_subdirectory的第二个参数指定了 AndroidStudio 保存对象文件的位置。
debug 和 release 对象文件将位于不同的子目录中,每个依赖项也是如此,因此切换 debug/release 不会发生冲突。
这似乎是 Android Studio 3.4 的行为回归,并已在 Android Studio 4.1 Canary 4 中得到修复。发行说明在这里。
评论