美文网首页
Android模块化编译打包配置

Android模块化编译打包配置

作者: 在寻找雪见的景天 | 来源:发表于2019-06-19 16:19 被阅读0次

最近,把我们的灵机项目拆分了一下,增加模块编译配置,然后,编译和打包速度快了挺多的,记录一下。

主要有两个操作:

一、组件化

之前很多组件都丢在了一个叫lib_plug的module里面,一个大集合,代码和资源文件啥的,都在里面。现在把组件都一个一个拆出来了,拆为 lib_xxxx 这样单独的一个module。module可以单独运行,也可当成是lib模块依赖。组件间通信,都依赖基础的base库,等等这些就不说了,因为组件化,很多大佬们都写了博客,大同小异,差不多。

二、组件上传到仓库

拆完组件,发现,其实有很多组件是万年不更新了的,这样,每次编译都会过一遍,肯定会影响一点速度。那我们同样用一个配置解决,需要修改组件时,用本地module,修改完了传maven,用aar依赖。那这样,速度会快一些。

主要就是上面两个操作,那剩下的就是配置了,怎样通过一个变量来控制组件是否单独运行,是否用maven版本?

1、先在项目的根目录,新建一个 version.gradle 的文件,里面配置组件的信息。类似下面:

class ModuleInfo {
    /**
     * 是否单独运行
     */
    boolean alone
    /**
     * 是否用maven版本
     */
    boolean maven
    /**
     * 版本
     */
    String version

    ModuleInfo() {
    }

    ModuleInfo(boolean alone, boolean maven, String version) {
        this.alone = alone
        this.maven = maven
        this.version = version
    }

    @Override
    String toString() {
        return "ModuleInfo{" +
                "alone=" + alone +
                ", maven=" + maven +
                ", version='" + version + '\'' +
                '}'
    }
}

ext {
    // 组名,防止上传maven的时候覆盖掉其他,可以用包名来代替
    moduleGroup = "com.lingjimiaosuan"

    // 配置每个组件的状态,是否单独运行,是否用maven版本,版本号
    modules = [
            "lib_aaa"          : new ModuleInfo(false, true, "1.0.0"),
            "lib_bbb"          : new ModuleInfo(false, true, "1.0.0"),
            "lib_ccc"          : new ModuleInfo(false, true, "1.0.0"),
            "lib_ddd"          : new ModuleInfo(false, true, "1.0.0"),
            "lib_eee"          : new ModuleInfo(false, true, "1.0.0"),
    ]

    // 统一,每个组件module都是这个版本
    android = [
            compileSdkVersion: 28,
            minSdkVersion    : 18,
            targetSdkVersion : 28,
    ]

}

2、修改 settings.gradle 的配置文件,读取 version.gradle 里面的配置,看是否要引入module。如下:

// 引入配置文件
apply from: 'version.gradle'
//必用模块,就不需要判断了
include ':app_cn'

if (!ext.modules.get("lib_aaa").maven) {
    include ':lib_aaa'
}

if (!ext.modules.get("lib_bbb").maven) {
    include ':lib_bbb'
}

if (!ext.modules.get("lib_ccc").maven) {
    include ':lib_ccc'
}

if (!ext.modules.get("lib_ddd").maven) {
    include ':lib_ddd'
}

3、新建上传maven配置,upload.gradle ,用来上传组件到maven。

//是否提交到仓库
def upload = true
def release = false
def name = project.name
def info = rootProject.ext.modules.get(name)
def vername = info.version
if (upload) {
    apply plugin: 'maven'
    print('upload library logn to maven...')
    group = rootProject.ext.moduleGroup
    version = release ? vername : vername + '-SNAPSHOT'

    task androidSourcesJar(type: Jar) {
        classifier = 'sources'
        from android.sourceSets.main.java.sourceFiles
    }
    artifacts {
        archives androidSourcesJar
    }

    uploadArchives {
        repositories.mavenDeployer {
            repository(url: MAVEN_R_URL) {
                authentication(userName: MAVEN_D_USERNAME, password: MAVEN_D_PASSWORD)
            }
            snapshotRepository(url: MAVEN_S_URL) {
                authentication(userName: MAVEN_D_USERNAME, password: MAVEN_D_PASSWORD)
            }
            pom.artifactId = name
        }
    }
}

4、在组件里面引入 upload.gradle,在组件的build加上:

apply from: '../upload.gradle'

当我们对这个组件修改完毕时,就把这个组件上传到maven



5、在APP的build里面配置引用组件

    def lib_aaa = "lib_aaa"
    def aaaInfo = rootProject.ext.modules.get(lib_aaa)
    if (aaaInfo.maven) {
        api rootProject.ext.moduleGroup + ":" + lib_aaa + ":" + aaaInfo.version + "-SNAPSHOT"
    } else {
        api project(':lib_aaa')
    }

读取version.gradle的配置,来决定是用maven版本,还是用本地module。

大概这样就ok啦。比如我们要修改aaa模块,就去version.gradle里面修改参数为

 "lib_aaa"          : new ModuleInfo(false, false, "1.0.0")

然后,就可以对aaa模块,进行修改,修改完了,传完maven,再改回

 "lib_aaa"          : new ModuleInfo(false, true, "1.0.0")

这样重新编译后,就ok。速度应该是快一点的,可以试下。

相关文章

  • Android模块化编译打包配置

    最近,把我们的灵机项目拆分了一下,增加模块编译配置,然后,编译和打包速度快了挺多的,记录一下。 主要有两个操作: ...

  • Android应用编译配置详解

    Android应用配置编译详解 编译打包过程 1.编译器将源码编译为DEX文件(Dalvik虚拟机可执行文件) 2...

  • Android Apk包瘦身

    首先我们来了解Android编译打包流程 1.Android编译打包流程及APK构成 1).通过Java编译器对于...

  • Android Apk包瘦身

    目录 1、Android 编译打包流程2、Apk包瘦身 1、Android 编译打包流程及APK构成 1.1、An...

  • Xcode编译过程

    Xcode编译过程 打包过程 源码编译 静态库链接 资源编译、优化、导入 配置文件生成 签名打包 Xcode 遇到...

  • Android的多渠道打包|SquirrelNote

    系列文章:Android的反编译和代码混淆Android的打包签名[Android的多渠道打包 前言 本篇包括以下...

  • Android的反编译和代码混淆

    系列文章:Android的反编译和代码混淆Android的打包签名Android的多渠道打包 前言 包括以下内容 ...

  • Android的打包签名

    系列文章:Android的反编译和代码混淆Android的打包签名Android的多渠道打包 前言 从以下几个方面...

  • Android 渠道包 动态生成 apk 名称

    Android 渠道包 动态生成 apk 名称 低版本打包配置 高版本打包配置

  • 初识 android 反/回编译

    Android 反编译 Android 反编译环境准备 配置JAVA JDK 环境变量 安装android kil...

网友评论

      本文标题:Android模块化编译打包配置

      本文链接:https://www.haomeiwen.com/subject/ldsqqctx.html