【发布时间】:2017-10-11 20:29:27
【问题描述】:
我有多种风格的 Android Gradle + CMake (NDK) 项目。子项目中的 C++ 源文件/库在切换到以前未构建的风味后不必要地重新构建。这是一种预期,因为输出文件夹是特定于风味的,并且在第一次构建时不存在:
./app/.externalNativeBuild/cmake/prodDebug/armeabi/libs/mylib/libmylib.a
./app/.externalNativeBuild/cmake/devDebug/armeabi/libs/mylib/libmylib.a
但是我有很多风格和大型库要构建,并且不想重建不依赖于风格的 C++ 库 - 构建时每种风格都应该相同的库。我试图通过指定不同的输出目录来解决这个问题,因此它不依赖于风味:
add_subdirectory("libs/mylib" "${CMAKE_CURRENT_SOURCE_DIR}/libs/mylib/output")
现在每个风味都共享 mylib 库的相同输出目录,但是这一次库在切换风味时一直在重建。当使用没有 Gradle 的普通 CMake 时,一切都按预期工作。从 Android Studio / Gradle 编译时,有什么方法可以修复不必要的重建?
编辑1: 顺便说一句,即使风味没有指定任何 C++ 标志等,也会完成重建 - 本质上它们是相同的,只是不同的应用程序/版本名称:
dev {
applicationIdSuffix ".dev"
versionNameSuffix "-dev"
}
prod {
applicationIdSuffix ".prod"
versionNameSuffix "-prod"
}
EDIT2:还有另一个重建问题。当更改任何CMakeLists.txt(也是子项目)时,它会触发树的整个重建——所有父项目、子项目(甚至不相关的项目)都会被重建。目前这是使用 Gradle/Android Studio 构建 NDK 项目的障碍。
【问题讨论】:
-
听起来像一个错误。您向 Android Studio 团队报告了吗?
-
是的,它在这里:issuetracker.google.com/issues/38290773。但谷歌没有帮助。
-
我们解决这个问题的方法是预先构建 C++ 代码并在 aar 中,然后将其链接到项目中。基本上把它分成两个项目。
-
嗯,我做了类似的事情。但是对于当前版本,我认为它已经修复了。
标签: android c++ gradle android-ndk cmake