본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[android] Resource Merging 에 대한 이야기..

by 돼지왕 왕돼지 2018. 3. 6.
반응형

[android] Resource Merging 에 대한 이야기..


http://tools.android.com/tech-docs/new-build-system/resource-merging

aapt, Android, android asset packaging tool, Build System, build type, buildtype, depend, dependencies, flat priority list, Flavor, gradle build, graph, in aar bundle, incremental, library project, list, Main, main resource, main sourceset, main.res, main.res.srcdirs, merge, multiple resource folder, Overlay, priority, Resource, resource folder, resource folder list, resource merge, resource merging, resource set, resource 머지, single merged resource folder, sourceset, sourceSets, type, [android] Resource Merging 에 대한 이야기.., 규칙, 변형 resource

-

Gradle build 에서는 resource merge 에 대해 새로운 규칙이 적용된다.


기존의 build system 에서는 resource folder list 를 aapt(Android Asset Packaging Tool) 에 전달하며,

나중에 전달된 것이 overlay 로 작동한다. ( 옵션을 통해서 override 가 아닌 새로운 추가로 작동할 수도 있었다. )

overlay 로 작동한다는 것은 새로운 resource 에 대해서 추가되는 방식이다.


Gradle 에서는 aapt 에 전달하기 전에 single, merged resource folder 를 만들고, 이 녀석을 전달한다.

이 방식의 merge 는 incremental 한 장점이 있다.



-

3가지 type 의 resource 가 머지된다.

    main sourceSet 에 있는 main resource ( src/main/res )

    Build Type 과 Flavor 로부터 오는 변형 resource ( Build variant )

    Library Project 에 depend 된 resource ( in AAR bundle )



-

다음의 순서로 Priority 를 갖는다.


Build variant > BuildType > Product Flavor > main source set > library Dependencies



-

sourceSet 은 아래와 같이 multiple resource folder 를 관리한다.

android.sourceSets{

    main.res.srcDirs = [‘src/main/res’, src/main/res2’]

}


위와 같이 정의한 경우 2개의 folder 는 동일한 priority 를 갖는다.

이 말은 위의 folder 들에 동일한 resource 가 들어 있다면 build fail 이 발생한다.



-

Library project 의 실제 resource set 은 list 가 아니라 graph 이다.

그러나 merge 메커니즘은 flat priority list 만 다룬다.


예를 들어 Priority 가 A > B 이며, A library 가 C, D Project 를 참조하고, B 가 C 참조한다면,

Merge 에 전달되는 flat list 는 A D B C 가 된다.

A 와 B 모두가 C 를 override 한다는 것을 보장한다.




반응형

댓글