前置知识点:AndroidStudio中项目组织方式,最高层为Project(虽然结构层次和Eclipse里的workplace有些相似,但还是有很大区别的),下面可以包括很多module,每个module可完全独立作为一个项目,运行处一个APK。(这在结构层次上又相当于eclipse里的project)

经过实践总结,以gradle为构建工具的AndroidStudio在依赖方面可以分为

1、库依赖(library)

2、模块依赖(module)

简单区分,模块就是源代码模块,库依赖就打包好的jar、aar文件

以上两种每种又可以分为内部和外部。

一种一种来,先说库依赖

A、内部库

这个应该是从eclipse那边延续过来的,算是对eclipse的兼容,指位于/Project/module/libs/下的jar、aar文件

使用方法:这种依赖比较简单,直接放在指定目录就好了,在模块配置/Project/module/build.gradle中的dependencies标签下加入

compile fileTree(include: ['*.jar'], dir: 'libs')
compile(name: 'FileSelector-release', ext: 'aar')

androidstudio会自动加载指定目录下的依赖库

B、外部库

这个是gradle的标准依赖方式,导入、管理、升级等都非常便捷

使用方法:在项目配置文件(顶级gradle文件/Project/build.gradle)中声明中心仓库,自动生成的项目中,AS会默认配置好,默认中心仓库为jcenter,也可以使用maven。

在module配置文件里(/Project/module/build.gradle)的dependencies标签下有类似

compile 'com.google.code.gson:gson:2.4'

AS会从中心仓库下载相应版本的库文件,实际文件一般在/用户文件夹/.gradle\caches\modules-2\files-2.1

并在工程结构的ExternalLibraries中列出,这也就是为什么叫这种为“外部库”

这里的引入配置代码需要库的提供方提供,一般gitbug的项目如果同时支持gradle构建方式引用,会在readme里面说明,如果没在github上,可以去中央仓库去搜,中央仓库的位置是可以从配置文件里追溯源码追到的。jcenter:

https://jcenter.bintray.com/

C、内部模块

前面说了,一个Project下面可以包括很多Module,这些module可以是相互完全独立的,也可以是被依赖的。

使用方法:

如果希望一个module被一个或者多个其他的Module依赖,那么,需要在该module的build.gradle文件把当前模块声明为Library

即不能用

apply plugin: 'com.android.application'
要用
apply plugin: 'com.android.library'
好吧,这个又类似于eclipse里面设置某个eclipse工程“Is Library”
在顶层工程目录下的settings.gradle中include模块名
include ':app',':module-name'
D、外部模块(这种方式,是我自己YY出来,经过验证可行的)
前面说,AndroidStudio组织结构顶层是一个Project,如果这么说,理解起来,其实在同一个项目里,不应该有与project同级的模块存在,但实际并不绝对
例如工程A、B分别各自包含两个module,其中一个模块另一个是library模块,也即上面提到的C内部模块。此时,A工程是可以依赖B工程中的library模块的。
使用方法:和内部模块类似,在settings.gradle中include 后面加上模块名,这里的模块名需要自己定义
include ':app', ':module-name'
include ':external-module-name'
project(':external-module-name').projectDir = new File(rootDir, '../../Example/sdkexample')

意思比较明显,声明一个模块,指定一下这个模块的地址。把这个include到工程中。比较讲究的是那个地址的写法,要切记不能写错了,写错了找不到

在AS的工程结构中,这种外部模块的依赖,是不能组织在工程内部的,实际上会合工程顶层,以及ExternalLibraries处于同一级,如图,那个sdkexample是另一个工程中的内部模块
最后说一下,为什么会有这篇文章,我也不想搞这么复杂啊,又是这样依赖那样依赖的,其实都是项目需要被逼的了,要是所有依赖的代码都可以用第二种方式使用外部依赖
那世界将会更加美好呢。
尤其是D这种外部模块依赖,很奇葩的,大家要是仔细理解D的这种方式其实应该不难想到,这是为了解决联合开发的问题而被逼出来的想法。
适用场景如下,双方协作开发,一方依赖另一方的代码,被依赖方代码也正在开发过程中,随时会变化,关键双方不是基于同一个git仓库开发,各自有各自的。自然本地目录也不是同一个了
这样形式的依赖,可以使双方各自独立开发,依赖方在本地clone两个仓库,一个依赖另一个,各自还可以独立开发,依赖方只需要在必要的时候pull代码就OK了。

