我创建了一个android库模块并将其托管在我的Github上。但是,该库与Android Studio项目的图标和版本冲突。当附加到我的Android项目的gradle时,会显示以下错误:
清单合并失败:来自[com.android.support:cardview-v7:25.3.1] AndroidManifest.xml:24:9-的属性meta-data#android.support.VERSION@value value =(25.3.1) 31 也出现在[com.android.support:appcompat-v7:26.0.0-alpha1] AndroidManifest.xml:27:9-38 value =(26.0.0-alpha1)。 建议:添加'工具:replace =" android:value"'到AndroidManifest.xml:22:5-24:34的元素覆盖。
和
清单合并失败:来自AndroidManifest.xml的属性应用程序@ icon value =(@ drawable / ic_launcher):26:9-45 也出现在[com.github.dinukapj:ATM-EditText:1.2] AndroidManifest.xml:13:9-43 value =(@ mipmap / ic_launcher)。 建议:添加'工具:replace =" android:icon"'到AndroidManifest.xml:23:5-305:19的元素覆盖。
我了解通过将tools:replace="android:value"
和tools:replace="android:icon"
添加到清单的应用程序代码中可以解决此问题,但由于它是一个库,我不想强迫开发人员为每个项目做这件事。
我的图书馆:https://github.com/dinukapj/ATM-EditText/
有没有办法从我的图书馆项目解决这个冲突?
答案 0 :(得分:1)
您正在使用lib项目SDK版本25,主项目版本是26,因此它们相互冲突。尝试使用25来更改主项目的版本,这将解决您的问题。
答案 1 :(得分:1)
我在库模块中处理框架兼容性问题的首选方法是针对给定版本编译库(在您的案例中为Support Lib v25),但不包含库在编译输出中。
通常dependencies
包括:
compile 'com.android.support:appcompat-v7:25.3.1'
这一行做了三件事:
第二点是冲突可以进入的地方。
我首选的方法是使用dependencies
关键字将外部provided
包含到库模块中,如下所示:
provided 'com.android.support:appcompat-v7:25.3.1'
这与上述略有不同:
这很好的部分是使用您的库的开发人员可以依赖于他们想要的任何(兼容)版本的外部框架,例如:在你的情况下,他们会在他们的应用程序的build.gradle中包含以下内容:
compile 'com.android.support:appcompat-v7:26.0.0'
一些额外的链接:
此技术最适合于在任何情况下很可能包含在应用程序中的库,例如Android支持库,GSON等
总结:
您的用户可以随意使用他们想要的任何库版本。
答案 2 :(得分:0)
你可以添加一个wiki,说它应该排除你的库的AppCompat版本。
compile (project(":ATM-EditText")){
exclude module: 'appcompat-v7'
exclude group: 'com.android.support'
}
这不会要求您的用户在清单中添加工具属性。