在Android开发中,一个项目需要依赖许多的库,我们自己写的,第三方的等等,这篇文件介绍的就是自己搭建私服,创建自己的仓库,进行对我们自己写的库依赖管理。本文是在 mac book pro 环境上搭建的,其它操作系统操作方式大致一样的。如果有不一样的地,可以参考官方文档
Android中引入依赖的几种方法
一 直接引用 jar 的方式
11. 切换project视图 22. 新建libs目录 33. 拷贝 jar 包到libs目录下 44. add as library 5 6这种依赖方法最原始,如果依赖的包升级了,我们需要到libs目录中把旧版本的包删除,再下载新的包,再放到libs目录下,这样如果libs目录下有几十个包,这样工作量就非常大。 7而Android项目中会有一些图片,xml,字符串等资源,这样是不能直接打包到jar中的。这种依赖会有一定的局限性
二 直接引用 aar 的方式
11. 和第一种直接引用 jar 的方式相似,第一步直接把aar文件拷贝到libs目录下 22. 直接拷贝进去还是不行的,第二步需要在项目的build.gradle文件中添加以下两步
1 在android的块中添加如下代码
1android { 2 compileSdkVersion 25 3 buildToolsVersion "25.0.2" 4 defaultConfig { 5 applicationId "com.test.study" 6 minSdkVersion 14 7 targetSdkVersion 25 8 versionCode 1 9 versionName "1.0" 10 testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 11 } 12 buildTypes { 13 release { 14 minifyEnabled false 15 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 16 } 17 } 18 19 //需要在这里添加如下代码,告诉编译器,我们要引入这个目录下的所有文件 20 repositories{ 21 flatDir{ 22 dirs 'libs' 23 } 24 } 25}
2 在项目的build.gradle文件中,在dependencies中添加如下代码
1//比如我们的aar文件叫 lib2.arr 2//name对应的就是文件名,ext对应的就是文件的扩展名 3compile(name:'lib2',ext:'aar')
以上两步完成后,aar包中的资源,类等就可以直接使用了。
三 引用module的方式
11. 右键点击项目,选择open module settings 22. 选择在Project Structure中选择Dependencies 33. 选择添加相应的module,进行依赖即可 4 5这种方法,每个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手机
- 首先确定我们的环境安装好maven,jdk等必须的环境
- 上面的环境准备好后,去官网下载相应操作系统的最新版本的nexus下载地址:http://www.sonatype.org/nexus/go
- 下载好之后解压到本地的任何一个目录,我的解压目录是 /Users/zhanghongjun/myLibrary/nexus-3.3.1-01-mac
- 在这个目录下,找到nexus对应的版本的目录,看到下面有一个bin目录,我的bin目录如下:/Users/zhanghongjun/myLibrary/nexus-3.3.1-01-mac/nexus-3.3.1-01/bin
- 在bin目录下有一个可执行文件 nexus,执行这个可执行文件就可以开启nexus了。
下面是nexus的一些命令选项 nexus {start|stop|run|run-redirect|status|restart|force-reload}如果要开启nexus,在bin目录下运行如下命令
./nexus start
- 在浏览器中打开 http://127.0.0.1:8081
注:默认nexus监听8081端口,如果8081端口被占用,在安装nexus或者在配置文件中修改端口,修改文件 /nexus-3.3.1-01/etc/nexus-default.properties ,里面有application-port=8081 ,修改重启即可,重启命令./nexus restart
- 浏览器打开nexus,如下图

- 首先要上传库,必须要先创建一个自己的账号,我们登录管理员账号,然后创建我们自己的账号
管理员账号和密码默认分别为 admin , admin123
登录管理员账号后如下图

- 创建用户的过程如下图

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

2

3

经过以上步骤,我们的仓库就创建成功了。接下来我们把我们的库上传到自己的仓库中。
如何上传我们自己的库?
- 在Android Studio中,比如我们有一个 mylibrary 的module,这里一个公共的库,要把这个库上传到我们自己的仓库。
打开build.gradle,找到合适的地方添加以下代码(代码中有注释)
1apply plugin: 'com.android.library' 2apply plugin: 'maven' // 1 添加maven插件 3 4android { 5 compileSdkVersion 25 6 buildToolsVersion "25.0.2" 7 8 defaultConfig { 9 minSdkVersion 14 10 targetSdkVersion 25 11 versionCode 1 12 versionName "1.0" 13 14 testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 15 16 } 17 buildTypes { 18 release { 19 minifyEnabled false 20 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 21 } 22 } 23} 24 25//定义上传的行为 26uploadArchives { 27 repositories { 28 mavenDeployer { 29 //2 添加maven的url,也就是仓库的地址,仓库的地址从哪找,见下图 30 repository(url: "http://127.0.0.1:8081/repository/com.test.testlib/") { 31 //3 添加账号和密码 32 authentication(userName: "test", password: "123456") 33 } 34 pom.version="0.0.1" //版本号 35 pom.artifactId="testlib" //artifactId 36 pom.groupId="com.test" //组id, 37 } 38 } 39} 40 41 42dependencies { 43 compile fileTree(dir: 'libs', include: ['*.jar']) 44 androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { 45 exclude group: 'com.android.support', module: 'support-annotations' 46 }) 47 compile 'com.android.support:appcompat-v7:25.3.1' 48 testCompile 'junit:junit:4.12' 49}
我们自己的仓库的地址怎么找到?见下图

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

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

上传完仓库以后怎么引用?
- 在项目的build.gradle中添加如下代码
1buildscript { 2 repositories { 3 jcenter() 4 } 5 dependencies { 6 classpath 'com.android.tools.build:gradle:2.3.2' 7 } 8} 9 10allprojects { 11 repositories { 12 jcenter() 13 //添加如下一句,表示我们使用自己的maven 14 mavenLocal() 15 } 16} 17 18task clean(type: Delete) { 19 delete rootProject.buildDir 20}
- 在module的build.gradle中添加如下代码
1apply plugin: 'com.android.application' 2 3android { 4 compileSdkVersion 25 5 buildToolsVersion "25.0.2" 6 defaultConfig { 7 applicationId "com.test.testlib" 8 minSdkVersion 14 9 targetSdkVersion 25 10 versionCode 1 11 versionName "1.0" 12 testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 13 } 14 buildTypes { 15 release { 16 minifyEnabled false 17 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 18 } 19 } 20} 21 22//1 添加下面的代码 23allprojects{ 24 repositories{ 25 maven{ 26 url "http://127.0.0.1:8081/repository/com.test.testlib/" 27 } 28 } 29} 30 31 32dependencies { 33 compile fileTree(dir: 'libs', include: ['*.jar']) 34 androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { 35 exclude group: 'com.android.support', module: 'support-annotations' 36 }) 37 compile 'com.android.support:appcompat-v7:25.3.1' 38 compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha8' 39 testCompile 'junit:junit:4.12' 40 41 //2 以下方式引用 42 compile 'com.test:testlib:0.0.1' 43}
经过以上步骤,就可以创建自己的仓库,并且上传我们自己的库,而且也可以在项目中引用我们自己仓库中的库了
由于环境不一样,版本不一样,操作系统不一样,在操作过程中或许有此行的不同,如果有不同的地方,请参照官方的文档
