每次集成第三方sdk都很蛋疼,一堆冲突,这里做个解决冲突的记录。
1. error: duplicate value for resource 'attr/remove_mode' with config
第三方aar中的attr
命名与主项目里的自定义控件attr
命名冲突,修改主项目的自定义控件attr
命名即可
2. <item> inner element must either be a resource reference or empty.
旧版本id定义是这样的:
<item name="xxx" type="id">false</item>
新版本id定义是这样的:
<item type="id" name="id_name" />
也可以降级
gradle
到3.0及以下,但是不推荐
3. Manifest merger failed with multiple errors, see logs
build日志不是很全,这里使用命令查看详细日志
./gradlew assembleDebug --stacktrace --debug
编译日志中搜索关键字Merging result
可以定位到
Merging result: ERROR
/Users/xxx/AndroidManifest.xml:46:5-79 Warning:
Element uses-permission#android.permission.ACCESS_FINE_LOCATION at AndroidManifest.xml:46:5-79 duplicated with element declared at AndroidManifest.xml:40:5-79
/Users/xxx/AndroidManifest.xml Error:
uses-sdk:minSdkVersion 16 cannot be smaller than version 17 declared in library [xxxx.aar] /Users/xxx/.gradle/caches/transforms-1/files-1.1/xxxx.aar/01eb0f6c47002252569dda697eacd98e/AndroidManifest.xml as the library might be using APIs not available in 16
Suggestion: use a compatible library with a minSdk of at most 16,
or increase this project's minSdk version to at least 17,
or use tools:overrideLibrary="com.xxx" to force usage (may lead to runtime failures)
可以看出是aar中的minSdk
和主项目的minSdkVersion
不一致,将两者修改为一致即可
4. FileProvider
冲突
同3查看编译日志,可以定位到
Merging result: ERROR
/Users/xxx/AndroidManifest.xml:46:5-79 Warning:
Element uses-permission#android.permission.ACCESS_FINE_LOCATION at AndroidManifest.xml:46:5-79 duplicated with element declared at AndroidManifest.xml:40:5-79
/Users/xxx/AndroidManifest.xml:435:13-68 Error:
Attribute provider#android.support.v4.content.FileProvider@authorities value=(@string/file_provider_authorities) from AndroidManifest.xml:435:13-68
is also present at [xxxx.aar] AndroidManifest.xml:19:13-64 value=(com.xxx.fileprovider).
Suggestion: add 'tools:replace="android:authorities"' to <provider> element at AndroidManifest.xml:433:9-441:20 to override.
/Users/xxx/AndroidManifest.xml:440:17-51 Error:
Attribute meta-data#android.support.FILE_PROVIDER_PATHS@resource value=(@xml/file_paths) from AndroidManifest.xml:440:17-51
is also present at [xxxx.aar] AndroidManifest.xml:24:17-50 value=(@xml/filepaths).
Suggestion: add 'tools:replace="android:resource"' to <meta-data> element at AndroidManifest.xml:438:13-440:54 to override.
主项目的FileProvider
与aar
里的FileProvider
冲突,修改主项目里的FileProvider
,新建自定类MyFileProvider
继承 FileProvider
,
重新定义在manifest中
即可
5. style attribute 'attr/preferenceTheme (aka com.xxx:attr/preferenceTheme)' not found.
删除aar中values.xml
的preferenceTheme
6. error: '1' is incompatible with attribute tl_textBold (attr) enum [BOTH=2, NONE=0, SELECT=1].
aar中和主项目使用了同样的第三方库,自定义控件的tl_textBold
一个用的是integer
,一个用的是enum
,手动改一下就好了
7. error: resource color/_f8f8f8 (aka com.xxxx:color/_f8f8f8) not found.
颜色缺失,手动加上_f8f8f8吧
8. Program type already present: MTT.ThirdAppInfoNew
第三方aar和主项目都集成了腾讯x5
,删除其中之一即可
- 如果是手动
jar
包集成,删除冲突对应的jar
包即可 - 如果是手动
aar
包集成,用压缩软件打开aar
,删除冲突的jar - 如果是通过远程依赖方式集成,可以通过
exclude
排除冲突的库
api ('com.xxx.xxx:xxxxxx:1.0.0'){
exclude(module:'alicloud-android-utdid')
exclude(module:'alicloud-android-httpdns')
exclude(module:'gson')
}
- 如果冲突的库版本不一致,需要降级或升级库保证版本一致,然后排除冲突的库
网友评论