新创建的Android库模块与图标和版本冲突
我创建了一个android库模块,并将其托管在我的Github上。但是,该库与Android Studio项目的图标和版本冲突。当附加到我的Android项目的渐变时,将显示以下错误: 清单合并失败:属性元数据#android.support。VERSION@value值=(25.3.1)来自[com.android.support:cardwiew-v7:25.3.1]AndroidManifest.xml:24:9-31 也出现在[com.android.support:appcompat-v7:26.0.0-alpha1]AndroidManifest.xml:27:9-38 value=(26.0.0-alpha1)上。 建议:在AndroidManifest.xml:22:5-24:34处的元素中添加'tools:replace=“android:value”'以覆盖 及 清单合并失败:属性application@icon值=(@drawable/ic_launcher)来自AndroidManifest.xml:26:9-45 也出现在[com.github.dinukapj:ATM EditText:1.2]AndroidManifest.xml:13:9-43 value=(@mipmap/ic_launcher)。 建议:在AndroidManifest.xml:23:5-305:19处的元素中添加'tools:replace=“android:icon”'以覆盖 我知道,通过在清单的应用程序标记中添加新创建的Android库模块与图标和版本冲突,android,android-studio,android-library,Android,Android Studio,Android Library,我创建了一个android库模块,并将其托管在我的Github上。但是,该库与Android Studio项目的图标和版本冲突。当附加到我的Android项目的渐变时,将显示以下错误: 清单合并失败:属性元数据#android.support。VERSION@value值=(25.3.1)来自[com.android.support:cardwiew-v7:25.3.1]AndroidManifest.xml:24:9-31 也出现在[com.android.support:appcompat-
tools:replace=“android:value”和tools:replace=“android:icon”
可以解决这个问题,但由于它是一个库,我不想强迫开发人员对每个项目都这样做
我的图书馆:
有没有办法从“我的库”项目中解决此冲突?您可以添加一个wiki,说明它应该排除库的AppCompat版本,类似这样的内容
compile (project(":ATM-EditText")){
exclude module: 'appcompat-v7'
exclude group: 'com.android.support'
}
这不会要求用户在清单中添加工具属性 您使用的是lib project SDK版本25,而主项目版本是26,因此相互冲突。尝试使用25更改main project的版本,这将解决您的问题。我处理库模块中框架兼容性问题的首选方法是根据给定版本编译库(在您的情况下,支持Lib v25),但不在编译输出中包含库
通常,依赖项包括:
compile 'com.android.support:appcompat-v7:25.3.1'
这一行有3个功能:
- 它允许您的代码使用该库中的类和方法
- 它将这些类和方法编译到库输出AAR文件中
- 这意味着任何使用您的库的人都可以访问它们,而无需在应用程序的build.gradle文件中声明它们
第二点是冲突可能发生的地方
我的首选方法是使用提供的关键字将外部依赖项包含到库模块中,如下所示:
provided 'com.android.support:appcompat-v7:25.3.1'
这与上述内容略有不同:
- 它允许您的代码使用类和方法(如上所述)
- 它不会将类编译到库输出AAR文件中
- 它告诉库的用户/开发人员必须在应用程序的buildgradle文件中提供这些类
- 这意味着,如果不在应用程序的build.gradle中添加依赖项,使用库的任何人都无法访问这些类
很好的一点是,使用您的库的开发人员可以依赖于他们想要的外部框架的任何(兼容)版本,例如,在您的情况下,他们将在其应用程序的build.gradle中包含以下内容:
compile 'com.android.support:appcompat-v7:26.0.0'
一些额外的链接:
这种技术最适合于在任何情况下都很可能包含在应用程序中的库,例如Android Support libs、GSON等
总结如下:
- 我们根据1版本构建库
- 用户必须在其项目中提供依赖项
然后,用户可以自由使用任何他们想要的库版本。您使用的是lib project sdk版本25,而主项目版本是26,因此相互冲突。尝试使用25更改主项目的版本,这将解决您的问题。这解决了问题。非常感谢。请加上这句话作为回答:)@AndyDeveloperwelcome先生:)我加上这句话作为回答:)谢谢你的全面回答,我的天哪,我喜欢从中学到的所有新东西。我接受了这个答案。再次感谢Richard!我很高兴它能帮上忙。你提出问题的时机再好不过了,因为我最近一直在研究这个问题。