Android开发:《Gradle Recipes for Android》阅读笔记(翻译)3.5——在flavors间合并java代码
问题:
你想要在单独的product flavors里面增加Acitivity或者其它java类。
解决方案:
创建合适的代码目录,增加java类,将它们和main代码合并。
讨论:
flavors和build types里面的string和layout会覆盖主目录下的相关值,java类不一样。如果main目录下面的代码涉及到一个指定的类,只要main目录里面没有,每个flavor和build type里面都可以对这个类的实现。
听起来比实际还要复杂。3.2和3.4节讨论的app有两个代表不同客户的flavors。考虑现在app的一个版本需要在main activity里面增加一个按钮用于呼叫帮助。这个额外的按钮有个“Call for Help”的label。
friendly,wayne的主activity如下:
stark页面相似,只是有一个不同的header:
点击“Call for help”按钮创建一个Intent,启动CallForHelpActivity。这个activity和它相关的layout,从main目录下面移除,复制到stark和wayne文件夹下。完整的项目结构如下:
箭头指出,wayne flavor下面的java代码在classpath里面,但是stark下面的不在。两个flavors都包含CallForHelpActivity,但是两个都实现完全不同。
wayne flavor的帮助页面只有一个简单的包含一个TextView的fragment:
stark flavor的帮助页面由有多个入口的ListFragment组成:
任何main目录下元素相关的类,必须在每个flavor下存在。每个实现可以完全独立。