Android组件化

组件化:在编译期分模块

原理:正常一个App中可以有多个module,但是一般只会有一个module是设置为application的,其他均设置为library,组件化开发就是要每个module都可以运行起来,因此在开发期间每个module均设置为application,发布时再进行合并。

   优点:1.多人协作开发过程中,上拉提交代码,很容易导致代码冲突, 组件化可以有效避免代码冲突   

           2.降低代码模块的耦合度,使代码架构更加清晰,层级更加鲜明

    3.降低了编译速度

         4.方便单元测试


步骤1.在gradle.properties中设置变量, 如IsBuildMudle=false    

        2.在子模块的build.gradle中:

                      println IsBuildMudle.toBoolean()

            if (IsBuildMudle.toBoolean()){
                apply plugin: 'com.android.application'
             } else {
                apply plugin: 'com.android.library'
             }

       3.在主模块的build.gradle中设置:

           println IsBuildMudle.toBoolean()
          if (!IsBuildMudle.toBoolean()) {
             compile project(':ModuleA')
             compile project(':ModuleB')
          } else {
             compile project(':Library')
          }
    4.这样每个module就可以独立安装使用了,注意在修改IsBuildMudle的值时,一定要sync gradle
 
 

当module单独运行和作为module运行时,其activity在manifest中设置也会不同,这里可以根据IsBuildMudle设置不同的manifest:

    sourceSets {
        main {
            if (IsBuildMudle.toBoolean()) {
                manifest.srcFile 'src/main/debug/AndroidManifest.xml'
            } else {
                manifest.srcFile 'src/main/release/AndroidManifest.xml'
            }
        }
    }

在每个子模块的main下创建debug包和release包与java/res平级,

在分别在不同的目录下创建manifest文件,一定要保持debug和release下manifest内容一致


资源冲突问题
当分别开发模块时,容易出资源重复命名的问题,可以在build.gradle中设置resourcePrefix"module1_"
通过给模块设置不同的资源前缀,可以避免重复命名。


model之间的跳转,传值

ActivityRouter, 每个model依赖

compile 'com.github.mzule.activityrouter:activityrouter:1.2.2'
annotationProcessor 'com.github.mzule.activityrouter:compiler:1.1.7'

在需要跳转到的AndroidManifest里设置
<activity android:name=".BActivity">
 
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />

        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />

        <data android:scheme="modularization" />
    </intent-filter>
</activity>

A跳转B, 在B中创建空java类注解

@Router("b")
public class BActivity extends AppCompatActivity {}

A中:

Routers.open(MainActivity.this, Uri.parse("modularization://b"));

Activity间参数传递等,详见ActivityRouter


组件化学习过程中遇到的问题:

 1.把子模块的apply plugin 从library改为application之后,要对子模块里的manifest进行相应内容的添加,比如theme,初始化activity等

2.Model: App中的Activity跳转到ModelB中的BActivity,跳转成功,但是页面BActivity内容不显示

原因:没有在主模块的build.gradle里 设置resourcePrefix"module1_"导致资源冲突(因为:三个模块的xml我起名为act_main.xml)








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值