android组件化项目部署

Android 组件化实战二: 项目部署 前言 组件化项目的意义主要体现在这几个方面,首先就是面试的时候,如果简历上写了三五年的工作经历,但是被问到组件化的相关原理打不上来,确实说不过去。在开发需求层面,即不相互依赖、又可以相互交互、任意组合、高度解耦;在团队开发效率层面,可以分模块打包、测试,统一版本管理。 Phone Module和Android Library区别、切换 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uZF1rvIC-1591940447347)(C:\Users\dell\Pictures\C 阅读详情

组件化的好处

分模块打包 测试  统一版本管理  

组件化可以不互相依赖,但可以互相交互,任意组合,高度结偶

phone module:新建出可以独立运行的模块  

apply plugin: 'com.android.application'
它是有

applicationId: "com.example.gradle"lib module:新建出不可以可以独立运行的模块
apply plugin: 'com.android.library'

没有applicationId

 

如果是app和lib切换的只需要改二个地方

第一:applicationId: "com.example.gradle"

第二:apply plugin: 'com.android.application'

那么什么是组件化和集成化呢?

我们看到上面的app和order都是module 都是可以直接运行的,这是组件化 ,而personal是一个lib 它就是集成化,它上面没有录色的点

可以看到这二个都可以独立运行.

上篇博客讲了gradle的一些语法

config.gradle

ext{
    //false组件化  true集成化表示要打包测试上线
    isRelease = false
    androidId=[
            compileSdkVersion:28,
            buildToolsVersion:"29.0.0",
            minSdkVersion: 15,
            targetSdkVersion: 28,
            versionCode: 1,
            versionName: "1.0"
    ]
    appId=[
            app: "com.example.gradle",
            order: "com.example.order",
            personal: "com.example.personal",
    ]
    url=[
            debug : "https://www.baidu.com",
            release : "https://qq.com"
    ]
    supportLibrary = '28.0.0'
    support=[
            appcompat:"com.android.support:appcompat-v7:${supportLibrary}",
            constraint: "com.android.support.constraint:constraint-layout:1.1.3"
    ]
}

是组件化还是集成主要是通过isRelease去判断的,现在看下build.gradle的配置

现在看下app中的build.gradle配置

apply plugin: 'com.android.application'
def androidId=rootProject.ext.androidId
def appId = rootProject.ext.appId
def support = rootProject.ext.support
android {
    compileSdkVersion androidId.compileSdkVersion
    buildToolsVersion androidId.buildToolsVersion
    defaultConfig {
        applicationId appId.app
        minSdkVersion androidId.minSdkVersion
        targetSdkVersion androidId.targetSdkVersion
        versionCode androidId.versionCode
        versionName androidId.versionName
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        debug{
            buildConfigField("Boolean","isRelease",String.valueOf(isRelease))
        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}
dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation support.appcompat
    implementation support.constraint
    implementation project(":common")
    if(isRelease){
        implementation project(":order")
        implementation project(":personal")
    }
}

order是一个module build.gradle

//如果是集成环境 这个order就是一个library
if(isRelease){
    apply plugin: 'com.android.library'
}else{
    apply plugin: 'com.android.application'
}
def androidId=rootProject.ext.androidId
def appId = rootProject.ext.appId
def support = rootProject.ext.support
android {
    compileSdkVersion androidId.compileSdkVersion
    buildToolsVersion androidId.buildToolsVersion
    defaultConfig {
        if(!isRelease){
            applicationId appId.order
        }
        minSdkVersion androidId.minSdkVersion
        targetSdkVersion androidId.targetSdkVersion
        versionCode androidId.versionCode
        versionName androidId.versionName
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation support.appcompat
    implementation support.constraint
}

那么personal模块中的build.gradle是一样的,现在来切换下isRelease这个变量,

isRelease为true也就是集成化

如果是集成开发的话就是app可以运行,其他order personal都是lib,

现在把isRelease改为false 即是组件化开发

从图中看到app order personal都是module 都是可以直接运行或者打包成apk的,

从上面的图中也发现app order personal确实是三个module,这就是组件化和集成化的区别了

还可以通过打包的方式也能验证是三个apk

这样测试也可以按照模块去测试,而不需要打整个包了

注意:如果是创建了一个library,记得把在别地module中把res目录和AndroidManifest.xml拷贝过来,还有就是在src下写个activity进去,记得组件化开发中开发规范 src res下的类名和资源命名

组件化开发的临时代码 集成化打包动态隔离

如果ceo说想看下整个app目前开发到什么程度了,要打包成apk 在它手机上跑起来看看,这个是Android程序小周又在写其他功能,这些功能又没写完,但是又不想打包的时候把我这些类带上,怎么办呢?这个时候就知道gradle都牛逼了.

上面是小周整在开发的三个类A,B,C都没写完,这个时候你老大跑过来说要集成打包,小周在纳闷怎么做呢?google下小周找到了答案,

 buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    //配置资源路径 方便测试环境,集成打包时不用到正式环境中
    sourceSets {
        main{
            if(!isRelease){
                println("我说组件化环境啊 大哥")
                manifest.srcFile 'src/main/debug/AndroidManifest.xml'
            }else{
                manifest.srcFile 'src/main/AndroidManifest.xml'
                //release时 debug目录下文件不用合并到主工程中
                java{
                    include '**/debug/**'
                }
            }
        }
    }

看看sourceSets下的配置记住它时和buildTypes是同级 ,personal模块修改的地方

如果isRelease为false就表示是组件化了,这个时候运行的是debug下的AndroidManifest.xml

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

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".debug.Debug_Personal_MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

</manifest>

就是Debug_Personal_MainActivity

这个就解决了组件化开发的临时代码 集成化打包动态隔离的问题

但是奇怪的是你personal module  这么做了,其他也要这么做,很麻烦,不然你集成跑不起来会报错

这是因为我有一个地方配置错了

 buildConfigField("Boolean","isRelease",String.valueOf(isRelease))

应该是配置在defaultConfig节点下,而且子组件都要配置,

Android:项目模块化/组件化的架构之路(一) 随着技术越来越成熟,这两年,组件化开发与插件化开发的热度一度高涨。对于组件化,有的人也喜欢称之为模块化开发,我也比较喜欢称之为模块化开发。使用模块化开发也已经有一段时间了,特此总结一下模块化开发的心得,防止以后忘记。 什么是模块化开发 对于模块化开发的概念,有的人可能还不是很了解,通俗的来讲就是: 将项目中的具体功能模块,如登录、个人中心等,拆分成一个一个单独的module, 将其中公用的功... 阅读详情

相关推荐

Android 组件化实战一: Gradle基础语法

前言 组件化的重要性无需多言,Android 组件化系列文章旨在彻底掌握组件化的原理,从0到1搭建一个自定义的组件化框架。本文主要介绍组件化过程中项目部署涉及的Gradle基本语法。 打印信息 // 在app/build.gradle文件中 println("hello world!") println"hello world!" println'hello world!' 效果一样:hello world! println 666 结果:666 变量的使用方式 在工程根目录新建文件gradle文件con

天亮了的博客 1329

Android组件化开发:手把手教你搭建组件化项目

Android组件化项目搭建流程,以及build.gradle配置抽离,实现统一配置管理。

qq_58451437的博客 4213

Android组件化架构设计与实践指南

组件化架构是解决大型Android项目复杂度的关键技术,通过分而治之的思想将单体应用拆分为独立模块。其核心原理包括模块化拆分、接口隔离和依赖管理,能显著提升编译速度(热词:编译优化)和团队协作效率。在工程实践中,采用合理的模块边界划分(如按业务功能)和路由框架(热词:ARouter)是实现解耦的关键。典型应用场景包括电商、社交等中大型App,特别是当项目出现编译缓慢、频繁代码冲突时。现代组件化方案正朝着动态化方向发展,支持模块热更新和按需加载,为应用性能优化提供新思路。

weixin_34146805的博客 409

Android组件化架构学习笔记——组件化编程之静态变量/资源/混淆/多渠道打包

一.组件化的静态变量: R.java的生成: 各个module会生成aar文件,并且被引用到Application module中,最终合并为apk文件。当各个次级module在Application module中被解压后,在编译时资源R.java会被重新解压到build/generated/source/r/debug(release)/包名/R.java中。 当每个组件中的aar文件汇总到App module中时,也就是编译的初期解析资源阶段,其每个module的R.java释放的同时,会检测到全部的

wangyongyao1989的博客 894

当兵心理测试软件,当兵心理测试题及答案

心理测试是一种比较先进的测试方法,它是指通过一系列手段,将人的某些心理特征数量化,来衡量个体心理因素水平和个体心理差异差异的一种科学测量方法。小编为你整理了当兵心理测试题及答案,希望对你有所参考帮助。征兵心理测试题(1代表是2代表否)1、我的胃口很好。12、我早上起来的时候,多半觉得睡眠充足,头脑清醒13、我喜欢看报纸上的犯罪新闻。14、有时我常感到困难重重,无法克服。25、我时常遇见一些所谓的专...

weixin_42128393的博客 1万+

概率论基础-严士健 第二版 习题与补充1.6答案

概率论基础-严士健 第二版 习题与补充1.6答案 1.不独立。 设有一均匀正八面体,其第1,2,3,4面染红色,第1,2,3,5面染白色,第1,6,7,8面染黑色,现在以A,B,C分别表示投一次正八面体出现红、白、黑的事件,则 P(A)=P(B)=P(C)=12.P(A) = P(B) = P(C) = \frac{1}{2}.P(A)=P(B)=P(C)=21​. P(ABC)=18=P(A)P...

weixin_42341993的博客 2515

Android 组件化(一)项目模式管理、模式切换

  在进行安装开发的时候我们经常会对项目进行不同业务逻辑处理分包,例如专门处理网络、数据库、业务逻辑代码的,如果我们不分包则所有东西写在一起,势必在开发过程中会浪费很多时间在寻找文件上,而分包的思想源于模块化,例如一些utils类,专门放到一个包下面,这样在使用的时候就能很快找到。节省开发时间,降低后期维护成本,那么组件化是什么?  在上面我们提到模块化,可以根据不同的功能进行进一步的封装,放到一个新建的模块下面,例如登录注册模块,个人中心模块之类的,但是模块化时就会涉及到一个分体,不同模块之间存在业务逻辑

晨曦 2974

Sciter教程_00_创建HelloWorld工程

本教程记录Sciter工程的创建和编译运行的过程。

qq_36707072的博客 2277

Android架构师-组件化-组件化项目部署2

组件化项目部署 学习目录 一:组件化项目的意义: 面试技巧:资历够了,如何在最短时间打动面试官?全是组件化开发 开发需求:不相互依赖,可以项目销户,任意组合,高度解耦 团队效率:分模块打包,测试,统一版本管理(每个模块都能进行版本管理) 我们看下大公司的: 组件化可以将所有模块进行高度隔离 ,比如说在订单模块中调用了我的内容/信息 可以任意将两个模块组装成一个新的app ...

u013815832的博客 300

手把手教你用UC3842搭建12V/5A反激电源(附PSIM仿真文件)

本文详细介绍了基于UC3842的12V/5A反激电源设计与PSIM仿真实践。从UC3842芯片选型、高频变压器计算到PSIM仿真模型搭建,提供完整的开关电源设计流程。特别包含PCB布局要点和实测优化建议,帮助工程师快速掌握反激电源开发技巧。

u6v7w8x的博客 1201

软件项目管理期末复习(看这一篇就够了)

软件项目管理考试复习 🔶🔶🔶🔶🔶加了🔶的是考点 第一章软件项目管理概述 1.1.1项目及其特征 项目定义:🔶 项目就是为了创造一个唯一的产品或提供一个唯一的服务而进行的临时性的努力; 是以一套独特而互相联系的任务为前提,有效地利用资源,在一段时间内满足一系列特定目标的多项相关工作的总称。 日常运作和项目的区别: 项目是一次性的,而日常运作是重复进行的。 项目是以目标为导向的,日常运作是通过效率和有效性体现的。 项目是通过项目经理及其团队工作完成的,日常运作是职能式的线性管理。 项目存在大量的变更管理,

qq_50886857的博客 3万+

Android Studio(AS)组件化,自定义组合控件(自定义View),部署到GitHub并引用。

在Android开学习中,我们经常用到很多组件(如:TextView、ConstraintLayout等),也有很多情况下我们会自定义组件。 有一种应用场景就是:自己做了一个组件或者工具类,但是只在自己当前的project中可以使用。有没有一种方法可以让别人或者其它project,也能非常简单的使用我这个project中的组件或者工具类呢?就像你使用Glide、Gson、OkHttp一样配置一下就能使用? 就是把当前project组件化后,放到GitHub上,再在别的project中配置两行gradle

Freer_von的博客 2236

EtherCAT报文-BRD(广播读)抓包分析

EtherCAT报文之BRD(广播读)报文Wireshark抓包分析。

kevin1499的博客 1212

安卓组件化架构设计

今天是1024程序猿节,首先祝各位猿猿们节日快乐,过节不加班!

江湖人陆仁甲 916

把 Custom Business Configurations 变成你的定制化维护台:Business Configuration Maintenance Object 设置全解

摘要:SAP BTP的Business Configuration(BCMO)为ABAP环境提供标准化的配置维护方案,通过RAP对象暴露为OData V4服务,自动生成Fiori elements维护界面,省去单独开发应用的成本。关键配置包括:Service Configuration定义业务名称和分组;List Report控制初始加载和视图变体;Object Page配置布局(Tabs/Page)和编辑权限;Table Settings选择表格类型(Grid/Responsive)和创建模式(Inlin

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 166

TensorRT - 使用自定义层扩展 TensorRT

TensorRT 支持通过自定义插件扩展功能。开发者可以基于 IPluginV3 接口实现插件类,并通过 IPluginCreatorV3One 创建器类注册到 TensorRT 插件注册表。插件实现需要包含核心、构建和运行时三种能力,并通过静态或动态方式注册。最后可使用 addPluginV3() 将插件实例添加到 TensorRT 网络中。这种方法允许在标准层不满足需求时,使用自定义层扩展模型功能。

1148

如何高效设计Android组件化项目结构:Atlas框架完整指南

Atlas作为强大的Android动态组件框架,为大型应用提供了灵活的组件化解决方案。本文将带你系统了解Atlas规范的项目结构设计,掌握从基础配置到高级优化的全流程,让你的应用架构更清晰、维护更简单。 ## 📌 组件化项目的核心优势 组件化开发已成为Android工程的主流架构模式,尤其对于团队协作和大型项目维护具有显著优势: - **模块化解耦**:将功能拆分为独立组件,降低代码耦合度

gitblog_00675的博客 731

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Android 组件化开发

Android 组件化开发

zr 1548

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

新手避坑指南:Android组件化开发详解

*在使用组件化开发前首先要明确项目整体框架,划分模块及业务(重点),好的开始才会有好的结果。**如图我们要完成以下功能:1.点击商城进入ShoppingModule2.点击登录进入LoginModule3.点击账单红色区域展示账单列表(其他Module中的Fragment)(shareModule为公共模块)根据业务需求创建如下:在App的gradle.properties文件下添加,用于控制module是否独立运行。#配置某个组件是否可以独立运行然后配置App build.gradle。

2201_75604341的博客 764

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Android组件化入门:一步步搭建组件化架构

接着修改app下的build.gradle里设置内容将原来的和三方库等替换成对应config.gradle中定义的值。android {release {最后还要在项目目录下的build.gradle中添加一行:然后点击Sync Now同步。最后在进行下一步前,新建一个MyApplication,在设置name属性。

2401_85112769的博客 591

组件化学习(1)思想及实现方式

1.组件化的介绍 我认为组件化,就是整个项目由app外壳,若干业务组件,以及公共基础组件构成。如图所示 我认为组件化最明显的特点就是:各个业务模块之间没有直接的横向依赖。 意义:不相互依赖,但是可以相互交互;高度解耦;自由拆卸 2.组件化的部署 关于如何将项目组件化,网上有大量的学习资源,我推荐一篇文章,写的超级详细:就是这一篇文章 3.组件之间的通信: 当然最常用的还是阿里开源的ARouter。这个就不多介绍了,但是除了这种方式,还有其他几个比较原始的方式 ①使用EventBus 缺点:EventBus

Android小白 2067

阿里的Atlas组件化框架

Atlas简介 Atlas是一个Android客户端容器框架,主要提供了组件化、动态性、解耦化的支持,支持在编码期、Apk运行期以及后续运维修复期的各种问题。Atlas目前支持的主要功能有: 在工程期,实现工程独立开发,调试功能,工程模块的独立; 在运行期间,实现完整的组件生命周期映射,类隔离等机制; 在运维期间,提供快速增量的更新修复功能,快速升级。 Atlas是工程期和运行期共同起作...

xiangzhihong8的专栏 1万+

[Android] Git组件化部署

大家好,我系苍王。以下是我这个系列的相关文章,有兴趣可以参考一下,可以给个喜欢或者关注我的文章。[Android]如何做一个崩溃率少于千分之三噶应用app--章节列表这一节的内容是Git的组件化部署建立工程后,如果你是个单人开发项目的大牛,我佩服你,可以跳过这里,然后愉快写你的代码。但是如果你需要将组件化项目部署为多人开发,并需要使用到Git部署,那么这编文章希望能成为你的刚需。这里介绍的是完全可...

weixin_33795806的博客 361

组件化以及apt

1.什么是组件化,为什么需要组件化 组件化意义逻辑图: 组件化后,所有的module都平起平坐,有人说app的module在组件化中是个壳子,这也是为什么成为app壳工程的原因 2.集成环境/组件环境自动部署配置 Gradle中的Groovy其实属于糖果语法,就是弱类型语法,我们来测试下 2.3:我们在项目的开发过程中,一定要去优化我们的gradle文件,例如:把公用的内容抽取 2.4:项目的开发过程中,关于一切与“正式环境”,“测试环境” 相关的应该用Gradle进...

czZ__czZ的博客 252

Android组件化、插件化讲解

Android组件化、插件化讲解:App的部分功能模块在打包时并不以传统⽅式打包进apk⽂件中,⽽是以另⼀种形式⼆次封装进apk内部,或者放在⽹络上适时下载,在需要的时候动态对这些功能模块进⾏加载,称之为插件化。这些单独⼆次封装的功能模块apk,就称作**插件**,初始安装的apk称作**宿主**。插件化是组件化的更进⼀步推进。...

LiuHai2014csd的博客 449

终极Atlas框架学习指南:从零基础到精通Android动态组件化开发

Atlas是一个功能强大的Android动态组件化框架,它允许开发者将应用程序拆分为多个可独立开发、测试和部署的组件,从而显著提升大型Android项目的开发效率和维护性。本指南将带你从零基础开始,逐步掌握Atlas框架的核心概念、使用方法和最佳实践,让你能够轻松构建高效、灵活的动态组件化Android应用。 ## 为什么选择Atlas框架? 在移动应用开发领域,随着应用功能的不断丰富和团队规

gitblog_00627的博客 697
上一篇: android 组件化gradle语法
下一篇: Android组件化APT使用与介绍
zhoushenxian
博客等级 码龄12年 453粉丝 549原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值