AndroidStudio的build.gradle文件配置以及導(dǎo)入支持包的問題

使用AndroidStudio的過程中,對build.gradle文件配置以及導(dǎo)入支持包的問題的一些總結(jié)讳癌,在此記錄下來渠脉。有時候,頭疼的不是面對新功能無從下手,而是為了可以正常敲代碼與編譯環(huán)境作斗爭。

關(guān)于build.gradle配置

  • compileSdkVersion

    SDK的版本號旦袋,也就是API Level,例如API-19铃肯、API-20、API-21等等传蹈,一般保持最新即可押逼。

  • buildeToolVersion

    構(gòu)建工具的版本,其中包括了打包工具aapt惦界、dx等等挑格,這個一般與CompileSdkVersion對應(yīng)。
    這個工具的目錄位于..your_sdk_path/build-tools/XX.XX.XX沾歪,這個版本號一般是API-LEVEL.0.0漂彤。

  • 可以用高版本的build-tool去構(gòu)建一個低版本的sdk工程

    例如build-tool的版本為20,去構(gòu)建一個sdk版本為18的compileSdkVersion 18灾搏、buildToolsVersion "22.0.1" 這樣也是OK的显歧。

  • targetSdkVersion與minSdkVersion與清單文件中配置一樣,含義一樣确镊。

  • android:minSdkVersion

    表示APP所兼容的最低API版本,這個一般是項目初期就定好的范删,輕易不會改動蕾域。
    指明應(yīng)用程序運行所需的最小APIlevel。如果不指明的話到旦,默認是1旨巷。也就是說該應(yīng)用兼容所有的android版本。我們應(yīng)該總是聲明這個屬性添忘。如果系統(tǒng)的APIlevel低于android:minSdkVersion設(shè)定的值采呐,那么android系統(tǒng)會阻止用戶安裝這個應(yīng)用。
    報錯信息為:INSTALL_FAILED_OLDER_SDK
    如果指明了這個屬性搁骑,并且在項目中使用了高于這個API level的API斧吐, 那么會在編譯時報錯又固。

  • android:targetSdkVersion

    表示應(yīng)用程序目標(biāo)API Level的一個整數(shù),一般設(shè)置成最高的API版本煤率。如果不設(shè)置仰冠,默認值和minSdkVersion相同。
    這個屬性通知系統(tǒng)蝶糯,你已經(jīng)針對這個指定的目標(biāo)版本測試過你的程序洋只,系統(tǒng)不必再使用兼容模式來讓你的應(yīng)用程序向前兼容這個目標(biāo)版本。應(yīng)用程序仍然能在低于targetSdkVersion的系統(tǒng)上運行昼捍。
    為了讓應(yīng)用程序支持每個Android版本识虚,應(yīng)當(dāng)提高targetSdkVersion的值到最新的APIlevel,然后在對應(yīng)的平臺上徹底的測試你的應(yīng)用妒茬。

    可知担锤,targetSdkVersion這個屬性是在程序運行時期起作用的,系統(tǒng)根據(jù)這個屬性決定要不要以兼容模式運行這個程序郊闯。一般情況下妻献,應(yīng)該將這個屬性的值設(shè)置為最新的API level 值,這樣的話可以利用新版本系統(tǒng)上的新特性团赁。

關(guān)于v4育拨、v7的導(dǎo)入

  • 假如項目是APPModule,需要依賴另外兩個Module欢摄,A和B熬丧。但是ModuleA和ModuleB都需要導(dǎo)入V4包,各自在相應(yīng)的gradle文件中compile v4即可怀挠,不過最好版本保持一致析蝴,這樣是沒問題的。假如此時APP Module需要v4包绿淋,就不必引入v4了闷畸,因為在依賴ModuleA和ModuleB的時候,已經(jīng)也依賴了v4包吞滞。假如此時APP Module需要v7包佑菩,只需要在APP Module的gradle里面compile v7包就可以了,這樣并不會沖突裁赠。

  • v7里面包含了v4的所有內(nèi)容殿漠,所以如果導(dǎo)入了v7,就不用再導(dǎo)入v4佩捞。

  • 如果原來項目中引入的v7版本是19绞幌,后來想升級到23,直接改相應(yīng)的數(shù)字就可以一忱,但是這個版本要存在莲蜘。同時谭确,要修改相應(yīng)的compileSdkVersion、buildeToolVersion菇夸、targetSdkVersion版本號琼富,保持一致,不然會出現(xiàn)Process 'command 'd:\Program\Android\sdk\build-tools\23.0.3\aapt.exe'' finished with non-zero exit value 1這種錯誤庄新。

