当前位置: 首页 > 知识库问答 >
问题:

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

帅银龙
2023-03-14

我创建了一个android库模块,并将其托管在我的Github上。但是,该库与Android Studio项目的图标和版本冲突。当附加到我的Android项目gradle时,会显示以下错误:

清单合并失败:属性元数据#android.support.VERSION@value值=(25.3.1)来自[com.android.support: cardview v7:25.3.1]Androidanifest.xml:24: 9-31也存在于[com.android.support: appcompat-v7:26.0.0-alpha1]Android/>:9-38值=(26.0.0-alpha1)。建议:在Androidanifest.xml:22: 5-24:34添加“工具:替换=”Android:值“到元素中覆盖。

清单合并失败:属性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的元素中添加'tools:replace=“android:icon”'。xml:23:5-305:19来覆盖。

我知道,通过在清单的应用程序标记中添加tools:replace=“android:value”和tools:replace=“android:icon”可以解决这个问题,但由于它是一个库,我不想强迫开发人员对每个项目都这样做。

我的图书馆:https://github.com/dinukapj/ATM-EditText/

有没有办法从我的库项目中解决此冲突?


共有3个答案

周宏胜
2023-03-14

您可以添加一个wiki,该wiki表示它应该排除库的AppCompat版本,类似这样的内容。

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

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

裴硕
2023-03-14

您使用的是libprojectsdkversion25,而主项目版本是26,因此相互冲突。尝试使用25更改主项目的版本,这将解决您的问题。

连德水
2023-03-14

我处理库模块中框架兼容性问题的首选方法是根据给定版本编译库(在您的例子中是Support 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文件
  • 它告诉库的用户/开发人员必须在应用程序的构建gradle文件中提供类
  • 这意味着任何使用你的库的人都不能访问类,除非在应用程序的build.gradle中添加依赖项

很好的一点是,使用您的库的开发人员可以依赖于他们想要的外部框架的任何(兼容)版本,例如,在您的情况下,他们将在其应用程序的构建中包含以下内容。格拉德尔:

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

一些额外的链接:

  • Android开发者记录构建依赖关系

这种技术最适合于在任何情况下都很可能包含在应用程序中的库,例如Android Support libs、GSON等

总结如下:

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

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

 类似资料:
  • 我正在开发一个应用程序和一个库(Android模块)。它们在不交互时没有问题:在导入库后,Android Studio搞乱了设置,我无法恢复。 和其他98个类似的:都与主题问题有关。 还有其他消息引用值、,例如:

  • 我的maven构建很好,能够从CLI运行groovy。但是,如果我试图在IntelliJ Idea(version15 community edition)中运行我的groovy类,它会给我以下错误。 这是我在系统中安装的groovy版本。 如果有人知道这件事,请告诉我。

  • 创建和配置你的版本库 在“版本库开发策略”一节,我们我们看了一些在创建和配置Subversion版本库之前需要做的重要决定,现在我们最终要干活了!在本小节,我们要看看如何真实的创建一个Subversion版本库,并配置它在特定版本库事件执行自定义动作。 创建版本库 创建一个 Subversion 版本库出乎寻常的简单。 Subversion 提供的svnadmin 工具,有一个执行这个功能的子命令

  • 这是我的设置:我有一个Android库,在导出时创建一个ar,我有一个Android应用程序,使用库作为模块(这是导入本地arr文件的唯一方法)。 要将aar文件作为模块导入我的Android应用程序中,我单击- 我经常更新我的库,因为我目前正在开发它,我想经常测试它。问题是我不知道如何更新我的Android应用程序项目中的模块... 我现在所做的是,我在我的Android库项目中发出一个来创建新

  • 问题内容: 我正在尝试制作一个从串行端口读取数据的电子应用程序(https://electron.atom.io/)。我是Web技术的新手,我知道一些javascript,但是我是c ++专家。 所以我从github上拉了他们的快速入门, 有了这个容易的工作,我试图用 安装了该文件并通过测试文件正常运行后,我尝试将两者结合起来并放入index.html文件中。有了这个我得到这个错误: 任何想法如何

  • 我目前正在通过提供的迁移指南将我们的项目迁移到新的gradle插件(3.0.0): https://developer.android.com/studio/preview/features/new-android-plugin-migration.html 在我们的Android项目中,我们有一个库模块和两个应用程序模块。目前的库模块没有味道,只有调试功能 我发现库模块的构建类型必须与应用程序模