组件化创建(2019年8月2日20:53:00)

本文详细介绍了组件化开发的流程,包括组件的分类、build.gradle配置区别、清单文件处理,以及如何通过Arouter实现组件间的通信和依赖管理。

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

arouter使用组件化:
http://note.youdao.com/noteshare?id=88cdc84d2f51c80b36b89c8dcb41bfeb&sub=BCEBBA4A629145C9A65535EB451D4283

一. 组件化

新建项目后New-Module-Phone&Tablet Module-输入Library Name-finish即可。

需要几个组件就new几个。
ps:注意当组件被整合到同一个app中的时候,多个组件的资源会产生冲突,因此我们在资源文件命名的时候通常会带上组件名作为前缀

组件的分类
组件分为三种:
   1:	基本组件	----> 给别的组件提供各种方法。
   2:	普通组件	----> 可单独运行的独立组件。
   3:	总包组件	----> 打包时包含其他的组件。
三种组件build.gradle的区别

基础组件 组件头: apply plugin: ‘com.android.library’

普通组件 组件头:
分为两种状态,一种是能单独打包运行的,我们将其视为独立的app,所以是application; 另一种是作为组件供别人使用的状态 :library。
if( isNeedMineModule.toBoolean() ) {
apply plugin: ‘com.android.application’
}else{
apply plugin: ‘com.android.library’
}

总包组件 组件头: apply plugin: ‘com.android.application’

三种组件清单文件的区别

组件作为独立的app在清单文件中需要application的name属性

<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时是不需要这些的

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
       
    </activity>
</application>

所以作为普通组件既需要单独作为APP运行,又需要作为library提供给其他组件。
那么它的清单文件也需要两个
在这里插入图片描述

所以这两个清单文件到底使用哪个也需要在build.gradle中进行判断(也就是下面3.4的使用)

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

二. 组件化创建

1. 创建Module
创建步骤: file-->New-->New Module-->Phone&Tablet Module-->输入Library Name-->finish
2. 在整个工程的gradle.properties中添加条件

在整个工程的gradle.properties中添加条件,用作后文中的判断( if(isNeedMineModule.toBoolean()) )
添加条件格式如下:(isNeed+模块名+Module=true/false)(非固定格式)

	# 是否需要单独编译 true表示需要,false表示不需要
	#isNeedHomeModule=true
	isNeedHomeModule=false
	#isNeedhotelModule=true
	isNeedhotelModule=false
3. 在app中的build.grable(小象)内操作
3.1 第1行(首行)判断此Module是作为依赖还是App使用

	if(isNeedMineModule.toBoolean()) { //判断条件在2中定义
	    apply plugin: 'com.android.application'
	}else{
	    apply plugin: 'com.android.library'
	}
	
3.2 当组件作为app单独存在时,是需要application的(在android中加入判断):
	if (isNeedLocationModule.toBoolean()){
    		applicationId "com.example.location" //包名
    }
3.3 应用build.grable—> android—> defaultConfig下添加:
	 javaCompileOptions {
	     annotationProcessorOptions {
	         arguments = [ AROUTER_MODULE_NAME : project.getName() ]
	     }
	 }

3.4 android下直接添加(普通组件的两种状态: 不同的状态执行不同的清单文件):
	sourceSets {
	        main {
	            if (isNeedMineModule.toBoolean()) { //是app
	                manifest.srcFile 'src/main/debug/AndroidManifest.xml'
	            }  else { //是依赖
	                manifest.srcFile 'src/main/release/AndroidManifest.xml'
	            }
	        }
	    }
	    // 注意: 清单文件的存放参考上面的 三种清单文件的区别
4. 添加Module依赖

若创建的Module属于依赖, 则在应用build.gradle–>dependencies中, 以下面的格式添加:

	//普通组件两种状态需要判断
	if ( !isNeedLocationModule.toBoolean() ) {
	        implementation project(':location')
	}
	
	//基本组件
	implementation project(':common')
	

// 下面两个属于arouter(路由器)依赖
    implementation ('com.alibaba:arouter-api:1.4.1')
    annotationProcessor 'com.alibaba:arouter-compiler:1.2.2'
    

三. arouter使用

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、付费专栏及课程。

余额充值