SDK打包成aar后无法引用三方或者本身SDK项目中存在的aar的问题解决

因为公司最近说要把我上次研发的一款工具类的项目说做成SDK的方式,我当时就懵了?SDK我没弄过呀,然后拼拼凑凑的把项目整理成SDK了,然后到打包了,网上搜了七七八八的资料,后面发现原来SDK就是之前我自己有弄过的一个项目变aar的方式来的,Android 项目转打包成aar_沙滩捡贝壳的小孩的博客-CSDN博客_android 项目转aar,嗯,就这篇,然后照着之前的步骤打包个aar包出来,然后问题就来了,打包出来后的aar包,嗯,没问题,哎,但是运行的时候,崩了,哎,一看错误

AAPT: error: resource android:att

然后在仔细看,发现是布局中引入了第三方控件导致的,然后我就懵圈了,难到是第三方没打入到aar包中嘛?然后打开aar包看

 就这个地方看,发现还真是,哎,然后我就去网上搜呀搜呀,就发现

,当你打包成功使用一个测试的项目进行测试的时候你会发现很有问题。主要问题就是涉及到第三方依赖的问题,你会发现,当你引用SDK接口运行的时候找不到aar中引用的三方库,为什么呢?原因在于打包aar只是单纯的引用library项目中的class和资源,对于需要的第三方依赖是没有引入到aar中的,一种简单的方法就是在你的项目gradle中重新引入依赖,这样是可以运行的,但这本身就是一个问题,所以不推荐使用这种简单粗暴的方法

那么怎么办呢?

网上推荐了2种解决方法,下面说下这2种方式的操作方式

1.fataar,这种方式实际就是通过embed的方式把依赖的第三方aar包一块合并打入到一个aar包中,这块的做法,额,网上都有,照着步骤来就行,不过建议去官网上看,官网上有针对这个gradle版本不同,然后选用fataar的版本也不一样

https://github.com/kezong/fat-aar-android,地址是这个,直接照着他们的步骤来就行

不过,这种方式适合于那种依赖不是特别深的那种,怎么说呢,就比如我这个项目,它本身有依赖我们公司研发的一个第三方工具库,然后这个工具库呢,我打开看发现,它又依赖了其他的工具库,然后其他的工具库里头又依赖了其他的工具库,哎,首先这么来说的话,开发这么做是没问题的,但是碰到这种SDK打包的话,那这种方法显然是不可取的,因为当你embe的时候,你会发现你只是embe了当前这个工具库,但是它底下依赖的工具库,哎,它没没给你合并进来额,然后就懵圈了

2.第二种方法就是maven库的方式

这种其实最简单了,做法就是说把项目中本身依赖的aar包上传到maven仓库就好了

然后再把整体项目上传上去就好了

下面附上maven库跟查看maven库的nexus使用方式:

1.下载maven库

Maven – Download Apache Maven,去这里下载就可以了

 根据系统版本选择不同的包进行下载就好了

maven的安装其实就是解压后,配置一下系统的环境变量。

新建变量MAVEN_HOME =D:\Downloads\apache-maven-3.8.5-bin\apache-maven-3.8.5(以自己的安装路径为准)

 

然后再path中添加

 安装成功的标志如下:

 然后开始安装nexus

Nexus Repository Manager - Software Component Management | Sonatype,去这个地址下载,

根据系统选择对应的版本,然后安装解压完成后进入

D:\Downloads\nexus-3.39.0-01-win64\nexus-3.39.0-01\bin,对应的解压安装路径下,然后

 

 输入cmd

然后

输入这个,然后等。。

 

当出现这个的时候然后再手动回车下,嗯,然后再浏览器输入

http://localhost:8081/ ,然后就进入了正常的

nexus管理界面了

 

登录nexus

网上很多文章的默认用户名密码分别是admin和admin123,但是我这个不是。用户名是admin,而密码在我们的解压包中路径带work的包下

 在这个目录下直接打开获取,然后登录

然后创建一个发布的仓库

 

 

 

 然后点底下按钮确定就创建好了

然后再配置下maven的配置,之前已经安装好了的,进入maven的安装路径:

打开这个

 

  <?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.2.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 https://maven.apache.org/xsd/settings-1.2.0.xsd">
  <localRepository>F:\Maven\maven_repository</localRepository>
  <pluginGroups>
  </pluginGroups>
  <proxies>
  </proxies>
  <servers> 
    <server>
      <!--本机nexus仓库名称-->
      <id>MyMaven</id>
      <!--本机nexus仓库用户名-->
      <username>admin</username>
      <!--本机nexus仓库密码-->
      <password>54749bca-b847-4ec8-9bd4-4c5bacd1df16</password>
    </server>
    <server>
        <id>releases</id>
        <username>admin</username>
        <password>54749bca-b847-4ec8-9bd4-4c5bacd1df16</password>
    </server>
    
    <server>
        <id>snapshots</id>
        <username>admin</username>
        <password>54749bca-b847-4ec8-9bd4-4c5bacd1df16</password>
    </server>
  </servers>
 
  <mirrors>
     <!-- 镜像 maven 库的路径 -->
    <mirror>
      <id>3rd</id>
      <url>http://localhost:8081/repository/MyMaven/</url>
      <mirrorOf>*</mirrorOf>
    </mirror>
 
    <mirror>
      <id>maven-default-http-blocker</id>
      <mirrorOf>external:http:*</mirrorOf>
      <name>Pseudo repository to mirror external repositories initially using HTTP.</name>
      <url>http://0.0.0.0/</url>
      <blocked>true</blocked>
    </mirror>
  </mirrors>
 
  <profiles>
 
    <profile>
       <id>nexusProfile</id>
         <repositories>
           <repository>
             <id>3rd</id>
             <name>My maven Repository</name>
             <url>http://localhost:8081/repository/MyMaven/</url>
             <layout>default</layout>
             <releases>
               <enabled>true</enabled>
             </releases>
             <snapshots>
             <enabled>true</enabled>
           </snapshots>
         </repository>
       </repositories>
    </profile>
  </profiles>
 <!--激活 -->
  <activeProfiles>
     <activeProfile>nexusProfile</activeProfile>
   </activeProfiles>
 
</settings>

然后照着填,然后这样就算配置完了

然后找到对应的aar文件进行上传即可

 

 其他地方就照着正常maven上传填就行,然后这样就算上传完成了,然后使用的时候,老规矩

 

implementation 'GroupId:Aritifiact ID:version@aar',然后这样就可以了,这样做完后,在重新通过脚本的方式上传到远程maven库上,这样就不会有存在说aar中依赖了其他aar包丢失的问题了
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值