在实际的android项目开发过程中,我们一般都会用一些现有的第三方库来实现我们的需求,避免重复造轮子。普遍使用到的,例如:网络请求库、图片处理库、界面UI库(自定义View、动画效果等)、各种第三方SDK库(聊天、推送等)。笔者早期接触android使用eclipse开发时,当时对这些库的管理方式为:如果能jar包,则将jar包拷贝到libs目录下;还有一些源码库,则以library的方式倒入到工程中,调试、 修改、编译、发布。早期的这种库管理方式存在的一个严重问题是:无法自动跟踪版本、不能自动同步library的更新。现在一般都使用android studio,结合git,maven来开发android项目。本文通过一些实际场景,对as + git + maven的工作方式、流程进行简单介绍,相信看完后,读者会对android项目中包管理机制有一个总体上清晰的认识。

1 发现githuab上有个好用的库,该如何使用?

直接按照文档提示,在build.gradle中添加依赖即可。背后到底发生了什么,使我们只需要加一句话,就能使用库?

通过Android studio创建默认项目后,在项目根目录下的build.gradle中有一段代码:

allprojects {
repositories {
jcenter()
}
}

这段代码,相当于告诉gradle,如果碰到依赖的库需要下载,去jcenter找。jcenter又是什么,他相当于一个所有公开的库的集合(仓库)。jcenter中的库,以maven包的方式来管理。其实背后的事情是:github中库的作者自己生成了一份代码对应的maven包,并且将maven包上传到了jcenter仓库中,所以gradle最后才能从jcenter中下载到maven包。本文不对jcenter进行详细介绍,只需要知道他是一个存放library(库)的repository(仓库)即可。

2 项目进行一段时候后,代码会变大庞大臃肿,这时候,可以将一些相对独立、复用性高的模块独立出来封装成一个库,简化项目逻辑代码。假设我们将一个模块独立了出来做成了library。这个library不光我自己使用,其它的开发者也要使用,怎么做呢,肯定不能把代码拷贝一份。这时候,我们可以用gradle的maven插件,将library打包成一个maven包。其它开发者可以只拷贝maven包,而不用拷贝源代码。Android studio项目,如何使用本地的maven包?只要能告诉gradle遇到依赖库的时候,去某个路径下找即可。方法是,在module的build.gradle中配置:

repositories {
maven { url "file:///path/to/maven" }
}

最后在dependencies中添加compile依赖即可。

3 让每个开发者每次都拷贝一份maven包,也不科学。如何改进?项目代码,我们一般用git来进行管理。同理,library生成的maven包,我们同样可以用git来管理。主项目通过git submodule的方式来管理library生成的maven包的git仓库。这样以来,工作流程是:

库的修改者:

  1. 在本地修改library,调试通过后,提交代码到git
  2. 通过gradle maven 插件,生成maven包,将maven包提交到另外一个git仓库(管理maven包的仓库)

库的使用者:

  1. 通过git submodule update,更新submodule git仓库(管理maven包的仓库)
  2. 根据maven包中的groupId、artifactId、version信息,修改build.gradle中的dependencies依赖
  3. gradle同步完成后,即可使用最新的库代码来开发主项目
  4. 开发完后,想主项目的git仓库提交代码

4 如果library没有隐私可以公开,那我们可以像github上的一些库一样,生成maven包后,将maven包发布到jcenter/maven。这样一来,就只需要在主项目module的build.gradle中配置dependencies compile依赖即可。

总结:

  1. android项目中依赖的库,本质上是maven包
  2. maven包可以放在公开的jcenter仓库中,也可以放在本地,或者其它某个服务器上
  3. 如果是在jcenter中,我们无需配置仓库地址,项目根目录下默认生成的build.gradle已经帮我们配置好了
  4. 如果是在其它地方,本地目录,或者其它某个服务器上,需要在build.gradle中用repositories来配置仓库的具体路径,这样,当我们在dependencies compile配置了依赖库的时候,gradle才知道从哪里去下载。

