欸?主工程找不到 SDK 的 libs/aar 里的类?

491 阅读3分钟

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

参数解释

  • DgroupIdDartifactIdDversion:定义依赖的基本信息。
  • 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 上传到私服来的安全、便捷。

希望本文能为你提供帮助,如有任何问题或建议,欢迎提出!