修改代码以适应 Android Studio 中的不同配置
Posted
技术标签:
【中文标题】修改代码以适应 Android Studio 中的不同配置【英文标题】:Modifying code to suit different configurations in Android Studio 【发布时间】:2018-03-30 22:43:19 【问题描述】:我的 android 项目有不同的配置(例如 google、amazon)。 Gradle 允许生成可以在运行时检查的 BuildConfig 参数,但这不是我真正想要的。我希望项目中有一个特定的代码(方法、类等)存在或不存在(不仅仅是绕过),具体取决于配置。
这就是我在 Eclipse 中实现它的方式。我在一个 Eclipse 项目中有一个文件夹(例如命名为 platform-specific),not included 在 BuildPath 以及几个 Ant 脚本(make-google、make-amazon)中,将相关文件从特定于平台的文件夹复制到 src 文件夹并从 src 文件夹中删除不相关的文件。
由于 Eclipse 提供了一个 Ant 窗口来查看所有脚本,因此我可以运行特定脚本并重新配置项目以适应所选配置。
有没有办法在 Android Studio 中做到这一点?我知道 Gradle 允许运行甚至导入 Ant 脚本,但它不像“真正的”Ant 那样方便,而且我找不到选择要运行的脚本的方法。也许 Gradle 提供了自己的方式来做到这一点?
【问题讨论】:
developer.android.com/studio/build/build-variants.html CommonsWare:这不允许修改代码(正如我提到的) 当然可以。将特定配置所需的代码放入该配置风格的源集中。将所有常用元素放入main
。
看,我能做些什么。此刻它在我看来真的很僵硬。对于两种口味,它会起作用,但如果我说 3 种口味,模块 1 出现在口味 1 和 2 中,模块 2 出现在口味 1 和 3 中,这是否意味着在每个文件夹中复制这些模块?因此,每次我修改这样的模块的代码时,我都需要将修改复制到另一个文件夹中。 Java 不提供预处理器真是太可惜了!
【参考方案1】:
两种口味都可以,但如果我说 3 种口味,模块 1 出现在口味 1 和 2 中,模块 2 出现在口味 1 和 3 中,这是否意味着在每个文件夹中复制这些模块?因此,每次我修改这样一个模块的代码时,我都需要将修改复制到另一个文件夹中。
如果您组织代码,则不会。
您似乎一般都在使用“模块”。 Android Studio 对该术语有一个特定的定义(Gradle 将其称为子项目)。您可以利用这些来帮助您的事业。
假设您创建了google
、amazon
和yandex
产品风味。那么:
所有三个通用的代码都放在src/main/
中。
任何对单一风味独特的代码都会进入该风味的源集中(例如,src/yandex/
)。
由两种风格共享的任何代码都进入一个库模块,该库模块使用特定于风格的依赖项(例如,yandexCompile
和 amazonCompile
)添加到适当的风格中。
在所有情况下,您的代码都有一份副本。它是否可以进入应用程序模块(例如,app/
)或进入库模块取决于哪些风格需要该代码。对于这样的场景,依赖注入将帮助您管理哪些代码然后为每种风格连接在一起。
【讨论】:
如果您建议使用这种方法的示例(开源)项目,这将很有帮助。 @cyanide:如果“这种方法”是指“产品风味”,在 Google 上搜索"build.gradle" productFlavors"
会出现很多页面,包括 the documentation(但请注意,从 Android Studio 3.0 开始,所有产品风味都需要成为flavorDimension
的一部分)。如果“这种方法”是指我在回答的第三个项目符号中所指的内容,那么如果有任何开源项目使用它,我会感到相当惊讶。以上是关于修改代码以适应 Android Studio 中的不同配置的主要内容,如果未能解决你的问题,请参考以下文章
Android Studio第二十三期 - TextView自适应缩放大小 国外大神的library
修改Android Studio默认的API Level(SDK版本)