【问题标题】:Override library buildConfigFields in the application在应用程序中覆盖库 buildConfigFields
【发布时间】:2023-04-03 10:13:01
【问题描述】:

我正在构建一个使用 Android 库作为主要代码源的应用程序。然后我有多个使用该库的应用程序;这些应用程序将具有相同的代码,但配置字段不同,例如端点等。

为了实现这一点,我想我可以在我的库的 build.gradle 文件中有一个 buildConfigField,然后使用相同的名称覆盖我的应用程序的 build.gradle 中的该值,如下所示:

库中的build.gradle:

buildConfigField "String", "API_BASE_URL", "\"http://arandomapibaseurl.com\"" 

应用中的build.gradle:

buildConfigField "String", "API_BASE_URL", "\"http://myrealapi.com\"" 

关于如何实现这一点的任何想法?

谢谢!

【问题讨论】:

  • IIRC,您有两个独立的 BuildConfig 类,一个用于您的库的包,一个用于您的应用程序包。您的库对应用程序的BuildConfig 一无所知,我不知道应用程序可以覆盖库中的BuildConfig。您可能需要探索其他选项(例如,指向 XML 资源的 <meta-data> 清单元素、基于 Java 的普通配置、覆盖资产)。

标签: android gradle build android-gradle-plugin


【解决方案1】:

很遗憾,您无法覆盖构建配置。您可以覆盖resValue 指定的资源值。该应用程序可以覆盖库,而不是相反。你只需要一个上下文来将它们拉出来,你可以在应用启动时将它们粘贴到一个 Java 对象中,你可以将其作为单例或其他方式共享。

我过去经常使用这个技巧来让应用程序拉入库并覆盖其默认值。你可以阅读它here

【讨论】:

  • 我最终采用了这种方法。我刚刚为每个应用创建了一个 config.xml,它覆盖了库中的配置资源。
  • 太棒了!如果它对您有用,请投票并接受答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-29
  • 1970-01-01
  • 1970-01-01
  • 2012-01-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多