Android 3.0及以上刨坑集錦

前言

本來想多挖點(diǎn)坑總結(jié)再分享出來的簿盅,但最近的坑折磨的我夠嗆轧拄,想提前分享出來幫助其它受難的小伙伴揽祥,哎,不說了紧帕。盔然。。

持續(xù)刨坑中...

1.配置ButterKnife

只需設(shè)置如下代碼即可:

    implementation 'com.jakewharton:butterknife:8.8.1'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'

在module的build.gradle 文件中設(shè)置支持插件 是嗜,添加如下代碼

apply plugin: 'com.jakewharton.butterknife'  

否則無法使用R.id.R2

2.組件化項(xiàng)目升級3.0以上后報(bào)錯(cuò)

Could not find runtime.aar (android.arch.lifecycle:runtime:1.0.0).
Searched in the following locations:
https://jcenter.bintray.com/android/arch/lifecycle/runtime/1.0.0/runtime-1.0.0.aar

    // 組件化Architecture Components
    compile "android.arch.lifecycle:runtime:1.1.1"
    compile "android.arch.lifecycle:extensions:1.1.1"
    annotationProcessor "android.arch.lifecycle:compiler:1.1.1"

3.依賴方式改變

implementation愈案、api、compileOnly等

https://blog.csdn.net/yuzhiqiang_1993/article/details/78366985?locationNum=6&fps=1

4.打開一個(gè)3.0的GitHub項(xiàng)目報(bào)錯(cuò)(使用的是3.0以下AS)

QError:This Gradle plugin requires a newer IDE able to request IDE model level 3. For Android Studio this means version 3.0+
A
(1): 升級android studio IDE的版本鹅搪。
(2):在項(xiàng)目的gradle.properties配置文件中加入以下這句:
gradle.properties中:android.injected.build.model.only.versioned = 3

5.Gradle自定義apk名稱報(bào)錯(cuò)

  • 在AS 3.0之前自定義apk名稱:
    variant.outputs.each { output ->
    def fileName = "${variant.versionName}_release.apk"
    def outFile = output.outputFile
    if (outFile != null && outFile.name.endsWith('.apk')) {
        output.outputFile =newFile(outFile.parent, fileName)
    }  
}

但是在AS 3.0之后站绪,同樣代碼自定義apk名稱卻會報(bào)錯(cuò):

Error:(56, 0) Cannot set the value of read-only property 'outputFile' for ApkVariantOutputImpl_Decorated{apkData=Main{type=MAIN, fullName=debug, filters=[]}} of type com.android.build.gradle.internal.api.ApkVariantOutputImpl.

由于3.0中outputFile變?yōu)橹蛔x,不能修改輸出的名稱所以報(bào)錯(cuò)丽柿。
解決方式:

applicationVariants.all { variant ->
    variant.outputs.all { output ->  // each 改為 all
    def fileName = "${variant.versionName}_release.apk"
    def outFile = output.outputFile
    if (outFile != null && outFile.name.endsWith('.apk')) {
        outputFileName = fileName  //  output.outputFile 改為 outputFileName 
    }    
}

each修改為all恢准,然后通過outputFileName修改生成apk的名稱。此外甫题,AS 3.0后打包完馁筐,除了apk包文件,還會多一個(gè)output.json參數(shù)文件坠非。

6.AS3.0多渠道打包報(bào)錯(cuò)

Error:All flavors must now belong to a named flavor dimension. The flavor 'xiaomi' is not assigned to a flavor dimension. Learn more at https://d.android.com/r/tools/flavorDimensions-missing-error-message.html

解決方法:

flavorDimensions "default"  
    productFlavors {  
        kuan {  
            dimension "default"  
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "kuan"]  
        }  
        xiaomi {  
            dimension "default"  
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]  
        }  
        qh360 {  
            dimension "default"  
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "qh360"]  
        }  
        baidu {  
            dimension "default"  
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu"]  
        }  
        wandoujia {  
            dimension "default"  
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]  
        }  
    }  

或者寫成:

