Android Studio aar包的使用

Android Studio生成的aar可以包含所有的资源文件,包括res资源和class文件等,如果有so文件或者依赖的jar包也会打包进去。但是如果项目有依赖的aar则不会被打包进去(这点目前无法解决,除非拿到源码重新编译),AS当中只有library module才能编译生成aar包。

编译生成aar执行Build Project或者在右边的gradle栏中选中对应的library module然后执行对应的assemble命令即可。

编译完成以后会在对应的module下面的/build/outputs/aar/下面生成aar包:

如果你执行的是Build操作那可能生成的aar包只有debug包,如果你执行的是assemble操作,则对应目录下会生成debug和release包,其中release包也是可以配置混淆的(如果想要减少aar包的体积或者不想让别人看到源码)。

使用aar包时一般将对应的aar复制到app module下面的libs下面,然后在gradle里面android下面添加配置:

android{
    ......
    repositories {
        flatDir {
            //第一个libs是主项目的libs,其他modulelibs路径需要用逗号隔开../module名/libs
            dirs 'libs', '../base_lib/libs'
        }
    }
}

这里注意要的是如果项目中app所依赖的library module中也使用了aar包,那么在app的gradle中配置时需要将依赖library的libs目录也配置进去否则会编译出错。另外如果你要生成aar包的module也依赖其他的module或者aar, 则相关依赖的module或者aar也要添加到app module中进行依赖。

即app依赖A, A依赖B和C.aar,则使用A.aar时需同时将B(可以选择生成B.aar或者直接依赖)和C.aar添加到app的依赖,如果选择app直接依赖B,而B中也使用了aar,那么也要在app中配置B的aar目录。

还有一种方式是在Project 根目录下的 build.gradle 中的 repositories 中添加相应的引用如下:

allprojects {
    repositories {
        jcenter()

        flatDir {
            // 由于Library module中引用了 gif 库的 aar,在多 module 的情况下,
            // 其他的module编译会报错,所以需要在所有工程的repositories
            // 下把Library module中的libs目录添加到依赖关系中
            dirs project(':AppLibrary').file('libs') 
        }
    }
}

AS中目前无法将library中所使用的所有相关aar包一并打包进去,使用的时候需注意这一点。这篇文章(点击跳转)说可以解决一次性打包所有aar不过我没有试过。

然后在dependencies里配置:

dependencies {
    ......
    implementation(name:'base_lib-release', ext:'aar')
}

AS3.0以前使用的compile,3.0以后都使用implementation关键字进行编译。

如果你使用的aar是release的并且混淆了,假如你有对应源码的话,在查看aar中的某个类源码时,点击进去然后在右上角可以选择添加源码路径:
这里写图片描述
点击choose sources选择对应的源码路径,这样添加了以后就可以看到源码了并且debug时也能进到源码里面,但是使用aar包的方式在debug时只能由app中的断点进入而不能直接在aar包对应的源码中添加断点,这也是aar不方便的一个地方。

另外,当你想要更换对应的libs下面的aar包的时候,一般情况下直接copy新的aar包替换掉老的即可,但我在使用的过程中发现有时这样不会起作用,替换了aar包之后代码里引用的还是老的aar包的代码,比如我新加的方法一直找不到,这个时候可能需要一些特殊操作,我的尝试是在右边gradle栏点击cleanBuild Cache之后然后点击刷新的按钮:

如果还不行,就多点几次刷新按钮,如果还是不行就只能手动删除对应的缓存文件了,我的AS缓存配置是在D盘,对应的aar包缓存目录是在D:\Android.gradle\caches\transforms-1\files-1.1\base_lib-release.aar/下面:
这里写图片描述
可以看到对应的base_lib-release.aar目录下面有很多的缓存文件,这可能是不同项目引用同一个aar包的缓存,我们将该目录下的缓存都删掉,然后重新到项目中执行cleanBuild Cache和刷新操作,这样aar缓存应该会更新为最新的了,app中可以引用aar中的代码了。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

川峰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值