当前位置: 首页 > news >正文

Android Gradle 骚操作,将两个项目合并到一个项目中

1. 前言

在工作中,由于各种原因,导致需要将两个可单独运行的App项目,合并到一个git仓库里,且单独的App项目里还有其他Module模块。
如果只是将两个项目复制到同一个文件夹下,还是得单独打开各个项目,是很不方便的。
而我想到达到的效果是,Android Studio打开两个项目同属的根文件夹,即可加载出两个项目,可以在Android Studio内部切换项目编译运行。

如下图所示,我们现在有两个项目

  • MyProject1 : 里面有依赖MyModule1这个Library
  • MyProject2 : 是一个单独的App,没有依赖其他Library

接下来,我们就以这两个项目为例,通过修改gradle,合并到一个项目中

在这里插入图片描述

2. include 函数用法

首先,我们都知道在Gralde中,include函数可以用来依赖子项目。
比如我们新建的项目,在settings.gradle中,就会有这么一句,用来依赖app模块。

include ":app"

我们点击include,可以发现include其实是一个方法,参数是个可变字符串,可以传入若干个项目的路径,比如:app

default void include(String... projectPaths) {this.include((Iterable)Arrays.asList(projectPaths));
}

那如果项目是在子目录需要怎么办呢 ?
这里的:是用来分割目录的,那么依赖子目录的项目就是:xxxx:yyyy这种形式了

3. 实现步骤

3.1 创建一个新的项目

我们知道了include的用法,那么就可以用include来实现合并。
首先我们先创建一个全新的项目,比如MyProjectTest,并删除其app文件夹下的代码。

在这里插入图片描述

3.2 复制项目到MyProjectTest

MyProject1MyProject2复制到MyProjectTest
在这里插入图片描述

3.3 修改settings.gradle

修改MyProjectTestsettings.gradle
原本是这样两行代码

rootProject.name = "MyProjectTest"
include ':app'

修改为

rootProject.name = "MyProjectTest"
include ':MyProject1:app'
include ':MyProject1:MyModule1'
include ':MyProject2:app'

点击下Sync按钮,会提示报错
在这里插入图片描述
因为在MyProject1中,我们依赖了MyModule1

implementation project(':MyModule1')

所以这里提示找不到了,需要修改为 :MyProject1:MyModule1

implementation project(':MyProject1:MyModule1')

这时我们再点击Sync按钮,可以发现多了两个可运行的项目选项

在这里插入图片描述
选择一个项目,点击运行,可以发现正常安装到手机上了。

4. 进一步优化

到这里,本文的目标基本就完成了,实现了将两个项目合并到一个项目中。
但是,这个时候,我们如果用Android Studio单独打开MyProject1,会发现MyProject1编译报错了。
因为我们将implementation project(':MyModule1')修改为了implementation project(':MyProject1:MyModule1'),与MyProjectTest产生了耦合。
这显然是不合理的,理想的情况,应该是合并两个项目后,单独的项目依旧可以在Android Studio上单独运行。
那应该怎么办呢 ?

4.1 给项目指定路径

其实,我们可以使用project.projectDir ,指定子项目的路径。

修改MyProjectTestsettings.gradle,给MyModule1指定路径。

rootProject.name = "MyProjectTest"include ':MyProject1:app'
include ':MyModule1'
include ':MyProject2:app'project(':MyModule1').projectDir = new File('/MyProject1/MyModule1')

然后将MyProject1下的 implementation project(':MyProject1:MyModule1')依赖修改会implementation project(':MyModule1')

再次点击Sync按钮,点击运行,发现依旧是可以运行的。

而且,这个时候,单独用Android Studio打开MyProject1,也是能够单独运行的。

4.2 给子项目改名

在这里插入图片描述

点击Edit Configurations,我们还可以给子项目改名

在这里插入图片描述
删除名字里的.app,最终效果如下

在这里插入图片描述
至此,我们就完成了将两个项目合并成一个项目的所有操作。

5. 如果还有一个可单独运行的项目 ?

如果MyProject2中还有一个可单独运行的子项目,那需要怎么整合呢 ?
其实也是一样的,在MyProjectTestsettings.gradle中,增加include依赖。

