00 前言
在整合各个手机厂商的 Android 移动推送 SDK 时,我们发现 OPPO 和 vivo 提供的是 AAR 包,无法直接通过 Maven 进行依赖。对此,我们只能选择本地依赖的方式。
然而,这种方式也带来了一些问题。当我们在 SDK 的 libs 文件夹中添加了 AAR 包,并通过 implementation(fileTree("libs")) 方式依赖,然后将其打包成新的 SDK(AAR 包)后,主工程在依赖这个 SDK 时却找不到 libs/aar 中的类,也就是说 SDK 的 libs/aar 没有被正确打包到 SDK 里。
要解决这一问题,比较简单的方式就是将 AAR 包上传到公司的私有 Maven 仓库里,然后通过 Maven 来依赖。但是我们公司的私服上传 AAR 包不提供可视化界面,只能通过 Maven 命令上传,所以我在这里记录一下相关的配置过程。
下文将介绍如何在 Mac 上使用 Maven 命令将 AAR 包上传到私服。
01 下载 Maven 工具
去官网(maven.apache.org/download.cg… 下载Maven 工具。如下图所示,下载 apache-maven-3.9.8-bin.tar.gz 并解压。
解压后需要获取到解压文件夹的路径,这是后续配置环境变量时需要用到的。(建议使用 iTerm 作为命令行工具,下面的操作也基于 iTerm。)
获取文件夹路径的方法
获取文件夹路径的方法有两种:
- 将文件夹直接拖到 iTerm 上,可以看到路径。
- 在 iTerm 中
cd到对应的文件夹目录,执行pwd命令获取路径。
解压后的路径为 /Users/mac/Desktop/apache-maven-3.9.8。
02 配置环境变量
获取路径后,我们就可以配置环境变量了。
修改 .bash_profile 文件
打开 iTerm,输入 sudo vim .bash_profile,然后按 i 进入编辑模式。将以下两行添加到 .bash_profile 文件的最后。
export M3_HOME=/Users/mac/Desktop/apache-maven-3.9.8
export PATH=$M3_HOME/bin:$PATH
编辑完成后,按 esc 退出编辑模式,输入 :wq 并按 Enter 保存退出。
使配置生效
退出编辑状态以后,会回到 iTerm 命令行状态,这时需要输入 source ~/.bash_profile,来让环境变量和配置立即生效,如下图所示。
到这里,环境变量就已经配置完成了。
测试配置
接下来,我们来验证一下配置是否成功。在 iTerm 中输入 mvn -version,如果出现 Maven 版本信息,则代表配置成功了。
03 配置 Maven 全局密码
对于私有仓库上传操作,我们需要配置 Maven 的密码。
打开 settings.xml 文件
使用文本编辑器打开 /Users/mac/Desktop/apache-maven-3.9.8/conf/settings.xml。
配置 标签
找到 <servers> 标签并修改 <servers> 标签内容,填写私有私服的仓库名、用户名和密码(需要从管理员处获取相关信息)。
<servers>
<server>
<id>私服的仓库名</id>
<username>用户名</username>
<password>密码</password>
</server>
</servers>
具体改动的地方,改动前、后对比情况,如下图所示。
04 上传文件
使用 mvn 命令上传 AAR 文件
配置完成后,我们就可以用 mvn 命令上传本地 AAR 文件了,命令格式如下所示。
mvn deploy:deploy-file -DgroupId=com.heytap.msp -DartifactId=msp -Dversion=3.5.2 -Dpackaging=aar -Dfile=/Users/mac/Desktop/com.heytap.msp_3.5.2.aar -Durl=https://nexus.xxx.com/repository/deploymentRepo/ -DrepositoryId=deploymentRepo
参数解释
DgroupId、DartifactId、Dversion:定义依赖的基本信息。Dfile:本地 AAR 文件路径。Durl:私服仓库 URL。DrepositoryId:仓库名,对应settings.xml中的<id>。
上传成功后,iTerm 会提示 BUILD SUCCESS。然后,我们就可以通过 implementation 'com.heytap.msp:msp:3.5.2' 实现远程依赖了。
05 总结
如果 SDK 里添加了 libs/aar,又没有做包合并的话,libs/aar 包是不能被打包到 SDK 里的;做包合并又比较难,还容易出问题,不如直接将 AAR 上传到私服来的安全、便捷。
希望本文能为你提供帮助,如有任何问题或建议,欢迎提出!