灵魂拷问:Android aar包:ERROR: Failed to resolve: :alipaySdk2020...修改repositories flatDir dirs libs真的解决了?

Android Studio第一次导入aar包时,必出现的一个错误,不仅仅是支付宝的aar(如果你是用module导入aar可能会怀疑人生)。

ERROR: Failed to resolve: :alipaySdk-15.7.9-20200727:
Affected Modules: app

发一个出奇一致的解决方案(一致到所有人都这么写):

//每个gradle都来一遍(也许会感慨:谷歌居然默认不加,真是丧尽天良啊)
repositories {
    flatDir {
        dirs 'libs'
    }
}

//...
//导包
api(name: 'alipaySdk-15.7.9-20200727', ext: 'aar')

看样子可以完美运行,但是你的aar如果在其他不同的module时(如app和common两个模块):

ERROR: Failed to resolve: :alipaySdk-15.7.9-20200727:
Affected Modules: app

还是一模一样的错误?我不是加了过了吗?

是支付宝的bug?

支付宝:“这锅我不背”

gradle的bug?

gradle:“人在家中坐,锅从天上来”

其实翻译一下flatDir和api你就明白个差不多了:

flatDir的解释:把该目录(libs)添加为存储库(源码翻译)(通俗的讲就是导包的时候也会找libs目录的包)(注意只对module自己有效)

api的解释:Gradle 会将依赖项添加到编译类路径和构建输出。当一个模块包含 api 依赖项时,会让 Gradle 了解该模块要以传递方式将该依赖项导出到其他模块,以便这些模块在运行时和编译时都可以使用该依赖项。(官方说明)(通俗的讲就是每个module都写了这个api)(注意每个module都会来一遍)

至此你或许明白上面的错误为什么只有“Affected Modules: app”,而common却编译成功了。

问题虽然找到了,但该怎么解决呢?

千百次的擦肩而过却未换来一次回眸——来自一段熟悉而又陌生的代码的感伤。

implementation fileTree(dir: 'libs', include: ['*.jar'])

只想过它不用再导jar,却没曾想过它不仅仅局限于jar

所以只需把你的common包改成(其他骚操作自行yy):

//common模块
//默认导入libs下所有jar和aar
api fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
//温馨提示:别忘了删掉api(name: '...', ext: 'aar')哦

叫上小伙伴们赶紧删掉flatDir和无用的api吧

转载请注明出处:王能的博客纠正:Android aar包:ERROR: Failed to resolve: :alipaySdk2020...(不要再使用repositories flatDir dirs libs了)_王能的博客-CSDN博客

  • 19
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值