include ':MyProject2:xxxx'

这里的xxxx是这个子项目的名称,然后Sync一下,就可以看到这个子项目单独的运行入口了。

6. 其他

6.1 本文源码

源码下载地址 : Android Studio中,将两个项目合并到一个项目中

6.2 参考

【Android Gradle 插件】settings.gradle 配置文件 ( 配置基本作用 | include 函数用法 | 目录层级配置 | 修改 Module 模块构建脚本名称 )_setting.gradle 构建多项目 设置构建包名称

相关文章:

Android Gradle 骚操作,将两个项目合并到一个项目中

1. 前言 在工作中,由于各种原因,导致需要将两个可单独运行的App项目,合并到一个git仓库里,且单独的App项目里还有其他Module模块。 如果只是将两个项目复制到同一个文件夹下,还是得单独打开各个项目,是很不…...

虹科案例|如何分析设备故障时间和次数,打破生产瓶颈?

虹科设备绩效管理系统 保障生产设备的稳定性和可靠性 生产设备的稳定性和可靠性是保证企业正常生产的重要条件之一,设备故障的频发严重影响企业的正常生产,那么如何分析设备故障时间和次数,查找设备故障原因,协助企业打破生产瓶…...

SVN代码迁移到Git方法

1.在SVN上新增一个项目 一、点击新建项目 二、创建空白项目 三、填入项目信息 四、myProject项目模板创建成功 2.将代码提交到Git 一、新建一个文件夹myProject,将从SVN下载过来的代码复制一份拷贝到该文件夹下,注意:不要把.SVN文件拷…...

Linux更换阿里云yum源

1、备份 cd /etc/yum.repos.d/ mv CentOS-Base.repo CentOS-Base.backup2、下载新的CentOS-Base.repo 到/etc/yum.repos.d/ wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo如果出现解析错误 Could not resolve host: mirrors.a…...

【1.3】Java微服务:Spring Cloud版本说明

✅作者简介:大家好,我是 Meteors., 向往着更加简洁高效的代码写法与编程方式,持续分享Java技术内容。 🍎个人主页:Meteors.的博客 💞当前专栏: 微服务 ✨特色专栏: 知识分享 &#x…...

OpenMP

官方文档:OpenMP | LLNL HPC Tutorials OpenMP总览 统一内存访问:OpenMP、Pthreads 非统一内存访问:MPI OpenMP与Pthread OpenMP原理 串行区到达并行区后会派生多个线程,并行区代码执行完后进行线程合并,剩下主线程 编…...

Eureka 学习笔记4:EurekaClient

版本 awsVersion ‘1.11.277’ EurekaClient 接口实现了 LookupService 接口&#xff0c;拥有唯一的实现类 DiscoveryClient 类。 LookupService 接口提供以下功能&#xff1a; 获取注册表根据应用名称获取应用根据实例 id 获取实例信息 public interface LookupService<…...

前端后端路径问题详解

加了项目名&#xff0c;访问所有页面都是 在 项目名下 出来的路径 不加项目名&#xff0c;访问所有页面都不用加项目名&#xff0c;然后前后端的加/的效果都一样&#xff0c;都是在根目录下没有项目名的路径&#xff01;&#xff01;&#xff01; 后端 一、MVC 1.不管是转发…...

@vue/composition-api原理解析

前言 上一篇文章介绍了vue/composition-api是什么&#xff0c;以及为什么要用&#xff0c;现在来系统地解析一下 vue/composition-api 的实现原理&#xff0c;希望可以加深对其工作机制的理解。 老规矩先分享下AI评价&#xff1a;对vue/composition-api实现原理的介绍整体上非…...

Kubernetes(K8s)从入门到精通系列之三:K8s的基本概念和术语之资源对象概述

Kubernetes K8s从入门到精通系列之三&#xff1a;K8s的基本概念和术语之资源对象概述 K8s中的基本概念和术语大多是围绕资源对象(Resource Object)来说的&#xff0c;而资源对象在总体上可分为以下两类&#xff1a; 某种资源的对象&#xff0c;例如节点(Node)、Pod、服务(Serv…...

