关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » 安卓开发 »Gradle for Android 第五篇( 多模块构建 )

    Gradle for Android 第五篇( 多模块构建 )

    2016-01-06 00:00:00 出处:希尔瓦娜斯女神
    分享

    Android studio不仅允许你为你的app和依赖库创建模块,同时也可为Android wear,Android TV,Google App Engine等创建模块,而这些单独的模块又可以在一个单独的项目中使用。举个栗子,在你的app开发后期阶段,你可能需要用到Google Clound或者Android Wear。这种情况下,你可以在你的工程下拥有三个模块:分别是app,google cloud,Android Wear整合。了解在一个工程下的多模块构建将会加速你的开发周期。

    Gradle for Android 第一篇( 从 Gradle 和 AS 开始 )

    Gradle for Android 第二篇( Build.gradle入门 )

    Gradle for Android 第三篇( 依赖管理 )

    Gradle for Android 第四篇( 构建变体 )

    在这一章,我们将学习到多模块的构建,并且展示一些实际且有用的栗子:

    多模块构建的结构 为你的项目添加模块 建议

    多模块构建的结构

    通常情况下,一个工程包含多模块,这些模块会在一个父目录文件夹下。为了告诉gradle,该项目的结构以及哪一个子文件夹包含模块,你需要提供一个settings.gradle文件。每个模块可以提供其独立的build.gradle文件。我们已经学习了关于setting.gradle和build.gradle如何正常工作,现在我们只需要学习如何使用它们。

    这是多模块项目的结构图:

     project
       ├─── setting.gradle
       ├─── build.gradle
       ├─── app
       │    └─── build.gradle
       └─── library
            └─── build.gradle

    这是最简单最直接的方式来创建你的多模块项目了。setting.gradle文件申明了该项目下的所有模块,它应该是这样:

    include ':app', ':library'

    这保证了app和library模块都会包含在构建配置中。你需要做的仅仅只是为你的模块添加子文件夹。

    为了在你的app模块中添加library模块做为其依赖包,你需要在app的build.gradle文件中添加以下内容:

    dependencies {
          compile project(':library') 
    }

    为了给app添加一个模块作为依赖,你需要使用project()方法,该方法的参数为模块路径。

    假如在你的模块中还包含了子模块,gradle可以满足你得要求。举个栗子,你可以把你的目录结构定义为这样:

    project
    ├─── setting.gradle
    ├─── build.grade
    ├─── app
    │    └─── build.gradle
    └─── libraries
         ├─── library1
         │    └─── build.gradle
         └─── library2
              └─── build.gradle

    该app模块依然位于根目录,但是现在项目有2个不同的依赖包。这些依赖模块不位于项目的根目录,而是在特定的依赖文件夹内。根据这一结构,你需要在settings.xml中这么定义:

    include ':app', ':libraries:library1', ':libraries:library2'

    你会注意到在子目录下申明模块也非常的容易。所有的路径都是围绕着根目录,即当你添加一个位于子文件夹下的模块作为另外一个模块的依赖包得实惠,你应该将路径定为根目录。这意味着假如在上例中app模块想要依赖library1,build.gradle文件需要这么申明:

    dependencies {
           compile project(':libraries:library1')
    }

    假如你在子目录下申明了依赖,所有的路径都应该与根目录相关。这是因为gradle是根据你的项目的根目录来定义你的依赖包的。

    构建生命周期

    理解了构建过程让你理解多模块的构建变得容易。我们很早前谈过关于构建的生命周期。所以现在你应该知道其基本的过程,但是一些很重要的细节可能你并不是很清楚。

    在第一步骤中,即初始化阶段,gradle会寻找到settings.grade文件。假如该文件不存在,那么gradle就会假定你只有一个单独的构建模块。假如你有多个模块,settings.gradle文件定义了这些模块的位置。假如这些子目录包含了其自己的build.gradle文件,gradle将会运行它们,并且将他们合并到构建任务中。这就解释了为什么你需要申明在一个模块中申明的依赖是相对于根目录。

    一旦你理解了构建任务是如何将所有的模块聚合在一起的时候,那关于几种不同的构建多模块策略就会变得简单易懂。你可以配置所有的模块在根目录下的build.gradle。这让你能够简单的浏览到整个项目的配置,但是这将会变得一团乱麻,特别是当你的模块需要不同的插件的时候。另外一种方式是将每个模块的配置分隔开,这一策略保证了每个模块之间的互不干扰。这也让你跟踪构建的改变变得容易,因为你不需要指出哪个改变导致了哪个模块出现错误等。

    gradle的最大策略是混合。你可以在根目录下定义一个build文件去定义所有模块相同的熟悉,然后在每个模块中的build文件去配置只属于该模块的参数。Android studio遵循了该原则,其创建了一个build.gradle文件在根目录,然后再每个模块文件夹下创建了另外一个build文件。

    模块tasks

    当你在你的项目中有多个模块的时候,你需要在运行任务之前想一想。当你在命令行界面运行一个task的时候,gradle将会找到哪个模块将会执行这个任务。举个栗子,当你有个mobile app模块和一个Android Wear模块,你运行了gradlew assembleDebug任务。当你改变其中一个模块的文件夹位置,gradle将只会运行哪个特殊的模块,纵使你使用了gradle wrapper在根目录。举个栗子,当你运行../gradlew assembleDebug在Android wear模块的目录下,其只会构建Android wear模块。

    切换不同的文件夹去执行不同的任务会让人很不爽,幸运的是,我们有其他的办法。你可以准备一个特别的task来执行你的模块。举个栗子,为了只构建Android Wear模块,你仅仅只需在根目录下运行 gradlew :wear:assembleDebug。

    为你的项目添加模块

    在Android studio中添加新模块是很容易的一件事,该视图同时也会为你创建build文件。如下图所示:

    Gradle for Android 第五篇( 多模块构建 )

    添加Java依赖库

    当你新建了一个Java模块,build.grade文件会是这样:

    apply plugin: 'java'
       dependencies {
           compile fileTree(dir: 'libs', include: ['*.jar'])
    }

    Java模块使用了Java插件,这意味着很多Android特性在这儿不能使用,因为你不需要。

    build文件也有基本的库管理,你可以添加jar文件在libs文件夹下。你可以添加更多的依赖库,根据第三章的内容。

    给你的app模块添加Java模块,这很简单,不是吗?

    dependencies {
           compile project(':javalib')
    }

    这告诉了gradle去引入一个叫做javelin的模块吧,假如你为你的app模块添加了这个依赖,那么javalib模块将会总是在你的app模块构建之前构建。

    添加Android依赖库

    同样的,我们利用Android studio的图形化界面创建Android模块,然后其构建文件如下:

    apply plugin: 'com.android.library'

    记住:Android依赖库不仅仅包含了Java代码,同样也会包含Android资源,像manifest和strings,layout文件,在你引入该模块后,你可以使用该模块的所有类和资源文件。

    建议

    我有点建议关于多模块项目,并且有些东西你们应该了解清楚,知道这些将会节约你们的时间。

    在Android studio中运行模块tasks

    当你有多个模块,Android studio会分析出来,并且展示在cradle中:

    Gradle for Android 第五篇( 多模块构建 )

    grade图形化让你运行模块间的任务变得简单,但是其没有为所有模块同时运行一个任务,所以假如你希望这么做,最快的方式是使用命令行。

    加速你的多模块构建

    当你构建你的多模块项目,gradle会依次执行所有的模块。当你的电脑内存够大的时候,让你的构建过程多线程将会更快。该特性在gradle早已存在,但是其默认关闭。

    所以假如你希望启动parallel构建,你需要在grade.properties文件中配置如下属性:

    org.gradle.parallel=true

    gradle会选择尽可能多的线程去执行你的构建过程,每个线程都会执行一个模块。parallel执行的是独立的模块,即你的模块是独立的。

    模块耦合

    即你可以在一个模块中引用其他模块的属性,但是我不建议你们这么做,我们完全可以在根目录下的build文件中定义这些属性。

    总结

    我们学习了如何在一个项目中构建多个模块,以及添加新模块是如何影响到构建任务的执行。

    我们学习了相关事例,并且给出了一些建议。

    在下一章节,我们将会学习到测试,如何利用gradle让你的测试更加简单。我们将会学习到如何在jvm中运行你的单元测试,以及如何运行测试在你的手机上。

    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    抖音安全与信任开放日:揭秘推荐算法,告别单一标签依赖

    ultraedit编辑器打开文件时,总是提示是否转换为DOS格式,如何关闭?

    Cornell大神Kleinberg的经典教材《算法设计》是最好入门的算法教材

    从 Microsoft 下载中心安装 Windows 7 SP1 和 Windows Server 2008 R2 SP1 之前要执行的步骤

    Llama 2基于UCloud UK8S的创新应用

    火山引擎DataTester:如何使用A/B测试优化全域营销效果

    腾讯云、移动云继阿里云降价后宣布大幅度降价

    字节跳动数据平台论文被ICDE2023国际顶会收录,将通过火山引擎开放相关成果

    这个话题被围观超10000次,火山引擎VeDI如此解答

    误删库怎么办?火山引擎DataLeap“3招”守护数据安全

    IT头条

    平替CUDA!摩尔线程发布MUSA 4性能分析工具

    00:43

    三起案件揭开侵犯个人信息犯罪的黑灰产业链

    13:59

    百度三年开放2.1万实习岗,全力培育AI领域未来领袖

    00:36

    工信部:一季度,电信业务总量同比增长7.7%,业务收入累计完成4469亿元

    23:42

    Gartner:2024年全球半导体营收6559亿美元,AI助力英伟达首登榜首

    18:04

    技术热点

    iOS 8 中如何集成 Touch ID 功能

    windows7系统中鼠标滑轮键(中键)的快捷应用

    MySQL数据库的23个特别注意的安全事项

    Kruskal 最小生成树算法

    Ubuntu 14.10上安装新的字体图文教程

    Ubuntu14更新后无法进入系统卡在光标界面解怎么办?

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。