美文网首页Android studio【idea】
Android资源的合并小结

Android资源的合并小结

作者: Sumauto | 来源:发表于2018-09-06 15:18 被阅读153次

一、资源存放位置

在Android Studio项目中,源码和资源都是放在各个module中对应的src目录下。比如一个叫app的module,默认情况下我们看到的是在app/src/main下。但实际上module中源码和资源目录不止一个。如果app有两个buildType叫debug和release,那么每个同样你也可以在app/src/debugapp/src/release下放置你的源码和资源。如果你有两个productFlavors分别叫flavor1和flavor2,同样的你也可以在app/src/flavor1app/src/flavor2下放置你的源码和资源。在打包的时候,这些代码和资源会进行合并。当然你也可以通过gradle配置修改上面几个目录的位置,具体如何配置本篇不做讨论。
ps:上面标红的几个目录,默认不存在,需要自己手动创建。

二、Build Variants

从Build Variants的名称上看,能知道我们打的包是由哪几个目录下的源码组成。比如我们的工程中有一个叫app的module,app的配置如下:

 //优先级高于productFlavors
 buildTypes {
        release {
            minifyEnabled false
        }
        debug{
            resValue "string","name","buildType xml"
        }
 }
    
 //从左到右优先级依次降低,冲突时,使用优先级高的资源
 flavorDimensions "dimen1","dimen2"
 productFlavors{
        flavor1{
            dimension "dimen1"
            resValue "string","name","flavor1 xml"
        }

        flavor2{
            dimension "dimen2"
            resValue "string","name","flavor2 xml"
        }

        flavor3{
            dimension "dimen2"
            buildConfigField "String","name","\"buildConfig dimen2\""
            resValue "string","name","string from flavor3 xml"
        }
}

脚本执行后,那么app会生成以下四种Build Variants:
flavor1Flavor2Debug
flavor1Flavor2Release
flavor1Flavor3Debug
flavor1Flavor3Release

比如flavor1Flavor2Debug,我们就知道它是由flavor1、flavor2和debug三个目录下的代码组成,当然还有marin目录。Build Variants的可以在这里切换:


image.png

build variants的组合方式是[dimen1][dimen2][buildType],dimen1有1个(flavor1),dimen2有2个(flavor2、flavor3),buildType有2个(debug、release ),因此一共有1\times2\times2=4种组合。依此类推,如果你声明了三个flavorDimensions ,最终就是[dimen1][dimen2][dimen3][buildType]

合并优先级

最终打包的时候,遇到相同的资源,使用优先级最高的那个。顺序如下:
buildType > productFlavor > main > library
对于多维度productFlavor,每个flavor的优先级按flavorDimensions的声明顺序从左往右依次降低。如:

flavorDimensions "dimen1","dimen2","dimen3",...

则优先级顺序为:
buildType > dimen1 > dimen2 > dimen3 > ...> main >library

合并方式

1.文件覆盖

单个文件就是一个资源的(drawable,layout,xml等),遇到相同资源,按照上面的优先级覆盖,高优先级覆盖低优先级的文件

2.合并内容

资源在文件内定义的(string,style等)和manifest,合并内容,遇到相同资源,高优先级覆盖低优先级。

源码类型 允许资源重复 合并相同资源
java 编译失败
assets 文件覆盖
layout 文件覆盖
drawable 文件覆盖
mipmap 文件覆盖
xml 文件覆盖
values 内容合并
manifest 内容合并

相关文章

  • Android资源的合并小结

    一、资源存放位置 在Android Studio项目中,源码和资源都是放在各个module中对应的src目录下。比...

  • Android构建过程——资源合并打包

    Android构建会经历资源合并打包、源码编译、dex生成及打包签名等步骤。本文对资源合并打包进行一下小的总结 资...

  • Android XML资源合并工具

    在做聚合SDK开发时,Android方向会遇到从Java编译到APK打包的一系列问题,其中有一项就是需要合并多个工...

  • Android技能树 — Drawable小结

    前言 Android技能书系列: Android技能树 — 动画小结 Android技能树 — View小结 An...

  • Android构建--资源文件合并

    什么文件是资源文件? /res目录下的所有文件, /assets目录 Manifest文件 需要合并的资源文件来源...

  • (二)

    转自:Android Studio、Git 解决合并冲突Android Studio、Git 解决合并冲突Andr...

  • 前端性能优化汇总

    网络优化 减少请求文件数,资源合并(雪碧图、SVG(Iconfont)、JS/CSS文件合并) 减少资源体积,资源...

  • ExpandableListView

    Android ExpandableListView使用小结(一)Android ExpandableListVi...

  • 页面性能优化

    加载资源优化 1,静态资源的压缩合并,减少HTTP请求 资源的合并,可以减少http请求数量。资源的压缩,可以减少...

  • 前端资源优化解决方案

    前言 常见的资源优化方案有:1.资源压缩与合并2.图片格式优化3.图片加载优化 资源压缩与合并 为什么要压缩与合并...

网友评论

本文标题:Android资源的合并小结

本文链接:https://www.haomeiwen.com/subject/hkgswftx.html