cc2652在使用过程中的一些注意事项

可能不只是cc2652有这些坑&#xff0c;估计cc26xx系列都存在。 CCS的预编译宏配置位置 时钟获取 时钟获取__STATIC_INLINE uint32_t SysCtrlClockGet( void )在sys_ctrl.h中&#xff0c;sys_ctrl.h没有在工程路径下面&#xff0c;在其sdk中 节拍时间获取 ICall_getTicks(); …...

YAPI接口自动鉴权功能部署详解

目录 安装准备 在线安装 离线安装 配置使用 安装准备 以下操作&#xff0c;默认要求自己部署过yapi&#xff0c;最好是部署过yapi二次开发环境。 无论是选择在线安装或者是本地安装&#xff0c;都需要安装client工具。 1、yapi-cli&#xff1a;npm install yapi-cli –g…...

【雕爷学编程】Arduino动手做(180)---Seeeduino Lotus开发板3

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…...

搜索与图论(二)

最短路 单源最短路 所有边权都是正数 朴素Dijkstra算法 基本思路:从1号点到其他点的最短距离 步骤: 定义一个s集合包含当前已确定最短距离的点 1、初始化距离dis[1] 0,dis[其它] 正无穷 2、for i 0-n循环n次 2.1找到不在s中的距离最近的点 ->t 2.2把t加到s当中去…...

【SQL】-【计算两个varchar类型的timestamp的毫秒差】

背景 TRANSTAMP3、TRANSTAMP2在Oracle数据库中的类型为varchar&#xff0c;但实际保存的值是时间戳timestamp类型&#xff0c;现在要计算二者的毫秒差 Oracle或MySQL extract(second from (to_timestamp(TRANSTAMP3,yyyy-mm-dd hh24:mi:ss.ff) - to_timestamp(TRANSTAMP2,yyy…...

Java 微信商家打款到零钱(旧版本接口)

