Flutter包如何获取父应用BuildConfig.java类中的值?
如何在Flutter包中获取Android父应用的BuildConfig值?
完全可行,但你遇到的文件未找到(ClassNotFoundException)问题,通常是这几个原因导致的:
- 调用时机过早:
flutterActivity还未初始化完成,导致获取的packageName为空或无效 - BuildConfig类路径错误:部分多模块项目的BuildConfig不在主package下,或是父应用的BuildConfig被混淆
- 未处理异常:如果父应用没配置productFlavor,
FLAVOR字段本身就不存在
修正后的实现代码
// 建议在FlutterPlugin的onAttachedToActivity或合适的生命周期节点调用 fun getBuildConfigFlavor(flutterActivity: FlutterActivity?) { val packageName = flutterActivity?.packageName ?: return try { val buildConfigClass = Class.forName("$packageName.BuildConfig") val flavorField = buildConfigClass.getField("FLAVOR") val flavorValue = flavorField.get(null) as String println("获取到FLAVOR值: $flavorValue") } catch (e: ClassNotFoundException) { println("找不到BuildConfig类: ${e.message}") } catch (e: NoSuchFieldException) { println("BuildConfig中不存在FLAVOR字段: ${e.message}") } catch (e: IllegalAccessException) { println("无法访问FLAVOR字段: ${e.message}") } }
额外注意事项
- 混淆防护:如果父应用开启了代码混淆,需要在父应用的
proguard-rules.pro中添加规则保留BuildConfig类:-keep class **.BuildConfig { *; } - 多模块场景:若父应用是多模块项目,主应用的BuildConfig可能在不同package下,需查看父应用BuildConfig.java的实际路径确认类名
- 替代方案:如果只是为了区分环境,也可以让父应用通过MethodChannel主动传递参数给Flutter包,这种方式更稳定可控
内容的提问来源于stack exchange,提问作者Dev Loots
相关产品推荐
相关产品推荐

