扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
这篇文章给大家介绍Android中添加fragment后版本不兼容如何解决,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
成都创新互联公司是一家集网站建设,琼中黎族企业网站建设,琼中黎族品牌网站建设,网站定制,琼中黎族网站建设报价,网络营销,网络优化,琼中黎族网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
Fragment的产生与介绍
Android运行在各种各样的设备中,有小屏幕的手机,超大屏的平板甚至电视。针对屏幕尺寸的差距,很多情况下,都是先针对手机开发一套App,然后拷贝一份,修改布局以适应平板神马超级大屏的。难道无法做到一个App可以同时适应手机和平板么,当然了,必须有啊。Fragment的出现就是为了解决这样的问题。你可以把Fragment当成Activity的一个界面的一个组成部分,甚至Activity的界面可以完全有不同的Fragment组成,更帅气的是Fragment拥有自己的生命周期和接收、处理用户的事件,这样就不必在Activity写一堆控件的事件处理的代码了。更为重要的是,你可以动态的添加、替换和移除某个Fragment。
昨天学习了下Android的Fragment。按照官网的教程,新建了一个类BlankFragment,继承自Fragment。然后编译的时候就出错了:
Error:Execution failed for task ':app:processDebugManifest'. > Manifest merger failed : Attribute meta-data#android.support.VERSION@value value=(26.0.0-beta1) from [com.android.support:design:26.0.0-beta1] AndroidManifest.xml:28:13-41 is also present at [com.android.support:support-v4:26.1.0] AndroidManifest.xml:28:13-35 value=(26.1.0). Suggestion: add 'tools:replace="android:value"' toelement at AndroidManifest.xml:26:9-28:44 to override.
搜了一下,七七八八说什么的都有。最不靠谱的一个就是说什么把manifest文件里的标签从android:name改成class的。看日志明显是和版本有关啊!后来终于找到个和版本兼容有关的解决方案,要在app目录下的build.gradle里添加如下代码才可以:
configurations.all { resolutionStrategy.eachDependency { DependencyResolveDetails details -> def requested = details.requested if (requested.group == 'com.android.support') { if (!requested.name.startsWith("multidex")) { details.useVersion '26.0.0-beta1' } } } }
试了一下确实好了。但不能满足于此。
注意到,就在添加的这段代码上面,描述的是工程依赖的库:
dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:26.0.0-beta1' implementation 'com.android.support.constraint:constraint-layout:1.0.2' implementation 'com.android.support:design:26.0.0-beta1' implementation 'com.android.support:support-v4:26.1.0' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:0.5' androidTestImplementation 'com.android.support.test.espresso:espresso-core:2.2.2' }
而这一行下面有红线:
implementation 'com.android.support:appcompat-v7:26.0.0-beta1'
鼠标指上去提示:
All com.android.support libraries must use the exact same version specification (mixing versions can lead to runtime crashes). Found versions 26.1.0, 26.0.0-beta1. Examples include com.android.support:support-compat:26.1.0 and com.android.support:animated-vector-drawable:26.0.0-beta1
这不是说的很明白:所有依赖com.android.support的库必须使用一样的版本!看看Dependency里,com.android.support:appcompat-v7:26.0.0-beta1和com.android.support:support-v4:26.1.0两个版本就是矛盾的啊!看一下git的记录,26.1.0这一行就是新加的,肯定就是新建BlankFragment类的时候AndroidStudio自动添加的。再回头看看出错日志,说的不也是同一个意思?
不得不吐槽一下AndroidStudio,你既然要自动加版本依赖,就把版本兼容性也一起检查了呗。不然还不如不要加,让我们自己来。最讨厌这种半自动化的东西,最坑人。
关于Android中添加fragment后版本不兼容如何解决就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流