Android组件化开发注意事项
新建子模块步骤
本文档主要描述新建子业务模块的步骤,以及开发时的注意事项。
1.新建工程
打开Android Studio(目前只采用该IDE来开发,其他IDE不考虑),点击"File -> New -> New Project...",全新创建一个新的工程,工程名字以及包名根据实际业务来定。
2.新建module
在刚创建好的工程中,点击"File -> New -> New Module... -> Android Library",创建一个新的library module,接下来我们所有的业务代码都将在该module类开发。
注意事项:
- Module name:以业务名来命名即可;
- 包名设置:格式为"com.hm.iou." + 模块业务名,注意不要与线上已经有的模块包名重复;
在开发阶段,在工程的app模块里直接采用compile project(...)的方式依赖本模块,把app当成是一个demo工程,在demo工程里写好测试代码,调用本模块的实际业务即可。
3.资源名命名规则
所有资源文件的命名都需要以业务模块名为前缀,注意不要与其他业务模块前缀名冲突。假设我们在开发"登录"相关的业务,业务模块名为"login",则相关资源文件命名例子:
- layout文件:login_activity_quicklogin.xml、login_activity_register.xml
- anim文件:login_slide_in.xml
- mipmap文件:login_btn_submit.png
- string:<string name="login_submit">提交</string>
包括但不限于以上这些资源文件,所有资源文件的命名都必须遵循该规则,否则可能在集成的时候会被冲突掉。
4.第三方库依赖
所有子业务模块都必须依赖基础业务库,基础业务库包含了一些底层的能力库等,请注意版本号是否有变化:
compile 'com.heima.iou:hmbasebiz:1.0.0'
如果有其他需要使用的依赖库,如第三方依赖库等,并且在其他子业务模块里也有使用的,请确认库的版本号,尽量都保持一致,否则在集成时会发生冲突。
5.业务开发
- 业务开发请遵循MVP模式,尽量做到分层明显,可根据实际情况自行选择。
- 所有Activity请继承基础模块的BaseActivity,所有Fragment请继承基础模块的BaseFragment。
6.数据存储
- 尽量不要使用数据库来存储数据,特殊情况除外。某些ORM框架需要数据库表集中管理,这样不利于实行业务模块组件化。
- 使用SharedPreferences时,每个业务模块只管理自己模块需要的数据,SharedPreferences文件名需要通过业务前缀来区分。
- 当某些数据需要全局共享时,可以考虑下沉到底层模块。
7.组件生命周期管理
当业务组件需要在应用的Application.onCreate()里进行初始化时。
8.怎么发布本地maven库
前期测试时,请先在本机发布maven库。 在module的根目录下新建一个maven_local.gradle文件:
apply plugin: 'maven'
uploadArchives {
repositories.mavenDeployer {
pom.version = '1.0.0'
pom.artifactId = 'hmloginlocal'
pom.groupId = 'com.heima.iou'
repository(url: "[file:///Users/hjy/.m2/repository/](file:///Users/hjy/.m2/repository/)")
}
}
- version:maven库的版本号,初始版本都从1.0.0开始;
- groupId:maven库的组,内部使用固定为"com.bwton.android";
- artifactId:maven库的id,格式为"bwt + 业务模块名",为了与远程库区分,本地库请加local后缀;
- repository:其中"file:///Users/hjy/.m2/repository/"替换成自己本机的gradle缓存目录;
在module的build.gradle里增加发布脚本的引用"apply from: './maven_push.gradle'",然后点击"IDE右侧Gradle -> Gradle projects -> 业务module -> Tasks -> upload -> uploadArchives",最后会生成并上传一个本地的maven库。
9.怎么发布远程maven库
最后发布时,请发布在远程maven服务器上,项目里都采用远程依赖。与发布本地maven库相似,在module的根目录下新建maven_push.gradle文件,然后在module的build.gradle里,将发布本地maven库的脚本切换成"apply from: './maven_push.gradle'"即可。
apply plugin: 'maven'
apply plugin: 'signing'
configurations {
deployerJars
}
repositories {
mavenCentral()
}
uploadArchives {
repositories {
mavenDeployer {
pom.version = '1.0.0'
pom.artifactId = 'hmlogin'
pom.groupId = 'com.heima.iou'
snapshotRepository(url: '[http://60.190.227.164:8088/nexus/repository/maven-snapshots/](http://60.190.227.164:8088/nexus/repository/maven-snapshots/)') {
authentication(userName: '***', password: '***')
}
repository(url: '[http://60.190.227.164:8088/nexus/repository/maven-releases/](http://60.190.227.164:8088/nexus/repository/maven-releases/)') {
authentication(userName: '***', password: '***')
}
}
}
}
// type显示指定任务类型或任务, 这里指定要执行Javadoc这个task,这个task在gradle中已经定义
task androidJavadocs(type: Javadoc) {
// 设置源码所在的位置
source = android.sourceSets.main.java.sourceFiles
}
// 生成javadoc.jar
task androidJavadocsJar(type: Jar) {
// 指定文档名称
classifier = 'javadoc'
from androidJavadocs.destinationDir
}
// 生成sources.jar
task androidSourcesJar(type: Jar) {
classifier = 'sources'
from android.sourceSets.main.java.sourceFiles
}
// 产生相关配置文件的任务
artifacts {
archives androidSourcesJar
archives androidJavadocsJar
}
10.文档要求
- 业务模块接入说明文档
- gradle依赖关系图
- 业务关系图