Android模块化开发--记录1

参考:https://www.jianshu.com/p/2c2971bd4fc4
https://www.jianshu.com/p/ba32488f9555

  1. 新建Android工程-------WhApp
  2. 在工程的build.gradle将所有module中的版本号统一。
//使用这种统一的依赖定义,ide会主动提示版本升级,如果放在config.gradle ide就不会主动提示版本升级
ext {
    compileSdkVersion = 30
    buildToolsVersion = "30.0.2"
    minSdkVersion = 26
    targetSdkVersion = 30

    appcompatVersion="1.2.0"
    materialVersion="1.2.1"
    constraintlayoutVersion="2.0.4"
    junitVersion="4.13.1"
    androidxJunitVersion="1.1.2"
    espressoCoreVersion="3.3.0"
}

在module中使用示例如下:
在这里插入图片描述
在这里插入图片描述

  1. 在工程下面新建文件夹moduleDemo--------用于存放某一统一大类型的module(示例新建的moduleDemoA、moduleDemoB)
    在工程的主目录的setting.gradle文件中可以配置module的位置,排至示例如下:
include ':common_lib_wh'
include ':moduleDemo:moduleDemoB'
include ':moduleDemo:moduleDemoA'
include ':app'
rootProject.name = "WhApp"
  1. 在跟目下的gradle.properties中配置自定义字段isModule,作为“集成开发模式”和“组件开发模式”的切换开关。
    在module的gradle中配置:
    用isModule判断作为app还是作为lib
    在这里插入图片描述
    在这里插入图片描述

  2. 防止资源命名重复在这里插入图片描述

  3. 解决组件AndroidManifest和主工程AndroidManifest合并的问题
    配置两套AndroidManifest.xml文件
    在这里插入图片描述并在gradle中配置
    在这里插入图片描述

区别:
module文件夹中注册表的标签中指定了具体application类,而release文件夹中的则没有,

module文件夹中注册表的标签中添加一些application属性,而release文件夹中的则什么都没有添加;

module文件夹中的注册表指定QueryActivity为MAIN Activity,也就是要启动的 Activity,而release文件夹中的则没有;

module文件夹中:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.hjqjl.moduledemoa">

    <application
        android:name="debug.DemoAApplication"
        android:allowBackup="false"
        android:icon="@mipmap/demoa_ic_launcher"
        android:label="@string/demoa_app_name"
        android:roundIcon="@mipmap/demoa_ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/DemoaTheme.WhApp">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

release文件夹中:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.hjqjl.moduledemoa">

    <application android:theme="@style/DemoaTheme.WhApp">
        <activity android:name=".MainActivity" />
    </application>

</manifest>

注:APP可以做个壳,入口activity写在需要的module中。

  1. 创建公共通用库common_lib_wh,用于放公共用到的东西,其他module的gradle中添加此库在这里插入图片描述
//implementation声明的依赖包只限于模块内部使用,不允许其他模块使用。
//api声明的依赖包时, 模块依赖于此模块,此模块使用api声明的依赖包是可以被其他模块使用
  1. 解决组件和主工程的Application冲突问题以及组件单独开发初始化(共享)数据问题。
    common_lib_wh中创建BaseApplication,所有module中的Application都继承它。module中的自定义Application都建在Java目录下debug文件家中,与gradle中的配置配合,在作为lib时移除。在这里插入图片描述

  2. 解决library重复依赖以及Sdk和依赖的第三方库版本号控制问题
    Library重复依赖的解决办法就是给整个工程提供统一的依赖第三方库的入口,刚建的 common_lib_wh,把项目常用或者必须用到的库全部在Common库的build.gradle中依赖进来

Common组件除了有功能组件的普遍属性外,还具有其他功能:

1、Common组件的 AndroidManifest.xml 不是一张空表,这张表中声明了我们 Android应用用到的所有使用权限 uses-permission 和 uses-feature,放到这里是因为在组件开发模式下,所有业务组件就无需在自己的 AndroidManifest.xm 声明自己要用到的权限了。

2、Common组件的 build.gradle 需要统一依赖业务组件中用到的 第三方依赖库和jar包,例如我们用到的ActivityRouter、Okhttp等等。

3、Common组件中封装了Android应用的 Base类和网络请求工具、图片加载工具等等,公用的 widget控件也应该放在Common 组件中;业务组件中都用到的数据也应放于Common组件中,例如保存到 SharedPreferences 和 DataBase 中的登陆数据;

4、Common组件的资源文件中需要放置项目公用的 Drawable、layout、sting、dimen、color和style 等等,另外项目中的 Activity 主题必须定义在 Common中,方便和 BaseActivity 配合保持整个Android应用的界面风格统一。

demo地址:https://gitee.com/hjqjl/wh-app

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值