AndroidStudio的几种依赖方式相关推荐

  1. 【IOC 控制反转】IOC 简介 ( 依赖注入的两种实现方式 | 编译期注入 | 运行期注入 )

    文章目录 一.IOC 简介 二.依赖注入的两种实现方式 一.IOC 简介 IOC 是 Inversion Of Control 的缩写 , 控制反转 ; 其最主要的作用是 降低代码的耦合度 , 最常见 ...

  2. spring四种依赖注入方式

    平常的java开发中,程序员在某个类中需要依赖其它类的方法,通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理. spring提出了依赖注入的思想,即依赖不由程序 ...

  3. Spring中IoC两种接口和两种依赖注入方式的比较

    spring是一个开源框架,是为了解决企业应用程序开发的复杂性而创建的,为J2EE应用程序开发提供集成的框架.简单来说,spring是一个轻量级的控制反转IOC和面向切面AOP的容器框架.spring ...

  4. android项目中有哪几种依赖关系,Android Studio项目中三种依赖的添加方式

    通常一个AS项目中的依赖关系有三种,一是本地依赖(主要是对本地的jar包),二是模块依赖,三是远程依赖:添加这些依赖的目的在于上我们想要在项目的某一个模块中使用其中的功能,比如okttp这个网络框架库 ...

  5. Spring 依赖注入的理解及三种注入方式

    Spring 依赖注入概念和三种注入方式(理解及应用) 什么是注入 要了解Spring的三种注入方式首先前提是得先了解一下什么是注入,相信很多人对这个概念都是模糊不清的,网上的解释是这样的: 依赖注入 ...

  6. 【闲谈】论Spring的三种依赖注入方式

    知识点科普: IOC和DI:IOC是控制反转,DI是依赖注入.DI是行为,而IOC是实现这一行为的容器. 循环依赖:指类与类之间互相依赖的情况,比如有类A和类B,类A中依赖类B,类B中依赖类A,由此导 ...

  7. Spring依赖注入的三种实现方式

    依赖注入(Dependency Injection,DI)和控制反转含义相同,它们是从两个角度描述的同一个概念. 当某个JAVA实例需要另一个 Java 实例时,传统的方法是由调用者创建被调用者的实例 ...

  8. android项目两种构建方式的整合(Eclipse/idea和Android Studio)

    android的两种构建方式 目前android主要有两种构建方式,一种基于ant(传统的),另一种是13年Google/IO上新推出基于Gralde的构建(Android Studio).从sdk的 ...

  9. 分布式锁的三种实现方式_基于 redis 的分布式锁实现

    云龙 资深运维开发工程师,负责游戏系统配置管理平台的设计和开发,目前专注于新 CMDB 系统的开发,平时也关注运维自动化,devops,python 开发等技术. 背景 CMDB 系统里面的机器数据会 ...

最新文章

  1. 零基础如何选择适合的Java培训课程
  2. koa-grace:一个基于koa的node多应用MVC框架
  3. Discuz NT 架构剖析之Config机制
  4. 如何使用UI技术提升租房类APP的看房体验?
  5. 二、SpringMVC 注解式开发学习笔记
  6. MySQL 在高并发下的 订单撮合 系统使用 共享锁 与 排他锁 保证数据一致性
  7. CSS3 背景起始位置 background-origin属性
  8. lucene: 索引建立完后无法查看索引文件中的数据
  9. python随机数据库_Python实现生成随机数据插入mysql数据库的方法
  10. python requests text content_对python requests的content和text方法的区别详解
  11. Apache SSI 远程命令执行漏洞
  12. 带左右箭头的图片轮播
  13. 国内十大优质黄金期货交易平台排名榜单(最新版一览)
  14. SAP ABAP——内表(三)【工作区与表头】
  15. android plc,基于Android的智能PLC操控软件设计与实现
  16. 华为 畅享5 android,华为畅享5手机评测:青春就要这样长待!
  17. EF和Dapper之争的关键
  18. linux 查看mmc分区_查看MTD,EMMC,MMC三种设备的分区
  19. POJ 3666 dp
  20. 用python语言实现人工智能猴子摘香蕉的问题_人工智能实验报告大全:猴子摘香蕉问题的VC编程实现等八次 -...

热门文章

  1. Python入门学习之函数
  2. PCL安装与环境变量配置(Win10)
  3. python中噪音是什么意思_Python数据噪音
  4. jemter接口并发数怎么算_JMeter学习使用(1) - 接口GET请求并发测试
  5. Cisco路由器命令基础篇
  6. python学习--DAY2
  7. Linux VI编辑器
  8. 今天来说一下我的SAMC
  9. JavaWeb——多个Filter代码的执行顺序
  10. 【大数据】SparkSql 连接查询中的谓词下推处理 (一)