Android多模块开发

news2024/11/24 6:21:43

Android多模块开发

1. 建立项目和多个模块

​ app为主模块
​ app-setting为功能模块,可作为独立模块运行,也可作为其他模块的资源模块
​ app-video为功能模块
在这里插入图片描述

2. 建立公共环境文件(env.gradle)并在各模块配置

Step1: 建立在根目录下建立环境配置文件(env.gradle),如图
Step2: 在根配置文件(build.gradle)中引入,在根配置文件中配置后,其他模块才能调用env.gradle里面的参数

在这里插入图片描述
Step3: 在各模块中更改配置

​ (1)app主模块中:引入另外两个功能模块

​ (2)app-video中:需要修改两处



app-setting模块中,同app-video模块一样做修改。

此时在app模块中设置跳转,如下,即可检验是否可以运行了:

运行后,就可以跳转到不同的模块中了。

3. 公用依赖管理

​ 在公共配置文件(env.gradle)中添加公用依赖,然后在各应用中导入,如图:

进一步优化配置管理:

​ 因为我们的app主模块、app-setting和app-video模块的build.gradle,里面很多配置都差不多,所以我们可以新建一个app.gradle文件,用来统一配置,如下:为app.gradle里面的内容

// 通用配置类,其他模块引入该模块即可
plugins.apply('org.jetbrains.kotlin.android')
if(isRelease){
    plugins.apply('com.android.library')    // 因为是setting模块,所以,如果是发布版,该模块则作为一个模块,而不是一个应用,下面反之
}else{
    plugins.apply('com.android.application')
}

android {
    compileSdk 32

    defaultConfig {
        minSdk 21
        targetSdk 32
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }
}

dependencies {

    implementation androidx.ktx
    implementation androidx.appcompat
    implementation androidx.material
    implementation androidx.constraintlayout
    testImplementation test.junit
    androidTestImplementation test.junit_androidx
    androidTestImplementation test.espresso

    // 在通用的app.gradle模块中引入基模块,这样其他模块就可以调用app-base中的资源
    implementation project(':app-base')


}

​ 然后其他,几个功能模块(app-setting, app-video)可以在其gradle文件中引入app.gradle即可,如图:

4. 公共资源文件的管理

​多个模块可能会重复使用一些资源(如:图片)或基类,则可以通过新建一个资源模块app-base(引入的是:‘com.android.library’),来保存一些公共资源文件:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BwPewGnq-1683471068414)(../image/Android多模块开发/image-20230507224433545.png)]然后在上面的公共资源文件app.gradle中引入app-base模块,这样其他几个功能模块基于可以使用app-base中的资源了:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4ymOII1R-1683471068416)(../image/Android多模块开发/image-20230507224607204.png)]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/499877.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第31步 机器学习分类实战:多轮建模

开始填坑之旅。 首先,之前提过,random_state这个参数,它的功能是确保每次随机抽样所得到的数据都是一样的,有利于数据的复现。比如,我们这十个ML模型,用的参数都是random_state666,这样作比较才…

【写一个hello的html页面,将页面放到服务器,通过浏览器访问页面,这个过程是怎么实现的?】第一个 servlet 程序

第一个 servlet 程序 第一个 servlet 程序1. 创建项目创建好后的 默认目录 解析 2. 引入依赖为什么要引入依赖? 3. 创建目录结构1、在 main 目录下创建一个 webapp 目录2、在 webapp 下创建一个 WEB-INF 目录3、在 WEB-INF 目录下创建一个 web.xml 文件4、web.xml 需…

章节3:02-Apache Commons Collections反序列化漏洞

章节3:02-Apache Commons Collections反序列化漏洞 02-Apache Commons Collections反序列化漏洞 漏洞爆出 2015.01.28 Gabriel Lawrence和Chris Frohoff https://speakerdeck.com/frohoff/appseccali-2015-marshalling-pickles-how-deserializing-objects-can-r…

《Java虚拟机学习》 asmtools 字节码汇编器使用 与 JVM识别方法重载 的思考

1.asmtools下载 链接:https://pan.baidu.com/s/1R3nAaUbN1Dkf6UKkdEMSEA?pwdk8l8 提取码:k8l8 2.结合方法重载实验的使用 总所周知,方法重载跟方法名无关,但对于JVM而言,区别方法主要通过 类名,方法名&…

java spring MVC REST风格概念叙述

REST属于spring MVC中的一个知识点 REST是三个单词的缩写 即 Representational State Transfer 意思为 表现形式状态转换 老实说 不用尝试字面上理解 因为字面意思 确实是比较抽象 其实 意思就是 访问网络资源的格式 转换 下图 对比了 传统风格和REST风格 请求路径的差别 RES…

【英语】大学英语CET考试,阅读部分2(长篇阅读,选词填空,综合演练)

