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博客