2017-07-17 82 views
1

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

清单合并失败:从[com.android属性meta-data#[email protected]值=(25.3.1) .support:cardview-v7:25.3.1] AndroidManifest.xml:24:9-31 也出现在[com.android.support:appcompat-v7:26.0.0-alpha1] AndroidManifest.xml:27:9- 38值=(26.0.0-alpha1)。 建议:在AndroidManifest.xml:22:5-24:34的元素中添加'tools:replace =“android:value”'以覆盖。

清单合并失败:26::属性应用@图标值=从AndroidManifest.xml中(@绘制/ ic_launcher)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"到清单中的应用程序标签将解决这个问题,但因为它是一个图书馆,我不想强​​迫开发人员为每一个项目做到这一点。

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

有没有解决从我的库项目这个矛盾的方法吗?

+1

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

+0

解决了它。谢谢。请添加,作为答案:) @AndyDeveloper – Dinuka

+0

欢迎先生:)我把它作为一个答案:) –

回答

1

我与框架兼容性问题在库模块处理的首选方式是编译库对一个给定的版本(在你的情况下支持库V25),但不包括图书馆在编译的输出。


通常情况下,dependencies将包括:

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

这条线做三件事情:

  • 它可以让你的代码中使用的类和方法在该库
  • 编译进入库输出AAR文件的那些类和方法
  • 这意味着使用您的库人有权访问他们没有宣布他们在应用程序的文件的build.gradle

第二点是冲突可以进来,


我的首选方式是使用provided关键字这样以包括外部dependencies到库模块:

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

这是轻微LY不同以上:

  • 它可以让你的代码中使用的类和方法(如上)
  • 不会编译类进库输出AAR文件
  • 它告诉图书馆用户/开发的类必须在应用程序的构建gradle这个文件中提供
  • 这意味着使用你的库的人没有访问类,而不会增加在应用程序的的build.gradle依赖自己

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

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

一些额外的链接:


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

总结:

  • 我们构建库对1版
  • 用户必须提供他们的项目依赖

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

+1

谢谢你的综合答案我的天哪,爱我从它学到的所有新事物。我接受它作为答案。再次感谢Richard! – Dinuka

+0

我很高兴它可以帮助。由于我最近一直在处理这个问题,所以你的问题的时间不会更好。 –

+0

哈哈我明白了。好东西然后:)快乐的编码,好先生! – Dinuka

0

你可以添加一个wiki说它应该排除你的图书馆的AppCompat版本。

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

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

1

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