Android構(gòu)建--資源文件合并

什么文件是資源文件?

  • /res目錄下的所有文件,
  • /assets目錄
  • Manifest文件

需要合并的資源文件來源是哪?

通常apk中的資源來源有3個语婴,具體可以參考官網(wǎng)

  • 主資源(main source set):比如src/main/res
  • 編譯變量(Build variant source set): 比如src/demoDebug/res
  • 庫文件依賴(libraries): 也就是我們引進(jìn)的aar

為什么要合并驶睦?

因為文件沖突了所以要合并砰左。

那么隨之而來的問題是系統(tǒng)如何唯一表示一個資源文件?相同resource type(anim/drawable/string等)和相同resource qualifier(比如hdpi, value中的語言等)下相同文件名的資源场航,系統(tǒng)會認(rèn)為他是相同的缠导,會導(dǎo)致沖突,需要合并溉痢。

如何合并僻造?

合并/assets目錄

asset沖突只會是文件沖突,規(guī)則也簡單孩饼,優(yōu)先使用本地文件髓削。

合并/res目錄

單一module中的資源文件發(fā)生沖突時如何合并?

單一module下可能就會有相同的資源存在镀娶,比如有多個主資源集立膛。那么當(dāng)出現(xiàn)這種沖突的情況的時候,系統(tǒng)會怎么處理呢汽畴?規(guī)則是低優(yōu)先級的資源會被覆蓋掉旧巾。

覆蓋的優(yōu)先級從高到低如下:

build variant > build type > product flavor > main source set > library dependences

舉個栗子,如果我們主資源集下有兩個資源: res/layout/a.xml, res/layout/b.xml, build type文件夾下面有res/layout/a.xml忍些。那么最后打包生成的apk中的res/layout/a.xml來自于build type, res/layout/b.xml來自于main source set鲁猩。

不同module中的資源文件發(fā)生沖突時如何合并?

當(dāng)?shù)谌揭蕾囍械膔es文件與本地文件有沖突時罢坝,會優(yōu)先選用本地文件廓握。但res/values略有不同,此目錄下的strings.xml嘁酿、color.xml隙券、styles.xml等文件會被整合到一個叫values.xml的文件中去,后與各第三方依賴中的values.xml進(jìn)行內(nèi)容上的合并闹司,不會像res其它子目錄文件一樣直接舍棄第三方?jīng)_突文件娱仔。

Manifest合并

低優(yōu)先級的manifest被合并到高優(yōu)先級manifest中。

image

不同來源的manifest優(yōu)先級由高到低:

  • 構(gòu)建變體(build variant)中的manifest
    • 構(gòu)建變體(build variant)manifest: 例如src/demoDebug
    • 構(gòu)建類型(build type) manifest: 例如src/debug
    • 產(chǎn)品風(fēng)味(product flavor) manifest: 例如src/demo
  • 本地 app module 中的manifest
  • 依賴的庫中的manifest

合并 manifest 中的屬性值的默認(rèn)規(guī)則如下:

High priority attribute Low priority attribute Attribute's merged result
No value No value No value (use default value)
No value Value B Value B
Value A No value Value A
Value A Value A Value A
Value A Value B Conflict error—you must add a merge rule marker

但是也有如下例外:

  • <manifest>中的屬性不會進(jìn)行合并游桩,直接使用高優(yōu)先級manifest中的屬性
  • <uses-feature><uses-library>中的android:required屬性使用or規(guī)則進(jìn)行合并
  • <uses-sdk>中的屬性總是使用高優(yōu)先級manifest中的牲迫,但以下情況例外:
    • 當(dāng)?shù)蛢?yōu)先級中定義的minSdkVersion較高時會報錯。但是可以使用overrideLibrary合并規(guī)則解決此錯誤借卧。
    • 當(dāng)?shù)蛢?yōu)先級中定義的targetSdkVersion較低時盹憎,合并工具會使用高優(yōu)先級manifest中的較高值。但是铐刘,它還添加了確保導(dǎo)入的庫繼續(xù)正常工作所需的任何系統(tǒng)權(quán)限(以防更高版本的Android增加了權(quán)限限制的情況)陪每。可以點擊這里查看合并工具可能會添加的權(quán)限
  • <intent-filter>元素在合并中不會被改變,只會被添加到其父節(jié)點中去
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末镰吵,一起剝皮案震驚了整個濱河市檩禾,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌捡遍,老刑警劉巖锌订,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異画株,居然都是意外死亡辆飘,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進(jìn)店門谓传,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蜈项,“玉大人,你說我怎么就攤上這事续挟〗糇洌” “怎么了?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵诗祸,是天一觀的道長跑芳。 經(jīng)常有香客問我轴总,道長,這世上最難降的妖魔是什么博个? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任怀樟,我火速辦了婚禮,結(jié)果婚禮上盆佣,老公的妹妹穿的比我還像新娘往堡。我一直安慰自己,他們只是感情好共耍,可當(dāng)我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布虑灰。 她就那樣靜靜地躺著,像睡著了一般痹兜。 火紅的嫁衣襯著肌膚如雪穆咐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天佃蚜,我揣著相機與錄音庸娱,去河邊找鬼。 笑死谐算,一個胖子當(dāng)著我的面吹牛熟尉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播洲脂,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼斤儿,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了恐锦?” 一聲冷哼從身側(cè)響起往果,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎一铅,沒想到半個月后陕贮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡潘飘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年肮之,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片卜录。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡戈擒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出艰毒,到底是詐尸還是另有隱情筐高,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站柑土,受9級特大地震影響蜀肘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜稽屏,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一幌缝、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧诫欠,春花似錦、人聲如沸浴栽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽典鸡。三九已至被廓,卻和暖如春塘匣,著一層夾襖步出監(jiān)牢的瞬間赌朋,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工扭吁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留球碉,地道東北人蜓斧。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像睁冬,于是被迫代替她去往敵國和親挎春。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,802評論 2 345