转载

【Mapbox】集成到Android已有项目时的jar包冲突

AGPBI: {"kind":"error","text":"error: duplicate value for resource /u0027attr/layout_anchorGravity/u0027 with config /u0027/u0027.","sources":[{"file":"G://.gradle//caches//transforms-1//files-1.1//appcompat-v7-25.3.1.aar//aa3a481d7d5a34e0e9c4966911ce7c4a//res//values//values.xml","position":{"startLine":202,"startColumn":4,"startOffset":24572,"endColumn":68,"endOffset":24636}}],"original":"","tool":"AAPT"}
AGPBI: {"kind":"error","text":"error: resource previously defined here.","sources":[{"file":"G://.gradle//caches//transforms-1//files-1.1//appcompat-v7-25.3.1.aar//aa3a481d7d5a34e0e9c4966911ce7c4a//res//values//values.xml","position":{"startLine":202,"startColumn":4,"startOffset":24572,"endColumn":68,"endOffset":24636}}],"original":"","tool":"AAPT"}
复制代码

报的错误是 v7 包下找不到 attr/layout_anchorGravity 这个是属性,经过对jar包的搜索, 这个属性是属于 Constraint 包下的一个属性,v7包下并没有这个属性。

解决方法

  • 用过 gradlew app:dependencies > dep.txt 将项目的所有依赖写入到文件中
  • 查看dep.txt文件中jar包的重复依赖
  • 最后发现是由于项目本身依赖了v7包,MapboxSDK也引用了v7包,所以在引入 7.4.0 版本的Mapbox包是需要这样写
implementation('com.mapbox.mapboxsdk:mapbox-android-sdk:7.4.0') {
    exclude group: 'com.android.support'
}
复制代码
  • 如果引入的是 8.0 版本以上的jar包,同时还引入了 com.android.support:design 的话,则不会报上面的错误,会在运行项目时提示facebook的soloader下的Api18TraceUtils类重复
AGPBI: {"kind":"error","text":"Program type already present: com.facebook.soloader.Api18TraceUtils","sources":[{}],"tool":"D8"}
复制代码
  • 所以如果是引入 8.0 版本的包时
implementation('com.mapbox.mapboxsdk:mapbox-android-sdk:8.1.0') {
    exclude group: 'com.android.support'
}
implementation ('com.android.support:design:25.3.1') {
    exclude module: 'conceal'
}
复制代码
  • 如果还需要引入Mapbox的语言本地化jar包时,需要这样写
//Mapbox语言本地化
implementation('com.mapbox.mapboxsdk:mapbox-android-plugin-localization-v8:0.12.0-SNAPSHOT') {
    exclude group: 'com.mapbox.mapboxsdk', module: 'mapbox-android-sdk'
    exclude group: 'com.android.support'
}
复制代码
原文  https://juejin.im/post/5dc3cdacf265da4d2c5ea380
正文到此结束
Loading...