const { withDangerousMod } = require('@expo/config-plugins'); const fs = require('fs'); const path = require('path'); function withSizeOptimization(config) { // 1. 在 prebuild 时修改 gradle.properties config = withDangerousMod(config, [ 'android', async (modConfig) => { const projectRoot = modConfig.modRequest.platformProjectRoot; const propertiesPath = path.join(projectRoot, 'gradle.properties'); if (fs.existsSync(propertiesPath)) { let content = fs.readFileSync(propertiesPath, 'utf8'); if (content.includes('reactNativeArchitectures=')) { content = content.replace(/reactNativeArchitectures=.*/, 'reactNativeArchitectures=arm64-v8a'); } else { content += '\nreactNativeArchitectures=arm64-v8a\n'; } fs.writeFileSync(propertiesPath, content, 'utf8'); } return modConfig; } ]); // 2. 在 prebuild 时修改 app/build.gradle 启用 ABI Splits 分包 config = withDangerousMod(config, [ 'android', async (modConfig) => { const projectRoot = modConfig.modRequest.platformProjectRoot; const buildGradlePath = path.join(projectRoot, 'app/build.gradle'); if (fs.existsSync(buildGradlePath)) { let content = fs.readFileSync(buildGradlePath, 'utf8'); if (!content.includes('splits {')) { content = content.replace( /android\s*\{/, `android {\n splits {\n abi {\n enable true\n reset()\n include "armeabi-v7a", "arm64-v8a", "x86", "x86_64"\n universalApk true\n }\n }` ); fs.writeFileSync(buildGradlePath, content, 'utf8'); } } return modConfig; } ]); return config; } module.exports = withSizeOptimization;