Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
新创建的Android库模块与图标和版本冲突_Android_Android Studio_Android Library - Fatal编程技术网

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

新创建的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-

我创建了一个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”'以覆盖

我知道,通过在清单的应用程序标记中添加
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!我很高兴它能帮上忙。你提出问题的时机再好不过了,因为我最近一直在研究这个问题。