You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于条件向Android.bp的android_app动态追加aaptflags

问题根源与修复方案

核心问题分析

你的代码无法成功追加aaptflags,主要有3个关键错误:

  1. Defaults工厂类型不匹配:你用了cc.DefaultsFactory(),这是给C/C++类模块提供默认配置的工厂,但目标是android_app这类Android应用模块,必须用通用的android.DefaultsFactory()。
  2. 属性名大小写不匹配:Soong构建系统中,android_app模块的aapt配置属性是**aaptFlags**(驼峰命名),你代码里写的小写aaptflags无法被系统识别,自然无法完成追加。
  3. 冗余依赖导入:代码中导入了"android/soong/cc",但实际完全不需要,属于无效依赖。

修正后的代码

my_defaults.go

package my_defaults

import (
    "android/soong/android"
)

func aaptFlags(ctx android.BaseContext) []string {
    // 后续可替换为业务逻辑,当前返回固定值测试
    return []string{"my_flag_here"}
}

func myDefaults(ctx android.LoadHookContext) {
    type props struct {
        // 与android_app模块的属性名严格匹配:驼峰AaptFlags
        AaptFlags []string
    }

    p := &props{}
    p.AaptFlags = aaptFlags(ctx)
    ctx.AppendProperties(p)
}

func init() {
    android.RegisterModuleType("my_defaults", myDefaultsFactory)
}

func myDefaultsFactory() android.Module {
    // 使用适配Android应用模块的Defaults工厂
    module := android.DefaultsFactory()
    android.AddLoadHook(module, myDefaults)

    return module
}

Android.bp(仅调整依赖部分)

bootstrap_go_package {
    name: "soong-my_defaults",
    pkgPath: "android/soong/my/defaults",
    deps: [
        "soong",
        "soong-android",
        // 移除不必要的soong-cc依赖
    ],
    srcs: [
        "my_defaults.go"
    ],
    pluginFor: ["soong_build"]
}

my_defaults {
    name: "my_defaults",
}

android_app {
    name: "MyApp",
    defaults: ["my_defaults"],
    srcs: ["src/**/*.java"],
    aaptflags: ["some_flags"],
    // ... 其余配置保持不变
}

内容的提问来源于stack exchange,提问作者Heitor Paceli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 14:45:33