Quantcast
Channel: CSDN博客移动开发推荐文章
Viewing all articles
Browse latest Browse all 5930

Gradle for Android系列之四 依赖包管理

$
0
0

  在Gradle for Android系列之二 build.gradle文件 中已经初步介绍过依赖包。为什么我们这里还要在专门介绍呢,因为我们在项目中往往需要用到各种依赖方式,对我们来说很重要。掌握Gradle依赖包管理,可以让我们事半功倍。
  接下来我们就直接开始介绍了
  
  仓库
  仓库是平时引用第三方库时使用最多的方式,非常的方便,往往都是通过一句话compile来引用。仓库又可以分为远程仓库和本地仓库。
  远程仓库又包括中央仓库JCenter,私服,Jboss仓库和Java.net仓库。我们开发Android时用的最多的应该就是JCenter了。我们个人也是可以把自己的库发布到JCenter,这样别人也可以一句话引用你的库了,是不是很爽?具体过程可以参考我的这篇博客手把手教你在JCenter发布开源库
  那么远程仓库帮我们做了什么呢,为什么需要它?这是因为手动管理依赖是一个非常麻烦的事情。如果是手动管理依赖,那么首先你必须先定位到该依赖文件位置,然后下载jar文件,复制该文件到你的项目,然后引用它们。通常这些jar文件没有具体的版本号,所以还必须去搞清楚它们的版本号,这样当需要更新的时候,我们才会知道需要替换成哪个版本。同时还必须将该依赖包放在svn或者git上,这样其他同事才可以不用手动去下载这些依赖jar。这简直是噩梦。使用远程仓库可以解决这些问题,一个仓库可以被视为很多依赖文件的集合。我们可以通过Gradle轻松的获取到这些依赖。
  那么Gradle怎么获取这些依赖呢,首先Gradle默认不会为我们的项目添加任何仓库。所以我们需要把它们添加到repositories方法体内:
  

buildscript {
    repositories {
        jcenter()
    }
    ...
}

  就是这么的简单,配置好了之后,依赖包会在执行build构建的时候从这些远程仓库下载,Gradle会为我们在本地缓存,所以一个版本的依赖包只需要下载一次。发布到JCenter仓库的依赖一般需要定义三个元素:group,name和version。group意味着创建该library的组织名,通常这会是包名,name是该依赖的唯一标示。version是该依赖的版本号,而我们在引用时也是通过这三个元素来定位依赖包的:

compile 'group:name:version'

  就像这样:

compile 'com.android.support:appcompat-v7:25.1.0'

  group:com.android.support
  name:appcompat-v7
  version:25.1.0
  以上就是Android中经常使用的引用JCenter仓库中依赖的方法。当然远程仓库远远不仅仅指这些。如果我们公司或者自己不想把依赖放在JCenter而是我们制定的服务器中,应该怎么引用呢?
  很简单,只需要在maven方法中加入url地址就好::
  

repositories {
       maven {
           url "http://xxx.xxx.xxx"
        } 
   }

  本地maven库包含我们曾使用过的所有依赖包,当然我们也可以添加自己的依赖。默认情况下,可以在的home文件下找到.m2的文件夹。除了这些仓库外,还可以使用其他的公有的甚至是私有仓库。

  本地依赖

  如果我们已经在网上下载好了jar,aar,so等依赖,不再需要联网下载了,我们可以通过本地依赖方式,在项目中引用。在 Gradle for Android系列之二 build.gradle文件 中我们已经介绍过jar,file,project依赖引入方式:
  1.compile fileTree(dir, ‘libs’ ,include : ‘*.jar’) 依赖本地libs目录下的所有jar文件
  2.compile file(‘libs/xxx.jar’) 依赖当个libs目录(可以自己指定路径,不一定要是libs)下的单个jar文件。
  3. compile project(:xx:xx) 依赖某个工程。
  那么aar文件应该怎么引用呢?其实也不难,将你要使用的aar文件放到指定的目录,我们可以命名为aars,接着在repositories中声明:
  

repositories {
    flatDir {
        dirs 'aars' 
    }
}

  这样就可以把该aars文件夹下的所有aar文件作为依赖,同时,我们还可以引用名字叫做libraryname的aar文件:
  

dependencies {
       compile(name:'libraryname', ext:'aar')
}

  so文件的引入,稍微要复杂一点,一般情况下,我们需要先将so包放在app/src/main/JniLibs目录下,然后在需要引入so的模块对应的build.gradle文件的android模块中加入如下代码:
  

 sourceSets {
        main {
            jniLibs.srcDirs = ['src/main/JniLibs']
        }
    }

  这样就可以通过jni调用到so中的内容。

  使用依赖模块
  
  我们有两种方式去引用一个依赖工程。一个就是通过在工程中直接引用,另外一个就是创建一个aar文件,通过aar的方式引用。如果是通过直接引用的话,并且还想把其当着一个module就像这样:
  这里写图片描述
  首先需要在作为依赖的module的build.gradle文件中将插件引用改为(如图中的红框所示):

 apply plugin: 'com.android.library'

  接着在root目录下的setting.gradle文件中添加wheelview:

include ':app', ':wheelview'

  然后在app的build.gradle文件的依赖中添加
  

dependencies {
    compile project(':wheelview')
}

  这样就可以引用成功了。
  在一些情形中,我们可能想使用最新的依赖包,我们可以使用动态版本来解决这个问题。下面是几种不同的动态控制版本方式:

dependencies {
       compile 'com.android.support:support-v4:23.0.+'
       compile 'com.android.support:appcompat-v7:23.2+'
       compile 'com.android.support:recyclerview-v7:+'
}

  第一种方式,使用最新的生产版本。
  第二种方式,使用最新的minor版本,并且其最小的版本号是2.
  第三种方式,使用最新的Library。
  在使用动态版本的时候要注意,有可能使用的版本是最新版,但不一定是稳定版,也就是可能是α或者β版。因为不确定版本,那么在不同的主机上可能使用的版本不同步,这一风险还是需要考虑的。所以,如果在build.gradle中使用了动态版本,Android Studio将会警告,避免使用动态版本:
  这里写图片描述
  除了在gradle文件中添加依赖,我们也可以借助Android Studio中可视化操作:
  这里写图片描述
  在Project Structure中可以设置个Modules的依赖。很方便,设置完成之后,Android Studio会自动的在你的gradle文件中添加相应的内容。

  依赖包管理差不多就是这些内容了。下一篇准备分析一下多渠道打包。

作者:chenkai19920410 发表于2017/1/7 17:09:11 原文链接
阅读:1 评论:0 查看评论

Viewing all articles
Browse latest Browse all 5930

Trending Articles