安卓源碼項(xiàng)目進(jìn)行g(shù)radle編譯改造常見問題解決

最近把依賴安卓源碼編譯環(huán)境的多個(gè)項(xiàng)目切換到gradle編譯環(huán)境捕仔,需要把一些項(xiàng)目改成lib庫依賴墙懂,基本思路是把通用的代碼和第三方j(luò)ar放在一個(gè)utils庫項(xiàng)目中橡卤, 其他子項(xiàng)目改為lib庫,子項(xiàng)目統(tǒng)一依賴utils损搬,主項(xiàng)目依賴9個(gè)子項(xiàng)目碧库,解除子項(xiàng)目對(duì)主頁面的依賴,最后gradle編譯成一個(gè)apk巧勤。

我整理了一些遇到的常見問題嵌灰,希望對(duì)大家有幫助。
首先注意的gradle編譯比mm方式編譯對(duì)項(xiàng)目質(zhì)量的要求更嚴(yán)格颅悉,特別是編譯release版本沽瞭,很多命名不規(guī)范的資源需要修改, strings缺少的翻譯等需要對(duì)齊剩瓶。

問題一:

Error:(26, 9) Attribute application@icon value=(@drawable/logo) from AndroidManifest.xml:26:9
Error:(28, 9) Attribute application@theme value=(@style/ThemeActionBar) from AndroidManifest.xml:28:9
is also present at XXXX-trunk:XXXXLib:unspecified:15:9 value=(@style/AppTheme)
Suggestion: add 'tools:replace="android:theme"' to <application> element at AndroidManifest.xml:24:5 to override
Error:Execution failed for task ':XXXX:processDebugManifest'.

Manifest merger failed with multiple errors, see logs

原因:
AS的Gradle插件默認(rèn)會(huì)啟用Manifest Merger Tool驹溃,若Library項(xiàng)目中也定義了與主項(xiàng)目相同的屬性(例如默認(rèn)生成的Android:icon和android:theme),則此時(shí)會(huì)合并失敗延曙,并報(bào)上面的錯(cuò)誤吠架。

解決方法有以下2種:
方法1:在Manifest.xml的application標(biāo)簽下添加tools:replace="android:icon, android:theme"(多個(gè)屬性用,隔開,并且記住在manifest根標(biāo)簽上加入xmlns:tools="http://schemas.android.com/tools"搂鲫,否則會(huì)找不到namespace哦)
方法2:在build.gradle根標(biāo)簽上加上useOldManifestMerger true (懶人方法)

參考官方介紹:
http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger

問題二:

Library Project里面的BuildConfig.DEBUG永遠(yuǎn)都是false傍药。這是Android Studio的一個(gè)已知問題,某Google的攻城獅說魂仍,Library projects目前只會(huì)生成release的包拐辽。
Issue 52962: https://code.google.com/p/android/issues/detail?id=52962

解決方法:(某Google的攻城獅推薦的方法)
Workaround: instaed of BuildConfig.DEBUG create another boolean variable at lib-project's e.g. BuildConfig.RELEASE and link it with application's buildType.
https://gist.github.com/almozavr/d59e770d2a6386061fcb

參考stackoverflow上的這篇帖:
http://stackoverflow.com/questions/20176284/buildconfig-debug-always-false-when-building-library-projects-with-gradle

問題三:

Duplicate zip entry error, 這個(gè)問題一般是引用了不同版本的com.android.support庫擦酌,或者不同的jar里面有同名的class文件導(dǎo)致的俱诸,需要人工排查了。

解決方法:
Settings->IDE Settings->Editor->Other->Strip trailing spaces on Save->None

問題四:

編譯的時(shí)候赊舶,報(bào):Failure [INSTALL_FAILED_OLDER_SDK]睁搭。一般是系統(tǒng)自動(dòng)幫你設(shè)置了compileSdkVersion

解決方法:
修改build.gradle下的compileSdkVersion 'android-L'為compileSdkVersion 24

問題五:

Error:Executionfailed for task ':greencar:processDebugManifest'.> Manifest merger failed withmultipleerrors, see logs。
原因:AS的Gradle插件默認(rèn)會(huì)啟用Manifest Merger Tool笼平,若Library項(xiàng)目中也定義了與主項(xiàng)目相同的屬性(例如默認(rèn)生成的android:icon和android:theme)园骆,則此時(shí)會(huì)合并失敗,并報(bào)上面的錯(cuò)誤寓调。
解決方案:
在manifest根標(biāo)簽上加入xmlns:tools="http://schemas.android.com/tools"锌唾,并在Manifest.xml的application標(biāo)簽下添加tools:replace="name,icon, label,theme"
以及在主項(xiàng)目的 manifest文件中晌涕,重復(fù)寫了 call_phone的權(quán)限滋捶,網(wǎng)上也有人是某個(gè)activity下多寫了一句intent-filter,里面沒有內(nèi)容余黎,將這些重復(fù)的空的刪掉就好重窟,并將作為lib的minisdk與主項(xiàng)目同步(修改library飛build.gradle文件中最小sdk,或者降低主項(xiàng)目的sdk)

問題六:

在作為library的項(xiàng)目中報(bào)錯(cuò):需要常量表達(dá)式
解決方案:
在一般的Android項(xiàng)目中惧财,R類的常量都是用final定義的亲族,但ADT 14之后,如果在library 項(xiàng)目中可缚,它會(huì)沒有final關(guān)鍵字霎迫,而我們在作為library的項(xiàng)目中使用了switch ,在switch語句的case中帘靡,如果使用 R.id.xxx 則會(huì)提示有問題知给,不允許非常量在case語句中。
Google提供的一個(gè)方法就是把它轉(zhuǎn)化為if-else語句描姚。目前我也是用了這個(gè)笨辦法涩赢,還好Android studio 只要按Anter+Enter自動(dòng)幫改,就是比較煩

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末轩勘,一起剝皮案震驚了整個(gè)濱河市筒扒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌绊寻,老刑警劉巖花墩,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異澄步,居然都是意外死亡冰蘑,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門村缸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來祠肥,“玉大人,你說我怎么就攤上這事梯皿〕鹣洌” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵东羹,是天一觀的道長剂桥。 經(jīng)常有香客問我,道長百姓,這世上最難降的妖魔是什么渊额? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮垒拢,結(jié)果婚禮上旬迹,老公的妹妹穿的比我還像新娘。我一直安慰自己求类,他們只是感情好奔垦,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著尸疆,像睡著了一般椿猎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上寿弱,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天犯眠,我揣著相機(jī)與錄音,去河邊找鬼症革。 笑死筐咧,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的噪矛。 我是一名探鬼主播量蕊,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼艇挨!你這毒婦竟也來了残炮?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤缩滨,失蹤者是張志新(化名)和其女友劉穎势就,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體脉漏,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蛋勺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鸠删。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片抱完。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖刃泡,靈堂內(nèi)的尸體忽然破棺而出巧娱,到底是詐尸還是另有隱情,我是刑警寧澤烘贴,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布禁添,位于F島的核電站,受9級(jí)特大地震影響桨踪,放射性物質(zhì)發(fā)生泄漏老翘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望铺峭。 院中可真熱鬧墓怀,春花似錦、人聲如沸卫键。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽莉炉。三九已至钓账,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間絮宁,已是汗流浹背梆暮。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留绍昂,地道東北人啦粹。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像治专,于是被迫代替她去往敵國和親卖陵。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

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