Codemagic构建Android时忽略local.properties致构建失败的排查求助
解决Codemagic Android构建中local.properties被忽略的问题
核心问题分析
你遇到的「WARNING: ignoring settings from 'local.properties'!」是因为Codemagic默认会优先使用自身环境配置,且你之前的脚本存在两个问题:一是硬编码的Flutter SDK路径不符合Mac构建环境的实际情况,二是脚本执行时机晚于Codemagic生成默认local.properties的阶段,导致自定义配置被覆盖。这直接引发minSdkVersion配置未生效,进而触发「Cannot invoke method toInteger() on null object」错误。
具体解决步骤
1. 修正Flutter SDK路径获取逻辑
Codemagic Mac构建环境中,Flutter的安装路径并非固定的$HOME/programs/flutter,而是随环境动态分配的。通过命令自动获取路径可避免硬编码错误。
2. 调整脚本执行时机与内容
放弃克隆后脚本,改用预构建脚本(Pre-build script),确保在Codemagic处理Android配置前生成正确的local.properties:
#!/bin/sh # 自动获取Flutter SDK根路径 FLUTTER_SDK_PATH=$(which flutter | sed 's/\/bin\/flutter//') # 生成local.properties,同时写入SDK路径和minSdkVersion echo "flutter.sdk=$FLUTTER_SDK_PATH" > "$CM_BUILD_DIR/android/local.properties" echo "flutter.minSdkVersion=21" >> "$CM_BUILD_DIR/android/local.properties"
3. 确保build.gradle正确读取配置
检查android/app/build.gradle文件,确认minSdkVersion从local.properties读取,同时添加兜底默认值避免null错误:
def localProperties = new Properties() def localPropertiesFile = rootProject.file('local.properties') if (localPropertiesFile.exists()) { localPropertiesFile.withReader('UTF-8') { reader -> localProperties.load(reader) } } android { defaultConfig { // 读取local.properties中的minSdkVersion,默认值设为21兜底 minSdkVersion localProperties.getProperty('flutter.minSdkVersion', '21').toInteger() // 其他配置... } }
4. 验证构建过程
提交构建后,查看日志中预构建脚本的执行输出,确认local.properties已正确生成;同时检查获取依赖阶段是否不再出现忽略local.properties的警告。
内容的提问来源于stack exchange,提问作者BeniaminoBaggins
相关产品推荐
相关产品推荐

