纠正: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时(如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,却不知导包它当然都可以不用写

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

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

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

 

由于多数博客鱼龙混杂,本博客如果让你非常满意或解决了大家的根本性问题,希望多多支持在右边点赞和回复一下,举手之劳方便大家。

转载请注明出处:王能的博客https://blog.csdn.net/weimingjue/article/details/112741849

相关推荐
©️2020 CSDN 皮肤主题: 技术工厂 设计师:CSDN官方博客 返回首页