Android组件化

本文深入探讨了组件化项目构建的策略,包括基础组件、独立组件及总包组件的区分与构建方法。详细讲解了不同组件类型在build.gradle中的配置差异,以及组件清单文件的定制策略,特别强调了ARouter在组件间通信的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.组件化

首先新建项目 正常创建项目
需要使用几个组件就创建几个

当组件被整合到同一个app中的时候,多个组件的资源会产生冲突,
因此我们在资源文件命名的时候通常会带上组件名作为前缀
组件分为三种:

一种是基础组件,提供各种方法供别的组件使用。
另一种是可单独运行的独立组件。
最后一种是打包时包含其他组件的。

三种组件build.gradle的区别

基础组件
组件头

apply plugin: 'com.android.library'

普通组件
组件头

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

总包组件
组件头

apply plugin: 'com.android.application'

普通组件分为两种状态,一种是能单独打包运行的,这个作为独立app,所以是application
零一种是作为组件提供给别人使用的状态:library

当一个组件作为app单独存在时他需要applicationld,而且作为组件时用library
所以在defaultConfig里进行判断:

defaultConfig {
    if(isLihaofanModule.toBoolean()) {
        applicationId "com.example.lihaofan_day01_module"
    }
    
    minSdkVersion 15
    targetSdkVersion 29
    versionCode 1
    versionName "1.0"

这些判断使用的判断条件为:if(isLihaofanModule.toBoolean())
是在整个工程的gradle.properties文件中定义的

#是否需要单独编译 true表示需要,false表示不需要#isNeedHomeModule=true
isNeedHomeModule=false
#isNeedhotelModule=true
isNeedhotelModule=false
#isNeedMineModule=true
isNeedMineModule=false
#isNeedDestinationModule=true
isNeedDestinationModule=false
### 三种组件清单文件的区别
组件作为独立的app在清单文件中需要application的name属性
````xml
<application    android:allowBackup="true"    android:name=".appApplication"    android:icon="@mipmap/ic_launcher"    android:label="@string/app_name"

并且需要一个入口Activity

<activity android:name=".MainActivity">   
 <intent-filter>        
 <action android:name="android.intent.action.MAIN" />
 
 <category android:name="android.intent.category.LAUNCHER" />  
</intent-filter>
 </activity>

而且为library时是不需要入口的,所以就用不用 intent-filter

所以作为普通组件既需要单独作为APP运行,又需要作为library提供给其他组件。那么它的清单文件也需要两个

在这里插入图片描述

两个清单文件要用哪个需要在build.gradle中进行判断

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

arouter使用

先导入依赖:所有组件化的项目都要导入arouter包

implementation ('com.alibaba:arouter-api:1.4.1')
annotationProcessor 'com.alibaba:arouter-compiler:1.2.2'

使用arouter跨组件传值需要两个组件都写:

testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
javaCompileOptions {    
   annotationProcessorOptions {     
       arguments = [ AROUTER_MODULE_NAME : project.getName() ]    
       }
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值