dhis2_android_init_project
Initialize an Android project with DHIS2 SDK integration by specifying project name, application ID, language, and features like offline sync, GPS capture, or biometric authentication.
Instructions
Initialize a new Android project with DHIS2 SDK integration
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| applicationId | Yes | Android application ID (e.g., "org.dhis2.healthtracker") | |
| architecture | No | Android architecture pattern to implement | |
| dhis2SdkVersion | No | DHIS2 Android SDK version (e.g., "1.10.0") | |
| features | No | Features to include in the project setup | |
| language | Yes | Programming language for Android app | |
| minSdkVersion | No | Minimum Android SDK version (default: 21) | |
| projectName | Yes | Android project name (e.g., "dhis2-health-tracker") | |
| targetSdkVersion | No | Target Android SDK version (default: 34) |
Implementation Reference
- src/android-generators.ts:32-182 (handler)The core handler function that takes AndroidProjectConfig input and generates a comprehensive markdown guide for initializing a DHIS2 Android project, including project structure, permissions, architecture patterns, and next steps.export function generateAndroidProjectInit(config: AndroidProjectConfig): string { const { projectName, applicationId, minSdkVersion = 21, targetSdkVersion = 34, language, dhis2SdkVersion, features = [], architecture } = config; return `# DHIS2 Android Project Initialization Guide ## π Quick Start Commands \`\`\`bash # Create new Android project structure mkdir ${projectName} cd ${projectName} # Initialize Android project with Android Studio template or CLI # Option 1: Android Studio # - Create new project with API ${minSdkVersion}+ and ${language} # - Choose Empty Activity template # - Set Application name: ${projectName} # - Set Package name: ${applicationId} # Option 2: Command line with Android CLI tools android create project \\ --name ${projectName} \\ --target android-${targetSdkVersion} \\ --path ./${projectName} \\ --package ${applicationId} \\ --activity MainActivity # Initialize git repository git init \`\`\` ## π± Project Structure \`\`\` ${projectName}/ βββ app/ β βββ src/ β β βββ main/ β β β βββ java/${applicationId?.replace(/\./g, '/') || 'com/example/app'}/ β β β β βββ MainActivity.${language === 'kotlin' ? 'kt' : 'java'} β β β β βββ data/ β β β β β βββ local/ β β β β β βββ remote/ β β β β β βββ repository/ β β β β βββ domain/ β β β β β βββ model/ β β β β β βββ repository/ β β β β β βββ usecase/ β β β β βββ presentation/ β β β β β βββ ui/ β β β β β βββ viewmodel/ β β β β βββ utils/ β β β βββ res/ β β β βββ AndroidManifest.xml β β βββ androidTest/ β β βββ test/ β βββ build.gradle${language === 'kotlin' ? '.kts' : ''} β βββ proguard-rules.pro βββ gradle/ βββ build.gradle${language === 'kotlin' ? '.kts' : ''} βββ gradle.properties βββ settings.gradle${language === 'kotlin' ? '.kts' : ''} \`\`\` ## ποΈ Architecture Pattern: ${architecture?.toUpperCase().replace('_', ' ') || 'MVVM'} ${generateArchitecturePattern(architecture || 'mvvm', language || 'kotlin')} ## π Required Permissions Add these permissions to \`app/src/main/AndroidManifest.xml\`: \`\`\`xml <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="${applicationId}"> <!-- DHIS2 SDK Required Permissions --> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> ${(features || []).includes('gps_capture') ? ` <!-- Location Services --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />` : ''} ${(features || []).includes('camera_integration') ? ` <!-- Camera & Media --> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />` : ''} ${(features || []).includes('encrypted_storage') ? ` <!-- Storage & Security --> <uses-permission android:name="android.permission.USE_FINGERPRINT" /> <uses-permission android:name="android.permission.USE_BIOMETRIC" />` : ''} ${(features || []).includes('offline_sync') ? ` <!-- Background Sync --> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />` : ''} <application android:name=".${(projectName || 'App').replace(/-/g, '')}Application" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/Theme.${(projectName || 'App').replace(/-/g, '')}" android:networkSecurityConfig="@xml/network_security_config"> <activity android:name=".MainActivity" android:exported="true" android:theme="@style/Theme.${(projectName || 'App').replace(/-/g, '')}.NoActionBar"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> ${(features || []).includes('offline_sync') ? ` <!-- Background Sync Service --> <service android:name=".service.SyncService" android:permission="android.permission.BIND_JOB_SERVICE" android:exported="false" />` : ''} </application> </manifest> \`\`\` ## π§ Next Steps 1. **Configure Gradle**: Use \`dhis2_android_configure_gradle\` tool 2. **Set up Authentication**: Use \`dhis2_android_setup_authentication\` tool 3. **Configure Data Sync**: Use \`dhis2_android_setup_sync\` tool 4. **Add UI Components**: Use \`dhis2_android_configure_ui_patterns\` tool ## π Additional Resources - [DHIS2 Android SDK Documentation](https://docs.dhis2.org/en/develop/developing-with-the-android-sdk/about-this-guide.html) - [Android Architecture Guide](https://developer.android.com/guide/components/activities/activity-lifecycle) - [Material Design Components](https://material.io/develop/android) ## π§ͺ Development Commands \`\`\`bash # Build debug APK ./gradlew assembleDebug # Run tests ./gradlew test # Install on connected device ./gradlew installDebug # Generate signed APK ./gradlew assembleRelease \`\`\` `; }
- src/index.ts:1237-1247 (registration)Registers the MCP tool 'dhis2_android_init_project' in the main server request handler switch statement, extracting arguments and calling the generateAndroidProjectInit handler.case 'dhis2_android_init_project': const androidProjectArgs = args as any; const androidProjectInstructions = generateAndroidProjectInit(androidProjectArgs); return { content: [ { type: 'text', text: androidProjectInstructions, }, ], };
- src/android-generators.ts:6-15 (schema)TypeScript interface defining the input parameters/schema for the Android project initialization tool.export interface AndroidProjectConfig { projectName: string; applicationId: string; minSdkVersion: number; targetSdkVersion: number; language: 'kotlin' | 'java'; dhis2SdkVersion: string; features: string[]; architecture: string; }
- src/permission-system.ts:155-155 (registration)Maps the tool to the 'canUseMobileFeatures' permission in the TOOL_PERMISSIONS static map.['dhis2_android_init_project', 'canUseMobileFeatures'],