flavorDimensions "default"  
    productFlavors {  
        kuan {dimension "default"}  
        xiaomi {dimension "default"}  
        qh360 {dimension "default"}  
        baidu {dimension "default"}  
        wandoujia {dimension "default"}  
    }  
  
    productFlavors.all {  
        flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]  
    }  

7.第三方庫導(dǎo)致support版本沖突

一般這種問題解決方法是:在指定的有沖突的庫的依賴處敏沉,添加exclude group: 'com.android.support',可以將沖突庫不包含在編譯,如:

compile('xx.xxx.xxxxx:xxxxx:1.5.5') {
    exclude group: 'com.android.support'
}

但是問題是我不知道哪個(gè)第三方庫沖突盟迟,不可能一個(gè)個(gè)檢查吧秋泳?

這時(shí)候只需要在gradle文件中添加如下代碼,讓所有的第三方包強(qiáng)制使用指定版本的support包:

configurations.all {
    resolutionStrategy.eachDependency { DependencyResolveDetails details ->
        def requested = details.requested
        if (requested.group == 'com.android.support') {
            if (!requested.name.startsWith("multidex")) {
                details.useVersion '26.1.0'
            }
        }
    }
} 

同時(shí)攒菠,需要注意的是迫皱,在自己寫第三方庫給別人用的時(shí)候,對于support包的依賴方式改成provided(或者compileOnly辖众,gradle3.0)卓起,這樣不會把support打包,方便其他人使用赵辕。

8.組件化項(xiàng)目報(bào)錯(cuò) Manifest merger failed

這個(gè)錯(cuò)誤是我手賤升級AS3.1.2后既绩,報(bào)出來的


崩潰啊

什么玩意

上網(wǎng)搜索好幾個(gè)夜晚。还惠。。沒有找到解決方法私杜,直到我發(fā)現(xiàn)了

好開心

新大陸蚕键,騷操作啊Kゴ狻B喙狻!
可以發(fā)現(xiàn)因?yàn)槲以O(shè)置了tools:replace="android:exported"铝耻,而我在Manifest中沒有給四大組件設(shè)置過android:exported屬性誊爹,沒升級前沒報(bào)這個(gè)錯(cuò)。瓢捉。频丘。

這里!就是這里

去掉后就可以正常運(yùn)行啦E萏搂漠!:)

額外說一句哈,關(guān)于這個(gè)android:exported屬性的

  • 四大組件 Activity某弦,Service桐汤,Provider,Receiver 四大組件中都會有這么一個(gè)屬性靶壮。
  • 它的主要作用是:是否支持其它應(yīng)用調(diào)用當(dāng)前組件怔毛。
  • 默認(rèn)值:如果包含有intent-filter 默認(rèn)值為true; 沒有intent-filter默認(rèn)值為false。

詳細(xì)的可以看這里:
https://blog.csdn.net/watermusicyes/article/details/46460347

9.矢量圖報(bào)錯(cuò)

Q: A failure occurred while executing com.android.build.gradle.tasks.MergeResources$FileGenerationWorkAction. Error while processing C:\androidProject\xxx\app\src\main\res\drawable\ic_storage_24dp.xml : Can't process attribute android:fillColor="@color/color_storage": references to other resources are not supported by build-time PNG generation. See http://developer.android.com/tools/help/vector-asset-studio.html for details.

A: 問題出在矢量圖腾降,2.0+的Android Studio需要如下進(jìn)行設(shè)置:

defaultConfig{  
   vectorDrawables.useSupportLibrary = true  
} 

10.分包multidex問題

在依賴中添加了MultiDex后拣度,報(bào)錯(cuò)提示包重復(fù)。

// 添加MultiDex支持庫的依賴
api 'com.android.support:multidex:1.0.1'

找了好久,也沒發(fā)現(xiàn)在哪加了1.0.2的包啊蜡娶。混卵。。尼瑪

后來終于發(fā)現(xiàn)窖张,在3.0中只要設(shè)置

multiDexEnabled true

就會自動(dòng)添加上述兩個(gè)1.0.2的包幕随。

  • Android 5.0以下的版本