旧版微信支付接口要求请求时携带证书请求 构建请求参数 /*** 付款到零钱** param withdrawalDto dto撤军* return {link Map }<{link String }, {link Object }>* throws Exception 异常* Author chen 2023-07-27 15:04*/private Map<String, Object> payToUser(Wi…...

Vue+Element ui Study

目录 一、VueElement ui 1、show-overflow-tooltip属性设置宽度 2、this.$refs使用方法 Error in v-on handler: “TypeError: Cannot read properties of undefined (reading ‘xxx‘)“ 一、VueElement ui 1、show-overflow-tooltip属性设置宽度 :show-overflow-toolti…...

JAVA基础-多线程入门(详解)

目录 引言 一&#xff0c;线程概念 二&#xff0c;创建线程 2.1&#xff0c;继承Thread类&#xff0c;重写run方法 2.2&#xff0c;实现Runnable接口&#xff0c;重写run方法&#xff0c;实现Runnable接口的实现类的实例对象作为Thread构造函 数的target 2.3&#xff0c;通…...

Cirno‘s Perfect Equation Class 2023牛客暑期多校训练营5 D

登录—专业IT笔试面试备考平台_牛客网 题目大意&#xff1a;有q次询问&#xff0c;每次给出三个整数k&#xff0c;c&#xff0c;n&#xff0c;求有多少满足条件的数对&#xff08;a&#xff0c;b&#xff09;满足kabc且c是b的倍数&#xff0c;且gcd(a,b)>n 1<q<100;…...

pytorch学习——如何构建一个神经网络——以手写数字识别为例

目录 一.概念介绍 1.1神经网络核心组件 1.2神经网络结构示意图 1.3使用pytorch构建神经网络的主要工具 二、实现手写数字识别 2.1环境 2.2主要步骤 2.3神经网络结构 2.4准备数据 2.4.1导入模块 2.4.2定义一些超参数 2.4.3下载数据并对数据进行预处理 2.4.4可视化数…...

智能样式识别Word文档智能排版批量处理文档格式统一设置字体、字号、颜色、段落间距高效统一样式排版工具

大家好&#xff0c;我是大飞哥。在日常办公中&#xff0c;批量处理 Word 文档格式是最耗时的工作之一&#xff0c;尤其是多份文档样式不统一、表格错乱、图片排版混乱&#xff0c;手动调整不仅效率极低&#xff0c;还很难做到规范一致&#xff0c;严重影响办公效率 —— 这款Wo…...

现在有开源的最好的矢量动画模型是什么,什么配置的电脑可以部署

目录 一、主流开源矢量动画模型对比 二、电脑配置方案&#xff08;按预算分级&#xff09; 1. 旗舰级&#xff08;稳跑 OmniLottie 高性能&#xff09; 2. 主流级&#xff08;稳跑 AnimateDiff 兼顾通用&#xff09; 3. 入门级&#xff08;轻量应用&#xff09; 三、关…...

效率倍增:用快马AI生成服务器批量管理工具,告别重复劳动

最近在团队里负责服务器运维工作&#xff0c;经常需要同时管理几十台服务器。每次登录、执行重复命令、检查状态都要耗费大量时间&#xff0c;直到发现了用InsCode(快马)平台快速搭建批量管理工具的方法&#xff0c;效率直接翻倍。今天就把这个自动化管理方案分享给大家。 痛点…...

NSSCTF做题记录十 | [巅峰极客 2022 决赛]开端:strangeTempreture

[巅峰极客 2022 决赛]开端&#xff1a;strangeTempreture随便点击一个流量包&#xff0c;右击点击追踪流&#xff0c;TCP 流把这几个字母拼接到一起&#xff0c;下面还有很多ZmxhZ3s5N2JmZWIwMy1mYTVjLWFhNmYtYWQxZS05YzVkMzhjNzQ0OWV9base64 解码&#xff0c;得到 flagflag{97…...

用MATLAB搞定模电实验:单管共射放大电路静态工作点与放大倍数的保姆级仿真

MATLAB仿真单管共射放大电路&#xff1a;从理论到实践的完整指南 引言 在电子工程领域&#xff0c;单管共射放大电路是模拟电路设计的基石之一。传统实验教学中&#xff0c;学生往往需要花费大量时间搭建实体电路、调整参数并测量数据&#xff0c;这不仅效率低下&#xff0c;…...

5款轻量级效率工具让你的文字识别效率提升300%:Umi-OCR完全指南

5款轻量级效率工具让你的文字识别效率提升300%&#xff1a;Umi-OCR完全指南 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片&#xff0c;PDF文档识别&#xff0c;排除水印/页眉页脚&#xff0c;扫描/生成二维码。内…...

【CentOS】sshd服务启动失败全攻略:从权限修复到目录缺失的完整解决方案

1. 当sshd服务罢工时&#xff0c;我们该从哪里入手&#xff1f; 每次遇到sshd服务启动失败&#xff0c;就像面对一台突然熄火的汽车——你明明记得昨天还好好的&#xff0c;今天却怎么都打不着火。作为运维人员&#xff0c;这种情况再熟悉不过了。最近我就遇到一个典型案例&…...

随着AI和电商重塑消费者购买行为,全球美妆市场增长10%

随着数字优先和AI影响下的全球电商加速发展&#xff0c;线上销售额增速达到线下门店的6倍 全球消费者情报领军企业NielsenIQ (NYSE:NIQ)今日发布《2026年美妆行业现状报告》。报告显示&#xff0c;全球美妆市场同比增长10%&#xff0c;电商销售额增速达到线下门店的6倍。该结果…...

PPTist:开源在线演示文稿工具的创新实践与全场景应用指南

PPTist&#xff1a;开源在线演示文稿工具的创新实践与全场景应用指南 【免费下载链接】PPTist PowerPoint-ist&#xff08;/pauəpɔintist/&#xff09;, An online presentation application that replicates most of the commonly used features of MS PowerPoint, allowing…...

腾讯云端Openclaw+飞书 多机器人配置全攻略(新手友好版)

前言&#xff1a;随着AI自动化工具的普及&#xff0c;Openclaw凭借强大的自主执行能力&#xff0c;成为很多人提升效率的首选&#xff1b;而飞书作为高效协同工具&#xff0c;其机器人功能可无缝融入日常工作流。当两者结合&#xff0c;配置多机器人实现分工协作&#xff08;如…...