同样 Manifest.xml 也须要有两套:
- sourceSets {
- main {
- if (isBuildModule.toBoolean()) {
- manifest.srcFile 'src/main/debug/AndroidManifest.xml'
- } else {
- manifest.srcFile 'src/main/release/AndroidManifest.xml'
- }
- }
- }
如图:
- <application
- ...
- >
- <activity
- android:name="com.baronzhang.android.newhouse.NewHouseMainActivity"
- android:label="@string/new_house_label_home_page">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- </application>
realease 模式下的 AndroidManifest.xml :
同时针对模块化我们也定义了一些本身的游戏规矩:
- 对于 Business Module Layer,各营业模块之间不许可存在互相依附关系,它们之间的跳转通信采取路由框架 Router 来实现(后面会介绍 Router 框架的实现);
- 对于 Business Component Layer,单一营业组件只能对应某一项具体的营业,个性化需求对外部供给接口让调用方定制;
- 合理控制各组件和各营业模块的拆分粒度,太小的公有模块不足以构成零丁组件或者模块的,我们先放到类似于 CommonBusiness 的组件中,在后期赓续的重构迭代中视情况进行进一步的拆分;
- 上层的公有营业或者功能模块可以慢慢下放到基层,合理把握好度就好;
- 各 Layer 间严禁反向依附,横向依附关系由各营业 Leader 和技巧小组商讨决定。
模块间跳转通信(Router)
对营业进行模块化拆分后,为了使各营业模块间解耦,是以各个 Bussiness Module 都是自力的模块,它们之间是没有依附关系。那么各个模块间的跳转通信若何实现呢?
比如营业上请求大年夜新房的列表页跳转到二手房的列表页,那么竽暌股于是 NewHouseModule 和 SecondHouseModule 之间并不互相依附,我们经由过程想如下这种显式跳转的方法来实现 Activity 跳转显然是弗成能的实现的。
- Intent intent = new Intent(NewHouseListActivity.this, SecondHouseListActivity.class);
- startActivity(intent);
有的同窗可能会想到用隐式跳转,经由过程 Intent 匹配规矩来实现:
- Intent intent = new Intent(Intent.ACTION_VIEW, "://:/");
- startActivity(intent);
然则这种代码写起来比较繁琐,且轻易掉足,掉足也不太轻易定位问题。是以一个简单易用、解摊开辟的路由框架是必须的了。
我本身实现的路由框架分为路由(Router) 和参数注入器(Injector) 两部分:
Router 供给 Activity 跳转传参的功能;Injector 供给参数注入功能,经由过程编译时生成代码的方法在 Activity 获取获取传递过来的参数,简化开辟。
Router
路由(Router)部分经由过程 Java 注解结合动态代劳来实现,这一点和 Retrofit 的实现道理是一样的。
推荐阅读
【51CTO.com原创稿件】提到Linux,我们就会想到红帽,就跟提到Windows就会想到微软一样。作为一家专注于架构平>>>详细阅读
本文标题:Android模块化探索与实践
地址:http://www.17bianji.com/lsqh/35300.html
1/2 1