国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

關于Android添加fragment后版本不兼容問題

2019-12-12 01:26:07
字體:
來源:轉載
供稿:網友

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"' to <meta-data> element 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,你既然要自動加版本依賴,就把版本兼容性也一起檢查了唄。不然還不如不要加,讓我們自己來。最討厭這種半自動化的東西,最坑人。

另外,gradle文件的語法也挺有意思。注釋是C/C++的風格,函數聲明是Python的風格,Lambda表達式又有點像C#的。

總結

以上所述是小編給大家介紹的關于Android添加fragment后版本不兼容問題,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 古交市| 宣威市| 稻城县| 延长县| 葫芦岛市| 余庆县| 遂川县| 延边| 沐川县| 正阳县| 萨嘎县| 金塔县| 马关县| 大悟县| 屏山县| 井冈山市| 大同市| 郁南县| 邳州市| 香河县| 仁怀市| 乾安县| 甘孜县| 巫溪县| 大方县| 比如县| 灌阳县| 舟曲县| 雷山县| 万载县| 呼和浩特市| 兴和县| 张家界市| 三都| 湛江市| 达州市| 通海县| 垫江县| 遂川县| 右玉县| 石家庄市|