Android Studio CMake 为所有构建变体构建一次

标签 android c++ android-studio cmake build-variant

我有一个包含 C++ 代码 (JNI) 和许多构建变体和组合的项目。这些用于实现应用程序的不同品牌/风格(即颜色、样式、图标……)。

例如,可能有 n 个客户的构建变体:

  • customerNDebug
  • customerNDebugproguard
  • 客户发布

无论如何,C/C++ 层对于每种产品风格都是相同的

通常,Android Studio 中的 CMake 会为每个构建变体编译 C 代码。如果您有生成的代码实际上不同的“debug”和“release”之类的构建变体,这是有意义的。但是,对于我拥有的构建变体,编译后的输出始终相同。

目前,C/C++ 代码的编译是在我们的项目中使用外部工具完成的,我只想在 Android Studio 中使用 CMake 进行编译,以便为 C/C++ 代码提供适当的 IDE 支持。所以对我来说,一个构建就足够了。

是否可以告诉 Android Studio 只构建一次 C/C++ 代码,无论构建变体和风格如何?

最佳答案

默认情况下,Android Studio IDE 与 CMake 和 Gradle 一起会生成一系列名为 externalNative<BuildVariant>Build 的原生构建任务。根据您的构建类型和口味。如果您想扭转这种行为,一些解决方法如下:

  1. 创建一个仅构建您的 native 代码的 Android Studio 模块项目,例如shared-native .
  2. 让您的其余模块依赖于此项目。

对于此解决方案,您需要考虑以下几点:

  1. 输入您的 .so将文件放到其他项目可以看到并与之链接的适当位置。
  2. 您只能包含 debugreleaseshared-native 的构建类型模块项目以避免重新构建太多次。或者您可以简单地让您的其他项目依赖于发布类型,这样它将只构建ONCE

关于Android Studio CMake 为所有构建变体构建一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54812000/

相关文章:

android - .SQLiteConstraintException : tabtest. id may not be NULL 的解释

android - 哪个框架可用于在 Android 上绘制复杂的交互式 UI 层次结构? (就像 iOS 上的 CoreAnimation)

c++ - typedef 在c++中别人的.h头文件中声明的函数

c# - 从窗口句柄获取真实文本

java - Android Studio - 更改默认应用程序布局加载

JNI 库的 Android Studio 项目

Android 微调器同时显示箭头和选择圆圈?

android - 无法过滤 PagedList?

C++ 简单指针错误无法弄清楚为什么?

android - 有没有办法在构建后直接附加新的 Android Profiler 来调试应用程序进程?