錯誤類型

  • aapt.exe'' finished with non-zero exit value 1

    這種錯誤一般是由compileSdkVersion鞠眉、buildeToolVersion、targetSdkVersion這種版本號與v4或v7的版本號不一致導(dǎo)致的择诈,修復(fù)的方法就是修改這些數(shù)字械蹋,使版本號一致。當(dāng)項目中存在多個Module的時候羞芍,最好將compileSdkVersion哗戈、buildeToolVersion、targetSdkVersion等配置成一樣的荷科,防止出現(xiàn)莫名其妙的問題唯咬。

  • Multiple dex files define XXXXandroid/support/v4/aXXXX

    這種錯誤,一定是v4或v7包重復(fù)引用導(dǎo)致的畏浆,除了要看build.gradle文件的compile的支持包以外胆胰,還要看libs文件夾下是不是也有了這些支持包。相應(yīng)的刻获,如果報錯信息Multiple dex files define是這種開頭的蜀涨,一定是導(dǎo)包重復(fù)造成的,有可能重復(fù)導(dǎo)入了其他的第三方蝎毡,具體是哪個重復(fù)厚柳,從報錯信息里應(yīng)該能看出來。

  • Error: No resource found that matches the given name: attr XXXXXX

    這種錯誤一定是compileSdkVersion沐兵、buildeToolVersion别垮、targetSdkVersion這種版本號與v4或v7的版本號不一致導(dǎo)致的,修復(fù)的方法就是修改這些數(shù)字扎谎,使版本號一致宰闰。比如原來是引用的v4的19.0.0版本,后來改成23.1.1簿透,但是targetSdkVersion卻還是原來的19,這樣編譯的時候解藻,編譯的時候使用的是v4的23.1.1版本老充,但是找資源的時候,還是找的v4的19.0.0版本的螟左,就會找不到啡浊。

  • Attribute has already been defined XXXXXXXXXXXX

    這種錯誤一是重復(fù)導(dǎo)包導(dǎo)致觅够,二是自定義的屬性與系統(tǒng)中(一般是支持包中)的屬性名字重復(fù)。如果確定沒有重復(fù)導(dǎo)包巷嚣,就復(fù)制那個重復(fù)的屬性名字喘先,Android Studio中按Ctrl + H組合鍵,全局搜索廷粒,肯定可以找到自己定義的那個屬性窘拯。不要覺得自己根本沒有定義過這個屬性,因為有可能項目的其他成員定義過坝茎,或者自己忘了涤姊,都有可能發(fā)生,利用工具嗤放,相信工具思喊。一般是在attr.xml這個文件中。

  • com.android.dex.DexIndexOverflowException: Cannot merge new index XXXXXX into a non-jumbo instruction!(這個XXX數(shù)字一定大于65536)
    以及com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536”

    錯誤原因:
    這個錯誤可能在導(dǎo)入第三方的時候會出現(xiàn)次酌。
    原因是同時在工程中引入了多個第三方j(luò)ar包恨课,導(dǎo)致調(diào)用的方法數(shù)超過了android設(shè)定的65536個(DEX 64K problem),進而導(dǎo)致dex無法生成岳服,也就無法生成APK文件剂公。
    限制原因:早期的Dalvik VM內(nèi)部使用short類型變量來標(biāo)識方法的id,就有了 最大方法數(shù)的限制65536派阱。
    解決辦法有兩種:

    第一種是忽略方法數(shù)限制的檢查

    這樣做的缺點是apk無法再低版本的設(shè)備上面安裝诬留,會出現(xiàn)錯誤:INSTALL_FAILED_DEXOPT
    在App Module的build.gradle文件的android節(jié)點下添加如下代碼:

    dexOptions {
            jumboMode = true
        }
    

    第二種是分包

    通過在defaultConfig中設(shè)置multiDexEnabled可以開啟分包模式,分包之后的Dex就低于了限制數(shù)贫母,保證了正常的打包文兑。

    defaultConfig {

            multiDexEnabled=true

        }

    //這時還要 

    compile 'com.google.android:multidex:0.1' 0.1是版本號,用最新的就行腺劣。

  • 程序包org.apache.http 绿贞、org.apache.http.client.utils等不存在

    解決:在build.gradle(Module:app) 文件的android的那個括號里加上 useLibrary 'org.apache.http.legacy'

參考

總結(jié)

  • 在項目中,對于第三方的SDK或者jar等橘原,可以在build.gradle中compile的就compile籍铁,不要導(dǎo)入Module,再compile project趾断,容易出問題拒名。

  • 導(dǎo)入第三方的時候,一定要仔細參考官方文檔集成說明或者官方demo芋酌。

  • 遇到這些問題的時候增显,誰都會頭大,就這些問題脐帝,折騰了我一個多星期同云,慢慢熬糖权,去google上多看看別人的相同或相似問題,看看大神們的解答炸站,最好明白其中的道理星澳,記錄下來,看多了有時候說不定就突然把問題解決了旱易。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末禁偎,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子咒唆,更是在濱河造成了極大的恐慌届垫,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件全释,死亡現(xiàn)場離奇詭異装处,居然都是意外死亡,警方通過查閱死者的電腦和手機浸船,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門妄迁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人李命,你說我怎么就攤上這事登淘。” “怎么了封字?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵黔州,是天一觀的道長。 經(jīng)常有香客問我阔籽,道長流妻,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任笆制,我火速辦了婚禮绅这,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘在辆。我一直安慰自己证薇,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布匆篓。 她就那樣靜靜地躺著浑度,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鸦概。 梳的紋絲不亂的頭發(fā)上俺泣,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天,我揣著相機與錄音,去河邊找鬼伏钠。 笑死,一個胖子當(dāng)著我的面吹牛谨设,可吹牛的內(nèi)容都是我干的熟掂。 我是一名探鬼主播,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼扎拣,長吁一口氣:“原來是場噩夢啊……” “哼赴肚!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起二蓝,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤誉券,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后刊愚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體踊跟,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年鸥诽,在試婚紗的時候發(fā)現(xiàn)自己被綠了商玫。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡牡借,死狀恐怖拳昌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情钠龙,我是刑警寧澤炬藤,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站碴里,受9級特大地震影響沈矿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜并闲,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一细睡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧帝火,春花似錦溜徙、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至九巡,卻和暖如春图贸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工疏日, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留偿洁,地道東北人。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓沟优,卻偏偏與公主長得像涕滋,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子挠阁,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,781評論 2 354

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