Android组件化开发注意事项

2018-09-13  本文已影响0人  AFinalStone

新建子模块步骤

本文档主要描述新建子业务模块的步骤,以及开发时的注意事项。

1.新建工程

打开Android Studio(目前只采用该IDE来开发,其他IDE不考虑),点击"File -> New -> New Project...",全新创建一个新的工程,工程名字以及包名根据实际业务来定。

2.新建module

在刚创建好的工程中,点击"File -> New -> New Module... -> Android Library",创建一个新的library module,接下来我们所有的业务代码都将在该module类开发。

注意事项:

在开发阶段,在工程的app模块里直接采用compile project(...)的方式依赖本模块,把app当成是一个demo工程,在demo工程里写好测试代码,调用本模块的实际业务即可。

3.资源名命名规则

所有资源文件的命名都需要以业务模块名为前缀,注意不要与其他业务模块前缀名冲突。假设我们在开发"登录"相关的业务,业务模块名为"login",则相关资源文件命名例子:

包括但不限于以上这些资源文件,所有资源文件的命名都必须遵循该规则,否则可能在集成的时候会被冲突掉。

4.第三方库依赖

所有子业务模块都必须依赖基础业务库,基础业务库包含了一些底层的能力库等,请注意版本号是否有变化:

compile 'com.heima.iou:hmbasebiz:1.0.0'

如果有其他需要使用的依赖库,如第三方依赖库等,并且在其他子业务模块里也有使用的,请确认库的版本号,尽量都保持一致,否则在集成时会发生冲突。

5.业务开发

  1. 业务开发请遵循MVP模式,尽量做到分层明显,可根据实际情况自行选择。
  2. 所有Activity请继承基础模块的BaseActivity,所有Fragment请继承基础模块的BaseFragment。

6.数据存储

  1. 尽量不要使用数据库来存储数据,特殊情况除外。某些ORM框架需要数据库表集中管理,这样不利于实行业务模块组件化。
  2. 使用SharedPreferences时,每个业务模块只管理自己模块需要的数据,SharedPreferences文件名需要通过业务前缀来区分。
  3. 当某些数据需要全局共享时,可以考虑下沉到底层模块。

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/)")

}

}

在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.文档要求

  1. 业务模块接入说明文档
  2. gradle依赖关系图
  3. 业务关系图
上一篇 下一篇

猜你喜欢

热点阅读