Android模块化初体验及教程

Android模块化

一直是Android开发届一个很火的话题,因为公司业务太多,代码越来越臃肿,越来越难维护,为了提升开发效率,减低代码的维护成本,所以采取了模块化开发方案。

我们知道,模块化其实就是讲每个业务,拆分成每个独立的模块,然后通过某种协议来达到模块与模块之间的通信。

一般公司的项目的结构大概的如下:

那自己要怎么做到这个效果呢?

1.第一步

在项目根目录新建一个文件 config.gradle

内容如下:

1ext { 2 // false 单独运行模式 3 // true 组建依赖模式 4 isComponent = true 5 androidConfig = [ 6 compileSdkVersion: 28, 7 minSdkVersion : 19, 8 targetSdkVersion : 28, 9 versionCode : 1, 10 versionName : "1.0" 11 ] 12 appIdConfig = [ 13 // 这里放置,每个模块的包名 14 module1 : "com.xiaolei.module1" 15 ] 16 appcompat_v7_version = '28.0.0' 17}

2.第二步

在你的 Projectbuild.gradle

添加这么一句

apply from: "config.gradle"

3.第三步

在你模块下的 build.gradle 里添加如下:

1//配置apply 2if (isComponent) { 3 apply plugin: 'com.android.library' 4} else { 5 apply plugin: 'com.android.application' 6} 7// 如果你使用kotlin,那么也要在模块下添加kotlin的配置 8apply plugin: 'kotlin-android' 9apply plugin: 'kotlin-android-extensions' 10 11//获取config文件中的配置 rootProject 项目的主对象 12def config = rootProject.ext.androidConfig 13def appIdConfig = rootProject.ext.appIdConfig 14 15android { 16 compileSdkVersion config.compileSdkVersion 17 defaultConfig { 18 minSdkVersion config.minSdkVersion 19 targetSdkVersion config.targetSdkVersion 20 versionCode 1 21 versionName "1.0" 22 23 //如果moudle不是组件,意思就是单独运行模式 24 if (!isComponent) { 25 applicationId appIdConfig.module1 26 } 27 28 //配置BuildConfig 代码中可以调用判断moudle是否为组件 29 buildConfigField("boolean", "isComponent", String.valueOf(isComponent)) 30 //配置资源文件 31 sourceSets { 32 main { 33// 这里需要特别注意一下,区分两种模式,要区分两个不同的 AndroidManifest.xml 34 //如果是单独运行模式则配置 AndroidManifest 35 if (!isComponent) { 36 manifest.srcFile 'src/main/java/AndroidManifest.xml' 37 } else { 38 manifest.srcFile 'src/main/AndroidManifest.xml' 39 } 40 } 41 } 42 } 43}

4.第四步

在你的APP的Module里配置

1dependencies { 2 implementation fileTree(include: ['*.jar'], dir: 'libs') 3 if (isComponent) {//module1 是模块化模式时才允许导入 4 implementation project(':module1') 5 } 6}

独立运行时候的Manifest

1<manifest xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 package="com.xiaolei.module1"> 4 5 <application 6 android:allowBackup="true" 7 android:icon="@mipmap/ic_launcher" 8 android:label="@string/app_name" 9 android:roundIcon="@mipmap/ic_launcher_round" 10 android:supportsRtl="true" 11 android:theme="@style/BaseTheme" 12 tools:ignore="GoogleAppIndexingWarning"> 13 <activity android:name=".TestMainActivity"> 14 <intent-filter> 15 <action android:name="android.intent.action.MAIN"/> 16 <category android:name="android.intent.category.LAUNCHER"/> 17 </intent-filter> 18 </activity> 19 <activity android:name=".Module1Activity"/> 20 </application> 21 22</manifest> 23

组件化依赖时候的Manifest

1<manifest xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 package="com.xiaolei.module1"> 4 5 <application> 6 <activity android:name=".Module1Activity"/> 7 </application> 8</manifest> 9

5.第五步

看教程看到哪里少了文件了,就去哪里的文件夹里自己去新建一个吧

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )