在Android开发中,一个项目需要依赖许多的库,我们自己写的,第三方的等等,这篇文件介绍的就是自己搭建私服,创建自己的仓库,进行对我们自己写的库依赖管理。本文是在 mac book pro 环境上搭建的,其它操作系统操作方式大致一样的。如果有不一样的地,可以参考官方文档

Android中引入依赖的几种方法

一 直接引用 jar 的方式

1. 切换project视图
2. 新建libs目录
3. 拷贝 jar 包到libs目录下
4. add as library 这种依赖方法最原始,如果依赖的包升级了,我们需要到libs目录中把旧版本的包删除,再下载新的包,再放到libs目录下,这样如果libs目录下有几十个包,这样工作量就非常大。
而Android项目中会有一些图片,xml,字符串等资源,这样是不能直接打包到jar中的。这种依赖会有一定的局限性

二 直接引用 aar 的方式

1. 和第一种直接引用 jar 的方式相似,第一步直接把aar文件拷贝到libs目录下
2. 直接拷贝进去还是不行的,第二步需要在项目的build.gradle文件中添加以下两步

1 在android的块中添加如下代码

android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
applicationId "com.test.study"
minSdkVersion 14
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
} //需要在这里添加如下代码,告诉编译器,我们要引入这个目录下的所有文件
repositories{
flatDir{
dirs 'libs'
}
}
}

2 在项目的build.gradle文件中,在dependencies中添加如下代码

//比如我们的aar文件叫 lib2.arr
//name对应的就是文件名,ext对应的就是文件的扩展名
compile(name:'lib2',ext:'aar')

以上两步完成后,aar包中的资源,类等就可以直接使用了。

三 引用module的方式

1. 右键点击项目,选择open module settings
2. 选择在Project Structure中选择Dependencies
3. 选择添加相应的module,进行依赖即可 这种方法,每个module中就可以包含图片,字符串,xml等资源了。其实最终打包成的是 aar 格式的包。aar 相比于 jar ,aar是可以包含资源的。这对于Android开发是非常有用的。在Android Studio中,一个project下可以有多个module,每个module之间可以互相依赖。但是这种方法也有一个不好的地方,比如我们的项目有一个utils的module,其它的module都依赖这个utils,如果其它的公司的项目部门的项目也想使用这个utils,就只能拷贝代码了,每次utils添加了或者修改了功能的时候,每次都要拷贝,复用性不好。只是单纯的在自己的项目中达到了分模块的功能,即使是这样,这个utils的代码是组里的人谁都可以改的。更好的方法是只让一个人改,其它的人只需要用就行了。有专门的一个同事负责这个utils模块更好。

四 最后一种依赖方式,直接在build.gradle中使用compile添加依赖(推荐

1. 通过compile从 jcenter,mavencenter或者自己搭建的私有仓库进行依赖

通过这种方式依赖的好处是我们并不需要像直接引用 jar一样,还要从网上下载最新的,删除旧的等步骤,我们直接在build.gradle中修改一下版本号就行了。网上有第三方的私服,不过公司的代码并不方便放在第三方的私服上

下面介绍一下如何通过Nexus搭建自己的私服

如何通过Nexus搭建私服?

注:这里的Nexus不是Google的nexus手机

  1. 首先确定我们的环境安装好maven,jdk等必须的环境
  2. 上面的环境准备好后,去官网下载相应操作系统的最新版本的nexus下载地址:http://www.sonatype.org/nexus/go
  3. 下载好之后解压到本地的任何一个目录,我的解压目录是 /Users/zhanghongjun/myLibrary/nexus-3.3.1-01-mac
  4. 在这个目录下,找到nexus对应的版本的目录,看到下面有一个bin目录,我的bin目录如下:/Users/zhanghongjun/myLibrary/nexus-3.3.1-01-mac/nexus-3.3.1-01/bin
  5. 在bin目录下有一个可执行文件 nexus,执行这个可执行文件就可以开启nexus了。

下面是nexus的一些命令选项 nexus {start|stop|run|run-redirect|status|restart|force-reload}如果要开启nexus,在bin目录下运行如下命令

./nexus start
  1. 在浏览器中打开 http://127.0.0.1:8081

注:默认nexus监听8081端口,如果8081端口被占用,在安装nexus或者在配置文件中修改端口,修改文件 /nexus-3.3.1-01/etc/nexus-default.properties ,里面有application-port=8081 ,修改重启即可,重启命令./nexus restart

  1. 浏览器打开nexus,如下图

  1. 首先要上传库,必须要先创建一个自己的账号,我们登录管理员账号,然后创建我们自己的账号

管理员账号和密码默认分别为 admin , admin123

登录管理员账号后如下图

  1. 创建用户的过程如下图

  1. 账号创建成功后,退出admin账号,登录我们自己创建的账号创建一个仓库,如下图

1

2

3

经过以上步骤,我们的仓库就创建成功了。接下来我们把我们的库上传到自己的仓库中。

如何上传我们自己的库?

  1. 在Android Studio中,比如我们有一个 mylibrary 的module,这里一个公共的库,要把这个库上传到我们自己的仓库。

打开build.gradle,找到合适的地方添加以下代码(代码中有注释)

apply plugin:   'com.android.library'
apply plugin: 'maven' // 1 添加maven插件 android {
compileSdkVersion 25
buildToolsVersion "25.0.2" defaultConfig {
minSdkVersion 14
targetSdkVersion 25
versionCode 1
versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" }
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
} //定义上传的行为
uploadArchives {
repositories {
mavenDeployer {
//2 添加maven的url,也就是仓库的地址,仓库的地址从哪找,见下图
repository(url: "http://127.0.0.1:8081/repository/com.test.testlib/") {
//3 添加账号和密码
authentication(userName: "test", password: "123456")
}
pom.version="0.0.1" //版本号
pom.artifactId="testlib" //artifactId
pom.groupId="com.test" //组id,
}
}
} dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.3.1'
testCompile 'junit:junit:4.12'
}

我们自己的仓库的地址怎么找到?见下图

添加了以上配置以后,如何上传我们的包到自己的仓库呢,我们使用gradle的任务来上传,在AndroidStudio 中窗口的右上角有个gradle,点开,如下图

经过上面的操作,我们的库就上传到自己的maven仓库中了,在nexus中我们可以看到自己上传的库了,如下图

上传完仓库以后怎么引用?

  1. 在项目的build.gradle中添加如下代码
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.2'
}
} allprojects {
repositories {
jcenter()
//添加如下一句,表示我们使用自己的maven
mavenLocal()
}
} task clean(type: Delete) {
delete rootProject.buildDir
}
  1. 在module的build.gradle中添加如下代码
apply plugin: 'com.android.application'

android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
applicationId "com.test.testlib"
minSdkVersion 14
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
} //1 添加下面的代码
allprojects{
repositories{
maven{
url "http://127.0.0.1:8081/repository/com.test.testlib/"
}
}
} dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha8'
testCompile 'junit:junit:4.12' //2 以下方式引用
compile 'com.test:testlib:0.0.1'
}

经过以上步骤,就可以创建自己的仓库,并且上传我们自己的库,而且也可以在项目中引用我们自己仓库中的库了

由于环境不一样,版本不一样,操作系统不一样,在操作过程中或许有此行的不同,如果有不同的地方,请参照官方的文档

Android依赖管理与私服搭建的更多相关文章

  1. 4.Maven概念模型,maven的生命周期,Maven坐标,依赖管理(依赖范围,依赖声明),仓库管理,私服概念

     1 maven概念模型 2 maven的生命周期,项目构建过程 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG90b3R1enVvcXVhbg== ...

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

    依赖管理 这会是一个系列,所以如果你还没有看我之前的几篇文章,请先查看以下文章: Gradle for Android 第一篇( 从 Gradle 和 AS 开始 ) Gradle for Andro ...

  3. 【转载】Gradle for Android 第三篇( 依赖管理 )

    依赖管理是Gradle最闪耀的地方,最好的情景是,你仅仅只需添加一行代码在你的build文件,Gradle会自动从远程仓库为你下载相关的jar包,并且保证你能够正确使用它们.Gradle甚至可以为你做 ...

  4. Android使用gradle依赖管理、依赖冲突终极解决方案(转)

    Android使用gradle依赖管理.依赖冲突终极解决方案在Android开发中,相信遇到关于版本依赖的问题的同学有不少.虽然Android Studio一般都会自动帮我们去重,但是有时候去重失败了 ...

  5. maven仓库总结,maven私服搭建

    配置pom.xml依赖包时在这里找包的描述: http://search.maven.org/#browse 以java为根目录. mvn archtype:generate -DgroupId=zt ...

  6. window Maven私服搭建——nexus

    注:本文来源于 <window   Maven私服搭建--nexus> Maven私服搭建--nexus 1.下载nexus https://www.sonatype.com/downlo ...

  7. Android应用开发环境的搭建和使用

    主要包括Android SDK.Android开发工具:也包括如何使用Android提供的ADB.DDMS.AAPT.DX等工具,掌握这些工具是开发Android应用的基础技能. 1.Android的 ...

  8. Maven仓库介绍以及私服搭建

      1 什么是Maven? 1.1 Maven的概念 Maven主要服务于基于Java平台的项目构建.依赖管理和项目信息开发,它是一个异常强大的构建工具,能够帮助我们自动化构建过程,从清理.编译.测试 ...

  9. maven仓库总结,maven私服搭建,批量mvn eclipse:eclipse

    配置pom.xml依赖包时在这里找包的描述: http://search.maven.org/#browse 以java为根目录. mvn archtype:generate -DgroupId=zt ...

随机推荐

  1. linux命令之crontab定时执行任务

    一.crond简介 crond 是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务 工具,并且会自动启动c ...

  2. SEO,搜索引擎优化原理方法等整体把握

    SEO 搜索算法: 全文文字 title 标签,title里面的文字 link 链接 link 链接里的文字 站点信任度 最佳实践: 一.设置title 准确的描述当前网页的内容 提高站点内title ...

  3. redis 数据库实现

    redis 数据库实现 数据库的 server 端和 client 端 server 端 数据库在 server 端的存储 // redisServer 结构 struct redisServer { ...

  4. [转]DevExpress GridControl 关于使用CardView的一点小结

    最近项目里需要显示商品的一系列图片,打算用CardView来显示,由于第一次使用,遇到许多问题,发现网上这方面的资源很少,所以把自己的一点点实际经验小结一下,供自己和大家以后参考. 1.选择CardV ...

  5. Sencha+cordova 构造 华丽手机程序,并讲讲,在商用项目中经常用到的cordova插件(一)

    采用 Sencha Architect 3 ,编辑设计,我只想说一个结论,jq能搞的 Sencha touch也能做到(只是 设计思路 更面向对象,学习知识量大点而已 ,不理解 MVC 就不用选了), ...

  6. 随机抽样一致算法(Random sample consensus,RANSAC)

    作者:桂. 时间:2017-04-25  21:05:07 链接:http://www.cnblogs.com/xingshansi/p/6763668.html 前言 仍然是昨天的问题,别人问到最小 ...

  7. 请为main函数提供返回值

    很多人甚至市面上的一些书籍,都使用了void main( ) ,其实这是错误的.C/C++ 中从来没有定义过void main( ).C++ 之父 Bjarne Stroustrup 在他的主页上的 ...

  8. [ext4]01 磁盘布局 - block分析

    ext4文件系统最基本的分配单元是"block"(块). block是由一组连续的sectors来组成,其大小介于1k~4K之间,当然不可能是任意值,只能是2的整数次幂个secto ...

  9. 【算法系列学习】[kuangbin带你飞]专题十二 基础DP1 C - Monkey and Banana

    https://vjudge.net/contest/68966#problem/C [参考]http://blog.csdn.net/qinmusiyan/article/details/79862 ...

  10. 1.1Hibernate持久化类和Hibernate持久化对象状态

    一.持久化对象po类 1.po定义 PO,是Persistent Object的缩写,是持久化类.PO是由PO=POJO+hbm映射配置组成. 2.通俗理解 PO类即持久化类,其实就是一个普通的Jav ...