不同车型drawable不同

在build.gradle文件中

java 复制代码
productFlavors {
        platform平台1 {
            dimension 'platform'
        }
        platform平台2 {
            dimension 'platform'
        }
    }
  1. 定义了两种平台

    • platform平台1:代表平台1的配置

    • platform平台2:代表平台2的配置

  2. 它们属于同一个维度 'platform'

    • 这意味着它们是互斥的

    • 构建时只能选择其中一个

一个平台有多款车型,只有车型6图片不一样。

java 复制代码
afterEvaluate {
        if (get当前车型() == FLAVOR_车型6) {
            def currentDirs = android.sourceSets.platform平台1.res.srcDirs
            android.sourceSets.platform平台1.res.srcDirs = ['src/main/res-车型6'] + currentDirs
        }
    }

1. afterEvaluate { ... }

Kotlin 复制代码
afterEvaluate {
    // 这里的代码会在 Gradle 配置阶段完成后执行
}

作用:确保所有 Android 插件配置都已完成,可以安全地访问和修改配置。

2. 条件判断

Kotlin 复制代码
if (get当前车型() == FLAVOR_车型6) {
    // 只有当车型是 车型6时才执行
}

3. 获取当前资源目录

Kotlin 复制代码
def currentDirs = android.sourceSets.platform平台1.res.srcDirs

作用

  • 获取 platform平台1 flavor 当前配置的所有资源目录

  • srcDirs 是一个目录路径的列表

  • 保存到变量 currentDirs

4. 核心操作:添加 res-车型6 目录

Kotlin 复制代码
android.sourceSets.platform平台1.res.srcDirs = ['src/main/res-车型6'] + currentDirs

这是最关键的一行,分解说明:

复制代码
// 1. 创建一个新列表,包含 res-车型6 目录
['src/main/res-车型6']

// 2. 使用 + 运算符连接两个列表
['src/main/res-车型6'] + currentDirs

// 3. 结果示例:
//    currentDirs = ['src/main/res']
//    结果 = ['src/main/res-车型6', 'src/main/res']

// 4. 将这个新列表赋值回 srcDirs
android.sourceSets.platform平台1.res.srcDirs = 新列表

车型6先在res-车型6中找资源,没有就到res中找。

相关推荐
冬奇Lab7 小时前
Android触摸事件分发、手势识别与输入优化实战
android·源码阅读
城东米粉儿10 小时前
Android MediaPlayer 笔记
android
Jony_10 小时前
Android 启动优化方案
android
阿巴斯甜10 小时前
Android studio 报错:Cause: error=86, Bad CPU type in executable
android
张小潇10 小时前
AOSP15 Input专题InputReader源码分析
android
_小马快跑_14 小时前
Kotlin | 协程调度器选择:何时用CoroutineScope配置,何时用launch指定?
android
_小马快跑_14 小时前
Kotlin | 从SparseArray、ArrayMap的set操作符看类型检查的不同
android
_小马快跑_15 小时前
Android | 为什么有了ArrayMap还要再设计SparseArray?
android
_小马快跑_15 小时前
Android TextView图标对齐优化:使用LayerList精准控制drawable位置
android
_小马快跑_15 小时前
Kotlin协程并发控制:多线程环境下的顺序执行
android