Batch Uninstaller ist eine native Android-App, die es Nutzern ermöglicht, mehrere installierte Apps mit nur einem Tap zu deinstallieren. Die App bietet eine benutzerfreundliche Oberfläche mit erweiterten Funktionen wie Suche, Sortierung und intelligenter Filterung.
- Kotlin - Moderne, typsichere Programmiersprache für Android
- Android SDK 33 (compileSdk)
- Min SDK 23 (Android 6.0+) - Unterstützung für 95%+ aller Android-Geräte
- AndroidX Core & AppCompat - Moderne Android-Komponenten
- Material Design Components 1.7.0 - Google's Design-System
- RecyclerView - Effiziente Liste für große Datenmengen
- SwipeRefreshLayout - Pull-to-Refresh-Funktionalität
- ConstraintLayout - Flexibles Layout-System
- Material CardView - Moderne Kartenansicht für App-Einträge
- Kotlin Coroutines 1.6.4 - Leichtgewichtige Threads für performante Hintergrundoperationen
- Lifecycle ViewModel & Runtime - Lifecycle-aware Komponenten
- PackageManager API - Zugriff auf installierte Apps und deren Metadaten
- Intent System - Deinstallations-Workflow (ACTION_UNINSTALL_PACKAGE)
- Gradle 7.2.2 - Build-Automatisierung
- Kotlin Gradle Plugin 1.7.10
- Vollständige App-Liste: Zeigt alle installierten User-Apps (System-Apps ausgeblendet)
- App-Informationen: Name, Package-Name, Icon, Größe und Installationsdatum
- Pull-to-Refresh: Aktualisierung der App-Liste per Swipe-Geste
- Checkbox-basierte Auswahl: Einzelne oder multiple Apps auswählen
- Alle auswählen/abwählen: Schnelle Massenauswahl über Menü
- Visuelle Feedback: Ausgewählte Apps werden hervorgehoben
- Echtzeit-Suche: Filtern nach App-Name oder Package-Name
- Case-insensitive: Groß-/Kleinschreibung wird ignoriert
- Instant-Feedback: Ergebnisse werden sofort angezeigt
- Nach Name: Alphabetische Sortierung (A-Z)
- Nach Größe: Größte Apps zuerst
- Nach Installationsdatum: Neueste Apps zuerst
- Ein-Klick-Deinstallation: FloatingActionButton startet Batch-Prozess
- Queue-System: Apps werden sequenziell abgearbeitet
- Bestätigungsdialog: Sicherheitsabfrage vor Massendeinstallation
- Fortschrittsanzeige: Zeigt Anzahl der ausgewählten Apps
// Separation of Concerns
MainActivity.kt // UI-Controller & Lifecycle-Management
AppAdapter.kt // RecyclerView-Adapter mit Selection-State
AppInfo.kt // Data Class für App-Metadaten
UninstallHelper.kt // Business Logic für Batch-Deinstallationprivate fun loadApps() {
CoroutineScope(Dispatchers.Main).launch {
swipeRefreshLayout.isRefreshing = true
withContext(Dispatchers.IO) {
// CPU-intensive Arbeit im Background
val installedApps = packageManager.getInstalledApplications(...)
// Größenberechnung, Sortierung, Filterung
}
// UI-Update auf Main Thread
adapter.updateApps(appList)
}
}class UninstallHelper {
private val uninstallQueue: Queue<AppInfo> = LinkedList()
fun startBatchUninstall(activity: Activity, apps: List<AppInfo>) {
uninstallQueue.clear()
uninstallQueue.addAll(apps)
uninstallNextApp(activity)
}
fun onActivityResult(resultCode: Int, activity: Activity) {
// Nächste App aus Queue verarbeiten
if (uninstallQueue.isNotEmpty()) {
uninstallNextApp(activity)
}
}
}- ViewHolder-Pattern: Recycling von Views für optimale Performance
- DiffUtil-ready: Vorbereitet für effiziente Listen-Updates
- Item-Click-Handling: Lambda-basierte Callbacks für Selektion
- Theming: Konsistente Farbpalette (Primary: #FF5722, Accent: #FFC107)
- Elevation & Shadows: CardView mit 4dp Elevation
- Typography: Roboto-Font mit klarer Hierarchie
- Interactive Elements: FloatingActionButton für Primary Action
<uses-permission android:name="android.permission.REQUEST_DELETE_PACKAGES" />
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"
android:minSdkVersion="30" />val appSize = try {
val appInfo = packageManager.getApplicationInfo(packageName, 0)
File(appInfo.sourceDir).length()
} catch (e: Exception) { 0L }- Vollständige Projektstruktur erstellt
- Alle Core-Features implementiert
- UI/UX Design mit Material Design
- Asynchrone Datenverarbeitung mit Coroutines
- Batch-Deinstallations-System
- Such- und Sortierfunktionen
- Multi-Selektions-Mechanismus
- Gradle-Build-Konfiguration
- AndroidManifest mit Permissions
- Build in Android Studio
- Testing auf physischem Gerät/Emulator
- UI/UX Optimierungen basierend auf User-Feedback
- Play Store Deployment
- Deinstallations-Statistiken
- Backup-Funktion vor Deinstallation
- App-Kategorisierung
- Dark Mode Support
- Mehrsprachige Unterstützung
- Export von App-Listen
- Automatische Deinstallation inaktiver Apps
batch-uninstaller/
├── app/
│ ├── src/
│ │ └── main/
│ │ ├── java/com/batchuninstaller/
│ │ │ ├── MainActivity.kt
│ │ │ ├── AppAdapter.kt
│ │ │ ├── AppInfo.kt
│ │ │ └── UninstallHelper.kt
│ │ ├── res/
│ │ │ ├── layout/
│ │ │ │ ├── activity_main.xml
│ │ │ │ └── item_app.xml
│ │ │ ├── menu/
│ │ │ │ └── main_menu.xml
│ │ │ ├── values/
│ │ │ │ ├── strings.xml
│ │ │ │ ├── colors.xml
│ │ │ │ └── themes.xml
│ │ │ └── drawable/
│ │ └── AndroidManifest.xml
│ └── build.gradle
├── build.gradle
├── settings.gradle
└── gradle.properties
- Projekt in Android Studio öffnen
- Gradle Sync durchführen
- Emulator starten oder Gerät verbinden
- App ausführen (Run 'app')
# Debug Build
./gradlew assembleDebug
# Release Build
./gradlew assembleRelease
# Installation auf verbundenem Gerät
./gradlew installDebug- Lazy Loading: Apps werden asynchron im Hintergrund geladen
- Efficient Filtering: In-Memory-Filterung ohne DB-Zugriffe
- View Recycling: RecyclerView nutzt ViewHolder-Pattern
- Coroutine-Scopes: Lifecycle-aware Coroutines vermeiden Memory Leaks
- Minimal Dependencies: Nur essenzielle Libraries für kleine APK-Größe
- Permission-basiert: Nutzt offizielles Android Permission-System
- User Confirmation: Bestätigungsdialog vor Batch-Deinstallation
- System Apps Protection: System-Apps werden standardmäßig ausgeblendet
- No Root Required: Funktioniert ohne Root-Zugriff
- Android-Nutzer, die regelmäßig Apps testen und wieder entfernen
- Entwickler, die Test-Apps aufräumen möchten
- Power-User, die ihr Gerät optimieren wollen
- Alle, die Speicherplatz durch schnelles Entfernen mehrerer Apps freigeben möchten
Dieses Projekt wurde als MVP-Demonstration entwickelt und zeigt moderne Android-Entwicklungspraktiken mit Kotlin, Coroutines und Material Design.
Entwickelt: November 2025
Version: 1.0
Min. Android Version: 6.0 (API 23)
Target Android Version: 13 (API 33)
Dieses Projekt ist Teil meines Android-Entwicklungsportfolios und demonstriert:
- Saubere Kotlin-Programmierung
- Moderne Android-Architektur
- Asynchrone Programmierung mit Coroutines
- Material Design Implementation
- Complex UI-Interaktionen
- Android System API Integration