Android 5.0(API leve 21)之前的系統(tǒng)使用Dalvik執(zhí)行應(yīng)用程序代碼。默認(rèn)情況下,Dalvik限制一個(gè)apk只有一個(gè)Dex文件宿接。為了繞過這個(gè)限制, 我們可以使用multidex support library,它成為我們APK的主要DEX文件的一部分,負(fù)責(zé)管理我們APK訪問其他DEX文件和代碼赘淮。
注意: 如果咱的項(xiàng)目minSdkVersion是20或更低,運(yùn)行到Android 4.4(API leve 20)或者更低版本的設(shè)備上時(shí)需要禁用AndroidStudio的即時(shí)運(yùn)行

  • Android 5.0和更高版本

Android 5.0(API leve 21)和更高的系統(tǒng)使用runtime是ART ,原生支持從應(yīng)用的apk文件加載多個(gè)DEX文件。ART在安裝應(yīng)用時(shí)預(yù)編譯應(yīng)用程序,會掃描多個(gè)classes(..N).dex文件編譯成一個(gè).oat的文件睦霎。更多Android5.0 runtime的更多信息,請參見即時(shí)運(yùn)行-instant-run梢卸。
注意: 如果你使用即時(shí)運(yùn)行 , AndroidStudio自動(dòng)配置你的應(yīng)用程序,你應(yīng)用程序的minSdkVersion應(yīng)該設(shè)置為21或更高。因?yàn)榧磿r(shí)只工作在你APP的Debug版本,你任然需要配置你的release版本構(gòu)建時(shí)用multidex避免64k的限制副女。

綜上蛤高,multiDexEnabled true即可解決問題。另外碑幅,別忘了

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(base);
    }

11.Android Studio下載插件超時(shí)

File->Settings->Apparence & Behavior->System Settings->Updates->use secure connnection 勾去掉


12.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末戴陡,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子沟涨,更是在濱河造成了極大的恐慌恤批,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件裹赴,死亡現(xiàn)場離奇詭異喜庞,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)棋返,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進(jìn)店門延都,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人懊昨,你說我怎么就攤上這事窄潭。” “怎么了酵颁?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵嫉你,是天一觀的道長。 經(jīng)常有香客問我躏惋,道長幽污,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任簿姨,我火速辦了婚禮距误,結(jié)果婚禮上簸搞,老公的妹妹穿的比我還像新娘。我一直安慰自己准潭,他們只是感情好趁俊,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著刑然,像睡著了一般寺擂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上泼掠,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天怔软,我揣著相機(jī)與錄音,去河邊找鬼择镇。 笑死挡逼,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的腻豌。 我是一名探鬼主播家坎,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼饲梭!你這毒婦竟也來了乘盖?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤憔涉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后析苫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體兜叨,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年衩侥,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了国旷。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,064評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡茫死,死狀恐怖跪但,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情峦萎,我是刑警寧澤屡久,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站爱榔,受9級特大地震影響被环,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜详幽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一筛欢、第九天 我趴在偏房一處隱蔽的房頂上張望浸锨。 院中可真熱鬧,春花似錦版姑、人聲如沸柱搜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽聪蘸。三九已至,卻和暖如春炒嘲,著一層夾襖步出監(jiān)牢的瞬間宇姚,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工夫凸, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留浑劳,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓夭拌,卻偏偏與公主長得像魔熏,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子鸽扁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,510評論 25 707
  • afinalAfinal是一個(gè)android的ioc蒜绽,orm框架 https://github.com/yangf...
    wgl0419閱讀 6,263評論 1 9
  • 金色的人兒在起伏的山巒上奔跑著 像一滴雨珠從傘脊上滑落似的 像孩童從蹦床上一躍而起又淹沒在彩色的氣泡中 風(fēng)從雙臂間...
    云堤之外閱讀 248評論 1 4
  • 原創(chuàng)聲明:本文參加“讀經(jīng)典好書,寫讀書感悟”活動(dòng)本人承諾桶现,文章內(nèi)容為原創(chuàng)躲雅,且未在其它平臺發(fā)表過。 ?魯賓遜...
    兔子2222閱讀 570評論 0 0
  • 城關(guān)鎮(zhèn)
    和為貴0608閱讀 166評論 0 0