Android项目依赖库管理方式简介的更多相关文章

  1. Android项目-高考作文功能简介(一)

    前言 :  开发安卓也已2年多了近3年了, 在自己刚入行的时候就有自己独立开发一个App的想法. 后来自己做了<<高考作文>>这一App. 后面续续断断的维护者. 也因为功能简 ...

  2. Jenkins构建Android项目持续集成之findbugs的使用

    Findbugs简介 关于findbugs的介绍,可以自行百度下,这里贴下百度百科的介绍.findbugs是一个静态分析工具,它检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题 ...

  3. 使用Jenkins进行android项目的自动构建(2)

    Maven and POM 1. 什么是Maven? 官方的解释是: http://maven.apache.org/guides/getting-started/index.html#What_is ...

  4. iOS开发之通过Framework建立项目依赖

    https://www.jianshu.com/p/d146db167bf3 项目开发时经常会遇到个别模块想打包成framework的情况,传统的打包方式太繁琐,反复测试时很麻烦,不如一个项目管理来得 ...

  5. Android 查看项目依赖树的四种方式

    Android 查看项目依赖树的四种方式: 方式一: ./gradlew 模块名:dependencies //查看单独模块的依赖 ./gradlew :app:dependencies --conf ...

  6. 使用Roboguice依赖注入规划Android项目

    前言 好久没写博客了,罪过啊-记事本里累积了不少东西,整理整理放上来. 关于依赖注入 Dependency Injection( 依赖注入)可以很好的帮助我们分离模块,降低耦合.提高可测试性.(PS: ...

  7. Android注解使用之Dagger2实现项目依赖关系解耦

    前言: 最近牵头发起公司app的重构工作,如何通过重构让项目的耦合降低.开发效率提高,一直是我努力的方向,今天来学习一下一个注解框架Dagger2,然后看看如何使用它来降低项目的耦合. Dagger2 ...

  8. Android项目实战(三十三):AS下获取获取依赖三方的jar文件、aar 转 jar

    使用 Android studio 开发项目中,有几种引用三方代码的方式:jar 包 ,类库 ,gradle.build 的compile依赖. 大家会发现github上不少的项目只提供compile ...

  9. Android Studio Jar、so、library项目依赖

    Eclipse跟AS的不同 从Eclipse到AS不要带着在Eclipse中的主观色彩去在AS中使用,从项目的构成到构建是不同的,下面列举在Eclipse和AS中的一些概念的区别: WorkSpace ...

随机推荐

  1. 熊海cms v1.0 完全代码审计

    很久以前写的,写这个东西更多的是为了说明我自己的一个思路,即按照程序功能点进行代码审计, 这样经过一段时间训练,熟悉了某种功能的正确和错误实现方法,遇到类似的代码就可以很快看出是否有问题了 --- 0 ...

  2. [考试反思]0904NOIP模拟测试37:守望

    100分并列的还有4个没粘 总分是大脸的一半,然而还只低了2名.差距好大...但其实后面的分数段又很密集,和我都差不了多少... 我可能也是最水的那一个,排行榜前7个里面就我没有AC.全是暴力... ...

  3. NOIP模拟 39

    考的嘛也不是. 伤心(怎么可能) T1稍想想组合数,然后牢记: 取模题随时取模,包括刚刚读入的数据  T2想到了基环树,然而不会打QAQ.. 非常简洁但非常大神的做法:随便断掉环上的一条边 利用“这条 ...

  4. 八、springboot 简单优雅的通过docker-compose 构建

    前言 这个项目有一段时间没有更新了,不过我可没有偷懒哟,是偷偷准备了一个大招,现在是时候展示啦哈哈. 我们今天要做的,就是将我们的项目通过docker-compose 构建成镜像运行.为什么要这样做呢 ...

  5. docker-compose搭建zookeeper集群

    搭建zookeeper集群 创建docker-compose.yml文件 ``` version: '3.1' services: zoo1: image: zookeeper restart: al ...

  6. redhat、centos7系列破解密码

    redhat或者centos7,破解密码: 1.开机出现引导菜单时按下e键 2.找到linux16行,在其后追加 rd.break 参数 console=tty0 3.启动到特定的模式,由于更改密码需 ...

  7. SVN积极拒绝解决办法

    出现以上情况多数为Linux里面的svn自启动没有设置好,一般是自启文件被废弃了,就算在里面添加自启代码也无效,想要兼容旧版本使用这个文件,只需在root管理员模式下输入代码chmod +x /etc ...

  8. 从最近面试聊聊我所感受的.net天花板

    #0 前言 入职新公司没多久,闲来无事在博客园闲逛,看到园友分享的面试经历,正好自己这段时间面试找工作,也挺多感想的,干脆趁这个机会总结整理一下.博主13年开始实习,14年毕业.到现在也工作五六年了. ...

  9. JAVA继承中子父类的构造方法

    首先,构造方法本身会有一个隐式的无参构造(默认): ①不写构造方法,类中的第一行代码事实上有一个默认的无参构造(系统会隐式为你写好) public class Student { private St ...

  10. shell配置文件

    个人配置主要集中在-/.profile文件中 打开新的交互式shell时,配置文件的执行顺序是/etc/profile  /etc/bashrc  ~/.profile   最后是~/.bashrc ...