新创建的Android库模块与图标和版本冲突

时间:2017-07-17 03:29:01

标签: android android-studio android-library

我创建了一个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/

有没有办法从我的图书馆项目解决这个冲突?

3 个答案:

答案 0 :(得分:1)

您正在使用lib项目SDK版本25,主项目版本是26,因此它们相互冲突。尝试使用25来更改主项目的版本,这将解决您的问题。

答案 1 :(得分:1)

我在库模块中处理框架兼容性问题的首选方法是针对给定版本编译库(在您的案例中为Support Lib v25),但不包含库在编译输出中。

通常dependencies包括:

compile 'com.android.support:appcompat-v7:25.3.1'

这一行做了三件事:

  • 它允许您的代码使用该库中的类和方法
  • 将这些类和方法编译成库输出AAR文件
  • 这意味着使用您图书馆的任何人都可以访问它们,而无需在应用程序的build.gradle文件中声明它们

第二点是冲突可以进入的地方。

我首选的方法是使用dependencies关键字将外部provided包含到库模块中,如下所示:

provided 'com.android.support:appcompat-v7:25.3.1'

这与上述略有不同:

  • 它允许您的代码使用类和方法(如上所述)
  • 不会将类编译到库输出AAR文件
  • 它告诉图书馆的用户/开发人员必须在应用程序的构建gradle文件中提供
  • 这意味着使用您图书馆的任何人都无法访问这些课程,而无需在应用程序的build.gradle中添加依赖项

这很好的部分是使用您的库的开发人员可以依赖于他们想要的任何(兼容)版本的外部框架,例如:在你的情况下,他们会在他们的应用程序的build.gradle中包含以下内容:

compile 'com.android.support:appcompat-v7:26.0.0'

一些额外的链接:

此技术最适合于在任何情况下很可能包含在应用程序中的库,例如Android支持库,GSON等

总结:

  • 我们针对1个版本构建库
  • 用户必须在其项目中提供依赖

您的用户可以随意使用他们想要的任何库版本。

答案 2 :(得分:0)

你可以添加一个wiki,说它应该排除你的库的AppCompat版本。

compile (project(":ATM-EditText")){
        exclude module: 'appcompat-v7'
        exclude group: 'com.android.support'
}

这不会要求您的用户在清单中添加工具属性。