文章目录 1、长篇阅读(连连看,要会做)1.1 解题技巧(定位词扫读,看到大于看懂,一题带练)1.2 做题方法复习总结1.3 题目练习(2篇文章) 2、选词填空(只有5分&…

opencv_c++学习(五)

Mat类数值存储方式 上图为opencv中三通道数据的存储方式,反映到图像上则为空间维度为3*3,通道为3的图像。 Mat类的属性 Mat类的属性如上,在这里我们解释一下step。step是行列数与数据类型的字节数相乘的数据。 Mat类元素读取 在Mat中&…

云原生: istio+dapr构建多运行时服务网格...  多运行时是一个非常新的概念。在

2020 年,Bilgin Ibryam 提出了 Multi-Runtime(多运行时)的理念,对基于 Sidecar 模式的各种产品形态进行了实践总结和理论升华。那到底什么是多运行时呢?首先还是得从分布式应用的四大类基本需求讲起。简单来讲任何分布…

【力扣周赛】第344场周赛

【力扣周赛】第344场周赛 6416:找出不同元素数目差数组题目描述解题思路 6417:频率跟踪器题目描述解题思路 6418:有相同颜色的相邻元素数目题目描述解题思路 6419:使二叉树所有路径值相等的最小代价题目描述解题思路 6416&#xf…

C++ ---- 类和对象(上)

目录 本节目标 常见问题 面向过程和面向对象的理解 什么是类如何定义类 类的引入 类的定义 类的两种定义习惯 类的作用域 类的访问限定符 访问限定符介绍 封装 封装的意义 类的实例化 类对象模型 类对象的存储方式 结构体对齐 计算类对象的大小 this指针 问题…

数青蛙​、[USACO10FEB]Chocolate Giving S

一、1419. 数青蛙 思路 这道题有俩种解法,一是记数,二是贪心 记数: 这是官方的题解 我们用frog_ num来表示现在正在发出蛙鸣声的青蛙数目,用cnt[c] 示已经发出-次有效蛙鸣中的字符c的青蛙个数,比如当cnt[c] 2时表示当前有2只…

[mini LCTF 2023] 西电的部分

感觉比赛还是很不错,就是有点难了,不过都是简单题重复更没意思。作出一道来就有一点收获。 misc1 签到题也不简单,已经很久不作misc了,感觉这东西需要安的东西太多,怕机子累坏了。 一个复合的wav声音文件&#xff0…

【Android入门到项目实战-- 8.5】—— 使用HTTP协议访问网络的实践用法

目录 准备工作 一、创建HttpUtil类 二、调用使用 一个应用程序可能多次使用到网络功能,这样就会大量代码重复,通常情况下我们应该将这些通用的网络操作封装到一个类里,并提供一个静态方法,想要发送网络请求的时候,只…

【c语言】字符串匹配(搜索) | API仿真

c语言系列专栏:c语言之路重点知识整合 字符串知识点:字符串基本概念、存储原理 字符串匹配 目录 一、字符串匹配二、strstr仿真声明:指针方式定义:调用测试:运行结果: 一、字符串匹配 字符串匹配是对一个…

HttpClient连接池使用不当问题分析解决

目录 背景代码实现工具类功能实现模拟使用 问题分析与定位解决方案总结 背景 最近遇到一个HttpClient问题,某个接口一直报404错误。该接口使用HttpClient调用其他服务获取数据,为了提高接口调用性能,利用httpclient池化技术来保证请求的数量…

嵌入式中利用软件实现定时器的两种方法分析

目录 第一:简介 第二:链表实现方式 第三:结构体实现方式 第一:简介 在一般的嵌入式产品设计中,介于成本、功耗等,所选型的MCU基本都是资源受限的,而里面的定时器的数量更是有限。在我们软件…

Origin如何绘制基础图形?

文章目录 0.引言1.绘图操作2.图形设置3.图形标注 0.引言 因科研等多场景需要绘制专业的图表,笔者对Origin进行了学习,本文通过《Origin 2022科学绘图与数据》及其配套素材结合网上相关资料进行学习笔记总结,本文对绘制基础图形进行阐述。 1.…

2023.5.7 第五十二次周报

目录 前言 文献阅读:基于BO-EMD-LSTM模型预测教室长期二氧化碳浓度 背景 思路 BO-EMD-LSTM 混合模型 EMD 算法 与其他模型的比较 结论 论文代码 总结 前言 This week, I studied an article that uses LSTM to predict gas concentration.This study wa…

Springboot +Flowable,按角色分配任务

一.简介 在为 UserTask 设置处理人的时候,除了设置单个的处理人,也可以设置 Group(分组),就是某一个用户组内的所有用户都可以处理该 Task。 二.绘制流程图 首先我们还是使用之前旧的流程图,流程图截图如…

从0学Spring Boot框架(Spring Boot配置文件与Spring Boot日志文件)

文章目录 1. 什么是Spring Boot?2. 如何创建Spring Boot项目?3. 验证Spring Boot项目的创建3.1 补充添加依赖3.2 代码示例 4. Spring Boot配置文件4.1 配置文件的作用4.2 配置文件的格式4.2.1 properties的语法4.2.2 yml的语法4.2.3 properties与yml的对…