Expo托管应用无需eject修改Android端gradle.properties配置
现有实现存在的问题
- 重复插入风险:直接调用
push新增配置项,没有提前校验gradle.properties中是否已存在同名的AsyncStorage_db_size_in_MB配置。多次执行prebuild、或者已有默认配置的场景下,会出现多条同key属性,Gradle默认读取最后一条配置,会导致配置不生效或不符合预期。 - 值类型错误:
withGradleProperties要求property类型条目的value必须为字符串格式,传入数字类型10会导致配置写入时格式异常。 - 配置值不符合需求:需要的是最高15MB的存储容量,代码里写的配置值为10,和需求不匹配。
无需eject的正确实现方案
Expo托管工作流原生支持通过自定义Config Plugin修改原生配置,不需要退出托管流程,构建时会自动注入对应配置。
- 修正自定义插件代码(路径
./plugins/modifyGradle.js),增加重复配置校验、修正值类型、匹配需求的容量值:
import { withGradleProperties } from "@expo/config-plugins"; export const modifyGradle = (config) => { const targetKey = "AsyncStorage_db_size_in_MB"; const targetSize = "15"; // 字符串格式,对应15MB存储上限 return withGradleProperties(config, (config) => { // 查找已存在的同名配置 const existingConfig = config.modResults.find( (item) => item.type === "property" && item.key === targetKey ); if (existingConfig) { // 已存在则直接更新值,避免重复条目 existingConfig.value = targetSize; } else { // 不存在才新增配置 config.modResults.push({ type: "property", key: targetKey, value: targetSize, }); } return config; }); };
- 确认
app.json中的插件配置格式正确,插件路径和实际文件路径一致:
{ "expo": { // 其他原有配置 "plugins": ["./plugins/modifyGradle.js"] } }
- 如果之前本地执行过prebuild生成了
android目录,先删除该目录后再执行构建;如果使用EAS云构建,不需要额外操作,构建流程会自动执行插件注入配置。
注意:该配置仅对
@react-native-async-storage/async-storage生效,默认Expo SDK内置的AsyncStorage版本已支持该gradle配置项,不需要额外升级依赖。
内容的提问来源于stack exchange,提问作者Anique Ali
相关产品推荐
相关产品推荐

