如何基于条件向Android.bp的android_app动态追加aaptflags
问题根源与修复方案
核心问题分析
你的代码无法成功追加aaptflags,主要有3个关键错误:
- Defaults工厂类型不匹配:你用了
cc.DefaultsFactory(),这是给C/C++类模块提供默认配置的工厂,但目标是android_app这类Android应用模块,必须用通用的android.DefaultsFactory()。 - 属性名大小写不匹配:Soong构建系统中,
android_app模块的aapt配置属性是**aaptFlags**(驼峰命名),你代码里写的小写aaptflags无法被系统识别,自然无法完成追加。 - 冗余依赖导入:代码中导入了
"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
相关产品推荐
相关产品推荐

