一、本地依赖方式
由于要使用第三方jar包。而第三方给的SDK是jar包,并没有上传到Maven库,因此不支持Maven库在线依赖,所以需要如下所示的,在项目中手动集成jar包。
然后在build.gradle中 导入刚才的libs目录
dependencies {
api fileTree(include: ['*.jar'], dir: 'libs')
}
这种方式本人不喜欢,因为习惯了使用Maven在线依赖的方式,因此想把这些jar包上传到Maven私服上,然后通过Maven在线依赖的方式来使用这些第三方jar包。
二、将jar包上传到Maven私服
2.1 登录Maven私服并打开【3rd party】这个Respsitory
- 打开内部搭建的Maven私服,比如我们内部的Maven私服网站为 http://xxx.xxxx.com:8081/nexus/
2、点击右上角的【LogIn】按钮,进行登录
3、登陆之后点击左侧列表中的【views/respsitories】–>【Respsitories】 显示出所有的Respositories,然后以后点击【3rd party】。
因为我们要上传的是第三方的jar包,所以就放在【3rd party】这个Respsitory里面比较合适
点击【Browse Storage】可以看到所有已经上传到这个【3rd party】这个Respsitory里面jar包或者aar包
2.2 在【3rd party】这个Respsitory中上传第三方的jar包
- 点击【Artifact Upload】面板,进行上传jar包操作
填写要上传的jar包的相关信息,如下所示:
2.2.1 填写【Select GAV Definition Source】
这一步主要是填写,我们上传jar包之后的一些产物在Maven中的属性,比如groupid和artifactId被统称为“坐标”是为了保证项目唯一性而提出的,如果你要把你项目弄到maven本地仓库去,你想要找到你的项目就必须根据这两个id去查找。
- 参数【GAV Definition】
第一个参数【GAV Definition】可以选择【GAV Parameters】和【From POM】两种方式,我们选择【GAV Parameters】
如果选择【From POM】的方式,界面如下
- 参数【Group】
groupId 是(Maven)项目的唯一标识。Group ID必须满足 Java包名规范 ,这意味着是形如:org.apache.maven,org.apache.commons的格式。Maven不强制此规范,很多遗留的旧项目使用单个单词作为group ID。但是,很难用单个单词作为(新项目的)group ID,并将其提交到Maven中央仓库中。
你可以创建任意数量的子分组。一种比较好的来划分groupId的颗粒度的方式是使用项目结构(package structure)。这是指,如果当前项目是一个多模块(module)的项目,可以通过在父groupId的基础上增加后缀的形式来定义,例如:
org.apache.maven,
org.apache.maven.plugins,
org.apache.maven.reporting
- 参数【Artifact】
artifact 是不带版本号的jar的名字,唯一要求是使用小写字母,且没有特殊符号。如果这是一个第三方的jar包,必须使用其被发布的包名。
例如:maven,commons-math
- 参数【Version】
version 如果要发布,可以选择典型的数字和点号组成的版本号(1.0,1.1,1.0.1…)不要使用日期,因为它们通常和SNAPSHOT版本号联系在一起。如果是一个第三方的artifact,你必须使用它提供的版本号,无论这些版本号看起来多么奇怪,比如:2.0,2.0.1,1.3.1
我们这边上传的如下所示
那么我们如果上传成功的话,需要在Android 项目中的build.gradle中引用的话,用下面的形式
dependencies {
api 'com.umeng.analytics:analytics-overseas:7.5.4'
}
- 参数【Packaging】
packaging【可选的,默认为jar】:
当不定义packaging时,maven会使用默认值jar。
2.2.2 填写【Select Artifact(s) for Upload】
1、点击【Select Artifact(s) to Upload】按钮,选择需要上传的jar包。
2、点击【Add Artifact】按钮
点击【Add Artifact】按钮,自动生成下面的artifacts内容,上面的三个框空白了。
3、点击【Upload Artifact(s)】按钮,上传成功,如下所示
4.上传之后 点击【Browse Storage】面板,然后点击下【Refresh】按钮刷新下,就可以查看上传好的jar包
顺便将另外的一个jar包也上传上去,上传好后,如下所示
三、Maven在线依赖方式
刚刚我们已经将两个jar包上传了,现在可以直接在线依赖它们了。
dependencies {
//api fileTree(include: ['*.jar'], dir: 'libs')
api 'com.umeng.analytics:analytics-overseas:7.5.4'
api 'com.umeng.sdk:common-overseas:1.5.4'
}
sync完毕之后,查看【External Libraies】里面就有刚刚Maven在线依赖引入的两个jar包
这样就方便多了!
四、关于上传AAR包
(ps: 更新2020年4月8日)
今天有同事下载了一些第三方的aar包,如何放在项目本地使用,我立马建议他将aar包上传到Maven私服。
4.1 上传aar
上传私服如下图所示
打包方式没有aar
点击上传
上传完后
4.2 引用上传到Maven私服的AAR
4.2.1 错误使用方式
implementation 'com.youdao.asr:youdaoasr:1.0.0@aar'
implementation 'com.youdao.audio:youdaoaudio:1.0.0@aar'
这样的写法 无法下载刚刚上传的AAR包
4.2.2 正确使用方式
参考博客:https://blog.csdn.net/u011424451/article/details/87378439
该博客的Nexus版本比我的版本新,我的版本暂时不支持这样的方式,因此 使用
添加结尾 @aar
的方式来引用
在项目中使用如下的代码,注意后面的@aar
implementation 'com.youdao.asr:youdaoasr:1.0.0@aar'
implementation 'com.youdao.audio:youdaoaudio:1.0.0@aar'
成功下载下来
以前在我之前的博客
【我的Android进阶之旅】快速创建和根据不同的版本类型(Dev、Beta、Release)发布Android 开发库到Maven私服
上传的AAR库 不需要添加结尾 @aar
即可引用,是因为上传的脚本里面就写好了打包方式为aar
所以以脚本的形式上传的 直接不需要结尾 @aar
即可引用。
4.2.3 关于添加后缀@aar的作用
博客:
https://stackoverflow.com/questions/30157575/why-should-i-include-a-gradle-dependency-as-aar
翻译过来:
当您指定@后缀时,您将强制以您指定的格式(可能存在也可能不存在)下载库。 这很有用,例如 当作者忘记指定库是.aar和maven(或gradle,不确定)默认情况下将其视为.jar。 如果指定了@后缀,则不再下载此库的依赖项,因此您必须手动确保。
compile 'com.android.support:appcompat-v7:22.1.1@aar'
compile 'com.android.support:support-v4:22.1.1@jar'
为了确保在指定@后缀时下载了库的完整依赖树,您必须以以下方式编写它:
compile ('com.android.support:appcompat-v7:22.1.1@aar') {
transitive = true
}
博客:https://www.cnblogs.com/lkc9/p/10813518.html 描述
一、.aar和.jar之间的区别。
‘.aar’可以包含源代码和资源,但是’.jar’只能包含源代码。
二、下载依赖库时的区别
当您在项目的build.gradle中包含一个带有后缀@arr的库时,该库将下载.aar后缀的库文件。如果没有,默认情况下将下载.jar的库文件。当然,您也可以添加后缀@jar使下载
.jar的库文件。
implementation 'com.android.support:appcompat-v7:22.1.1@aar'
implementation 'com.android.support:support-v4:22.1.1@jar'
五、参考资料
- https://ouyangpeng.blog.csdn.net/article/details/78804637
- https://ouyangpeng.blog.csdn.net/article/details/56872556
- https://blog.csdn.net/qq_31459039/article/details/81361496
- https://blog.csdn.net/u011424451/article/details/87378439
- https://stackoverflow.com/questions/30157575/why-should-i-include-a-gradle-dependency-as-aar
- https://www.cnblogs.com/lkc9/p/10813518.html
作者:欧阳鹏 欢迎转载,与人分享是进步的源泉!
转载请保留原文地址:https://blog.csdn.net/qq446282412/article/details/90482592
☞ 本人QQ: 3024665621
☞ QQ交流群: 123133153
☞ github.com/ouyangpeng
☞ oypcz@foxmail.com