目录

Android模块化开发基础

Module创建

使用Android Studio中的File>New>New Module创建Module /android%E6%A8%A1%E5%9D%97%E5%8C%96%E5%BC%80%E5%8F%91%E5%9F%BA%E7%A1%80/Android%E6%A8%A1%E5%9D%97%E5%8C%96%E5%BC%80%E5%8F%91%E5%9F%BA%E7%A1%80/07B935BD-D0E1-4AFF-9100-EFFADD168FD6.png

Module类型

常用Module类型:

  • Application
  • Library
  • Dynamic Delivery
  • Instant Dynamic Delivery

Application为主模块,我们需要将Library和Dynamic Delivery引入Application。 /android%E6%A8%A1%E5%9D%97%E5%8C%96%E5%BC%80%E5%8F%91%E5%9F%BA%E7%A1%80/Android%E6%A8%A1%E5%9D%97%E5%8C%96%E5%BC%80%E5%8F%91%E5%9F%BA%E7%A1%80/9D1E3275-6E68-4B8B-9A0C-74DC3DACFE0B.png

Aplication

Application为主模块,是应用运行的入口模块,其他的模块被引入Application发挥作用。

Library

Library是普通的子模块,是任何情况下,都会打包进入Application的库,。

Dynamic Delivery

Dynamic Delivery是按需引入的库,根据是否开启onDemand特性来决定是否引入。 module2AndroidManifest.xml

1
2
3
<dist:module 
    dist:onDemand="false">
</dist:module>

module2onDamand="false",表示关闭按需引入,模块会打包进入apk。 module3onDamand=“true”,表示开启按需引入,模块不会打包进入apk,会以第三方库(:third_party)的形式存在云端,在应用运行过程中根据需要额外下载。

Core

:module1:module2:module3共同构成共享核心代码库。

Instant Dynamic Delivery

图例中不包含Instant Dynamic Delivery,这是一种特殊的Dynamic Delivery。“Instant”直译为“瞬间”,你们记得应用商店里的快速启动App吗?Instant Dynamic Delivery写出来的Module就是它。

为什么要引入Dynamic Delivery?

80%的用户使用应用中20%的功能,这意味着你apk中打包的大部分功能对于大部分用户是闲置的,这就很浪费apk的大小空间。引入动态分发,就是为了将冗余的东西尽可能剔除,Library包含用户常用的20%的功能,剩余的模块交给Dynamic Delivery,在用户需要使用的时候再下载这些模块。

Module标注

:app为Application,它的build.gradle

1
apply plugin:'com.android.application'

:module1为Library,它的build.gradle使用

1
apply plugin:'com.android.library'

:module2module3为Dynamic Delivery,它们的build.gradle使用

1
apply plugin:'com.android.dynamic-feature'

Module引入

Application引入Library

:appbuild.gradle

1
implemetation project(':module1')

Application引入Dynamic Delivery

:appbuild.gradle

1
dynamicFeatures = [':module2', ':module3']

Module运行

Run/Debug ConfigurationDynamic features to deloy中选择动态添加的模块 /android%E6%A8%A1%E5%9D%97%E5%8C%96%E5%BC%80%E5%8F%91%E5%9F%BA%E7%A1%80/Android%E6%A8%A1%E5%9D%97%E5%8C%96%E5%BC%80%E5%8F%91%E5%9F%BA%E7%A1%80/D71292E3-8CDB-4490-9249-3E8BAE695BDC.png