dhis2_android_configure_gradle
Generate Gradle build configurations to integrate DHIS2 Android SDK, enabling Jetpack Compose, view binding, data binding, ProGuard rules, and custom build variants for multi-environment setups.
Instructions
Generate Gradle build configuration for DHIS2 Android SDK integration
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| additionalLibraries | No | Additional Android libraries to include | |
| buildFeatures | No | ||
| buildVariants | No | Build variants for different DHIS2 environments | |
| dhis2SdkVersion | Yes | DHIS2 Android SDK version | |
| proguardRules | No | Generate ProGuard rules for DHIS2 SDK |
Implementation Reference
- src/index.ts:1249-1259 (handler)MCP tool handler that invokes generateGradleBuildConfig with input arguments and returns the generated Gradle configuration as text content.case 'dhis2_android_configure_gradle': const gradleArgs = args as any; const gradleConfig = generateGradleBuildConfig(gradleArgs); return { content: [ { type: 'text', text: gradleConfig, }, ], };
- src/android-generators.ts:314-509 (helper)Primary helper function that generates comprehensive Android Gradle build configuration including dependencies for DHIS2 SDK, build features, product flavors, and additional libraries.export function generateGradleBuildConfig(config: GradleConfig): string { const { dhis2SdkVersion, buildFeatures, proguardRules, buildVariants, additionalLibraries } = config; const additionalDependencies = additionalLibraries.map(lib => { switch (lib) { case 'room': return ` // Room Database implementation "androidx.room:room-runtime:2.6.1" implementation "androidx.room:room-ktx:2.6.1" kapt "androidx.room:room-compiler:2.6.1"`; case 'retrofit': return ` // Retrofit HTTP Client implementation "com.squareup.retrofit2:retrofit:2.9.0" implementation "com.squareup.retrofit2:converter-gson:2.9.0"`; case 'dagger_hilt': return ` // Dagger Hilt implementation "com.google.dagger:hilt-android:2.48" kapt "com.google.dagger:hilt-compiler:2.48"`; case 'rxjava': return ` // RxJava implementation "io.reactivex.rxjava3:rxjava:3.1.8" implementation "io.reactivex.rxjava3:rxandroid:3.0.2"`; case 'coroutines': return ` // Kotlin Coroutines implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3" implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3"`; case 'navigation': return ` // Navigation Component implementation "androidx.navigation:navigation-fragment-ktx:2.7.6" implementation "androidx.navigation:navigation-ui-ktx:2.7.6"`; default: return ''; } }).filter(dep => dep).join('\n\n'); return `# Android Gradle Build Configuration ## app/build.gradle.kts \`\`\`kotlin plugins { id("com.android.application") id("org.jetbrains.kotlin.android") ${buildFeatures.compose ? ' id("org.jetbrains.kotlin.plugin.compose")' : ''} ${additionalLibraries.includes('dagger_hilt') ? ' id("dagger.hilt.android.plugin")' : ''} kotlin("kapt") } android { namespace = "${config.dhis2SdkVersion}" // Use your package name compileSdk = 34 defaultConfig { applicationId = "org.dhis2.android.app" minSdk = 21 targetSdk = 34 versionCode = 1 versionName = "1.0" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" ${buildFeatures.compose ? ` vectorDrawables { useSupportLibrary = true }` : ''} } buildTypes { release { isMinifyEnabled = ${proguardRules} ${proguardRules ? 'proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")' : ''} } debug { isMinifyEnabled = false applicationIdSuffix = ".debug" versionNameSuffix = "-DEBUG" } } ${buildVariants.length > 0 ? ` flavorDimensions += "environment" productFlavors {${buildVariants.map(variant => ` create("${variant.name}") { dimension = "environment" buildConfigField("String", "DHIS2_BASE_URL", "\\"${variant.dhis2Instance}\\"") applicationIdSuffix = ".${variant.name}" }`).join('')} }` : ''} compileOptions { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = "1.8" } buildFeatures { ${buildFeatures.compose ? ' compose = true' : ''} ${buildFeatures.viewBinding ? ' viewBinding = true' : ''} ${buildFeatures.dataBinding ? ' dataBinding = true' : ''} buildConfig = true } ${buildFeatures.compose ? ` composeOptions { kotlinCompilerExtensionVersion = "1.5.8" }` : ''} packaging { resources { excludes += "/META-INF/{AL2.0,LGPL2.1}" } } } dependencies { // DHIS2 Android SDK implementation "org.hisp.dhis:android-core:${dhis2SdkVersion}" // Core Android Dependencies implementation "androidx.core:core-ktx:1.12.0" implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.7.0" implementation "androidx.activity:activity-ktx:1.8.2" ${buildFeatures.compose ? ` // Jetpack Compose implementation platform("androidx.compose:compose-bom:2024.02.00") implementation "androidx.compose.ui:ui" implementation "androidx.compose.ui:ui-graphics" implementation "androidx.compose.ui:ui-tooling-preview" implementation "androidx.compose.material3:material3" implementation "androidx.activity:activity-compose:1.8.2" debugImplementation "androidx.compose.ui:ui-tooling" debugImplementation "androidx.compose.ui:ui-test-manifest"` : ''} ${!buildFeatures.compose ? ` // Traditional Android Views implementation "com.google.android.material:material:1.11.0" implementation "androidx.constraintlayout:constraintlayout:2.1.4"` : ''} // Lifecycle Components implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.7.0" implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.7.0" ${additionalDependencies} // Testing testImplementation "junit:junit:4.13.2" testImplementation "org.mockito:mockito-core:5.7.0" testImplementation "androidx.arch.core:core-testing:2.2.0" androidTestImplementation "androidx.test.ext:junit:1.1.5" androidTestImplementation "androidx.test.espresso:espresso-core:3.5.1" ${buildFeatures.compose ? ` androidTestImplementation "androidx.compose.ui:ui-test-junit4"` : ''} } \`\`\` ## Project Level build.gradle.kts \`\`\`kotlin plugins { id("com.android.application") version "8.2.2" apply false id("org.jetbrains.kotlin.android") version "1.9.22" apply false ${additionalLibraries.includes('dagger_hilt') ? ' id("com.google.dagger.hilt.android") version "2.48" apply false' : ''} ${buildFeatures.compose ? ' id("org.jetbrains.kotlin.plugin.compose") version "1.9.22" apply false' : ''} } \`\`\` ${proguardRules ? generateProGuardRules() : ''} ## gradle.properties \`\`\`properties # Android Configuration android.useAndroidX=true android.enableJetifier=true # Kotlin Configuration kotlin.code.style=official # Performance Optimizations org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 org.gradle.parallel=true org.gradle.caching=true org.gradle.configureondemand=true # DHIS2 Configuration DHIS2_SDK_VERSION=${dhis2SdkVersion} \`\`\` ## Next Steps 1. **Sync project** - Click "Sync Now" in Android Studio 2. **Configure authentication** - Use \`dhis2_android_setup_authentication\` 3. **Set up data models** - Use \`dhis2_android_generate_data_models\` 4. **Configure sync** - Use \`dhis2_android_setup_sync\` `;
- src/android-generators.ts:17-30 (schema)TypeScript interface defining the input schema for Gradle configuration parameters.export interface GradleConfig { dhis2SdkVersion: string; buildFeatures: { compose?: boolean; viewBinding?: boolean; dataBinding?: boolean; }; proguardRules: boolean; buildVariants: Array<{ name: string; dhis2Instance: string; }>; additionalLibraries: string[]; }
- src/permission-system.ts:156-156 (registration)Tool permission registration mapping the tool to required 'canUseMobileFeatures' permission in the TOOL_PERMISSIONS Map.['dhis2_android_configure_gradle', 'canUseMobileFeatures'],