Skip to main content
Glama

flutter_release_build

Build signed release versions for mobile platforms (APK, AAB, IPA) from Flutter projects with optional code obfuscation to prepare apps for distribution.

Instructions

Build release versions for all platforms: APK, AAB, IPA with signing

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
cwdYesWorking directory (Flutter project root)
platformsNoPlatforms to build for
obfuscateNoObfuscate Dart code

Implementation Reference

  • Primary handler for 'flutter_release_build' tool. Orchestrates release builds for multiple platforms (APK, AAB, IPA) by invoking the underlying 'flutter_build' tool for each platform, handles errors per platform, and aggregates results with artifact paths.
    handler: async (args: any) => { const builds: Record<string, any> = {}; const buildTool = flutterTools.get('flutter_build'); for (const platform of args.platforms || ['apk', 'appbundle']) { try { const result = await buildTool.handler({ cwd: args.cwd, target: platform, buildMode: 'release' }); builds[platform] = result; } catch (error) { builds[platform] = { success: false, error: error instanceof Error ? error.message : String(error) }; } } return { success: Object.values(builds).some((b: any) => b.success), data: { builds, artifacts: { apk: 'build/app/outputs/flutter-apk/app-release.apk', appbundle: 'build/app/outputs/bundle/release/app-release.aab', ipa: 'build/ios/ipa/*.ipa' } } }; }
  • Registration of the 'flutter_release_build' super-tool, including name, description, input schema, and handler reference.
    tools.set('flutter_release_build', { name: 'flutter_release_build', description: 'Build release versions for all platforms: APK, AAB, IPA with signing', inputSchema: { type: 'object', properties: { cwd: { type: 'string', description: 'Working directory (Flutter project root)' }, platforms: { type: 'array', items: { type: 'string', enum: ['apk', 'appbundle', 'ipa', 'ios'] }, description: 'Platforms to build for', default: ['apk', 'appbundle'] }, obfuscate: { type: 'boolean', description: 'Obfuscate Dart code', default: true } }, required: ['cwd'] }, handler: async (args: any) => { const builds: Record<string, any> = {}; const buildTool = flutterTools.get('flutter_build'); for (const platform of args.platforms || ['apk', 'appbundle']) { try { const result = await buildTool.handler({ cwd: args.cwd, target: platform, buildMode: 'release' }); builds[platform] = result; } catch (error) { builds[platform] = { success: false, error: error instanceof Error ? error.message : String(error) }; } } return { success: Object.values(builds).some((b: any) => b.success), data: { builds, artifacts: { apk: 'build/app/outputs/flutter-apk/app-release.apk', appbundle: 'build/app/outputs/bundle/release/app-release.aab', ipa: 'build/ios/ipa/*.ipa' } } }; } });
  • Underlying 'flutter_build' tool handler called by 'flutter_release_build'. Executes 'flutter build <target> --release' command after validation, handles the actual Flutter CLI build process.
    tools.set('flutter_build', { name: 'flutter_build', description: 'Build Flutter app for specific target platform', inputSchema: { type: 'object', properties: { cwd: { type: 'string', minLength: 1, description: 'Working directory (Flutter project root)' }, target: { type: 'string', enum: ['apk', 'appbundle', 'ipa', 'ios', 'android', 'web', 'windows', 'macos', 'linux'], description: 'Build target platform' }, buildMode: { type: 'string', enum: ['debug', 'profile', 'release'], description: 'Build mode' }, flavor: { type: 'string', description: 'Build flavor' } }, required: ['cwd', 'target'] }, handler: async (args: any) => { const validation = FlutterBuildSchema.safeParse(args); if (!validation.success) { throw new Error(`Invalid request: ${validation.error.message}`); } const { cwd, target, buildMode = 'debug', flavor } = validation.data; // Validate that it's a Flutter project await validateFlutterProject(cwd); const flutter_args = ['build', target]; if (buildMode !== 'debug') { flutter_args.push(`--${buildMode}`); } if (flavor) { flutter_args.push('--flavor', flavor); } const result = await processExecutor.execute('flutter', flutter_args, { cwd, timeout: 1800000, // 30 minutes timeout for builds }); if (result.exitCode !== 0) { throw new Error(`Flutter build failed: ${result.stderr || result.stdout}`); } return { success: true, data: { target, buildMode, flavor, projectPath: cwd, output: result.stdout, duration: result.duration, exitCode: result.exitCode, }, }; } });
  • Zod schema for validating inputs to the 'flutter_build' tool, used by 'flutter_release_build' indirectly.
    const FlutterBuildSchema = z.object({ cwd: z.string().min(1), target: z.enum(['apk', 'appbundle', 'ipa', 'ios', 'android', 'web', 'windows', 'macos', 'linux']), buildMode: z.enum(['debug', 'profile', 'release']).default('debug'), flavor: z.string().optional(), });
  • Metadata and categorization for 'flutter_release_build' tool, defining requirements, performance expectations, and category.
    'flutter_release_build': { name: 'flutter_release_build', category: ToolCategory.ESSENTIAL, platform: 'flutter', requiredTools: [RequiredTool.FLUTTER, RequiredTool.GRADLE, RequiredTool.XCODEBUILD], description: 'Build release versions for all platforms: APK, AAB, IPA with signing', safeForTesting: false, performance: { expectedDuration: 300000, timeout: 1200000 } },

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/cristianoaredes/mcp-mobile-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server