Android Studio CMake 为所有构建变体构建一次
Android Studio CMake build once for all build variants
我有一个包含 C++ 代码 (JNI) 和许多构建变体和组合的项目。这些用于实现应用程序的不同品牌/风格(即颜色、样式、图标……)。
例如,可能有 n 个客户的构建变体:
customerNDebug
customerNDebugproguard
customerNRelease
。
无论如何,C/C++层每种产品口味都相同。
通常 CMake in Android Studio 会为每个构建变体编译 C 代码。如果您有像“debug
”和“release
”这样生成的代码实际上不同的构建变体,这是有道理的。但是,对于我拥有的构建变体,编译后的输出始终相同。
目前 C/C++ 代码的编译是在我们的项目中使用外部工具完成的,我想在 [=46= 中使用 CMake 进行编译] Studio 仅用于 IDE 对 C/C++ 代码的适当支持。所以对我来说,一个构建就足够了。
是否可以告诉 Android Studio 仅构建一次 C/C++ 代码,而不管构建变体和风格如何?
默认情况下,Android Studio IDE 与 CMake 和 Gradle 将根据您的构建类型和风格生成一系列以 externalNative<BuildVariant>Build
命名的原生构建任务.如果你想扭转这种行为,一些解决方法如下:
- 创建一个 Android Studio 模块项目,它只构建您的本机代码,例如
shared-native
。
- 让您的其余模块依赖于此项目。
对于此解决方案,您需要考虑以下几点:
- 将您的
.so
文件放在其他项目可以看到并 link 的适当位置。
- 您只能为这个
shared-native
模块项目包含 debug
和 release
构建类型,以避免重新构建太多次。或者您可以简单地让您的其他项目依赖于发布类型,这样它将只构建 ONCE。
我有一个包含 C++ 代码 (JNI) 和许多构建变体和组合的项目。这些用于实现应用程序的不同品牌/风格(即颜色、样式、图标……)。
例如,可能有 n 个客户的构建变体:
customerNDebug
customerNDebugproguard
customerNRelease
。
无论如何,C/C++层每种产品口味都相同。
通常 CMake in Android Studio 会为每个构建变体编译 C 代码。如果您有像“debug
”和“release
”这样生成的代码实际上不同的构建变体,这是有道理的。但是,对于我拥有的构建变体,编译后的输出始终相同。
目前 C/C++ 代码的编译是在我们的项目中使用外部工具完成的,我想在 [=46= 中使用 CMake 进行编译] Studio 仅用于 IDE 对 C/C++ 代码的适当支持。所以对我来说,一个构建就足够了。
是否可以告诉 Android Studio 仅构建一次 C/C++ 代码,而不管构建变体和风格如何?
默认情况下,Android Studio IDE 与 CMake 和 Gradle 将根据您的构建类型和风格生成一系列以 externalNative<BuildVariant>Build
命名的原生构建任务.如果你想扭转这种行为,一些解决方法如下:
- 创建一个 Android Studio 模块项目,它只构建您的本机代码,例如
shared-native
。 - 让您的其余模块依赖于此项目。
对于此解决方案,您需要考虑以下几点:
- 将您的
.so
文件放在其他项目可以看到并 link 的适当位置。 - 您只能为这个
shared-native
模块项目包含debug
和release
构建类型,以避免重新构建太多次。或者您可以简单地让您的其他项目依赖于发布类型,这样它将只构建 ONCE。