- APK Merging: Merge XAPK/APKM/ZIP files containing split APKs into a single installable APK
- Proper Signing: Sign merged APKs with v1 (JAR) + v2 + v3 signature schemes for maximum compatibility
- App Extraction: Extract installed apps (including split APKs) and create XAPK files
- Custom Keys: Generate and manage custom RSA 2048-bit signing keys with BKS keystores
- File Browser: Built-in file picker with modern Material You design
- Real-time Logs: Live console logs for merge and extraction operations
- Material You: Beautiful UI with dynamic theming and amber/gunmetal color scheme
- Batch Operations: Extract multiple apps at once
Modern Android apps often come as split APKs (XAPK, APKM) which cannot be installed directly. SplitKiller merges these splits into a single APK that:
- β Installs on any Android device (7.0+)
- β Preserves all resources, libraries, and assets
- β Properly signed with industry-standard tools
- β Works with large APKs (800MB+) without memory issues
- Language: Kotlin
- UI: Jetpack Compose with Material 3
- Architecture: MVVM (Model-View-ViewModel)
- Navigation: Navigation Compose
- Storage: DataStore for preferences
- Signing: Google's official
apksiglibrary (v8.7.2) - APK Manipulation: APKEditor library
- Cryptography: BouncyCastle (bcprov, bcpkix)
- Min SDK: 24 (Android 7.0 Nougat)
- Target SDK: 35 (Android 15)
- Compile SDK: 36
- Permissions:
READ_EXTERNAL_STORAGE/READ_MEDIA_IMAGES(Android 13+)WRITE_EXTERNAL_STORAGE(Android 12 and below)MANAGE_EXTERNAL_STORAGE(Android 11+)REQUEST_INSTALL_PACKAGESQUERY_ALL_PACKAGES
- Clone the repository:
git clone https://github.com/THToufique/SplitKiller.git
cd SplitKiller-
Open in Android Studio (Ladybug or later)
-
Build and run on your device
- Navigate to Merge screen
- Tap Select File to choose an XAPK/APKM/ZIP file
- Select signature scheme (default: v1+v2+v3)
- Choose signing key (default: testkey)
- Tap Merge APK
- Find merged APK in
/storage/emulated/0/SplitKiller/
- Navigate to Extract screen
- Browse installed apps (use search to filter)
- Select apps to extract
- Tap Extract Selected
- Find XAPK files in
/storage/emulated/0/SplitKiller/
- Navigate to Key Manager screen
- Tap Create New Key
- Enter key details (alias, password, organization)
- Generated keys are stored in app's private directory
- Use custom keys when merging APKs
app/src/main/java/com/ripp3r/splitkiller/
βββ data/
β βββ ApkMerger.kt # Core APK merging logic
β βββ KeystoreManager.kt # APK signing with apksig
β βββ AppExtractor.kt # Extract installed apps
β βββ SettingsManager.kt # DataStore preferences
βββ model/
β βββ AppInfo.kt # App information data class
β βββ SignatureScheme.kt # Signature scheme enum
β βββ SigningKey.kt # Signing key data class
βββ ui/
β βββ Navigation.kt # Navigation setup
β βββ screens/
β β βββ MainScreen.kt # Dashboard + extraction logs
β β βββ MergeScreen.kt # File selection + merge logs
β β βββ ExtractScreen.kt # App list with search
β β βββ FileBrowserSheet.kt # Custom file picker
β β βββ KeyManagerScreen.kt # Key management
β β βββ SettingsScreen.kt # App settings
β βββ theme/
β βββ Color.kt # Material You colors
β βββ Theme.kt # Theme configuration
β βββ Type.kt # Typography
βββ viewmodel/
β βββ MergeViewModel.kt # Merge operations
β βββ ExtractViewModel.kt # Extract operations
β βββ KeyManagerViewModel.kt # Key management
β βββ SettingsViewModel.kt # Settings
βββ util/
β βββ AppLogger.kt # Logging system
βββ MainActivity.kt # Entry point
Initially, we implemented custom v2/v3 signing, but it caused OutOfMemoryError on large APKs (800MB+). Google's official apksig library:
- β Memory-efficient streaming
- β Proper v1+v2+v3 implementation
- β Same library used by Android Studio
- β Battle-tested and maintained
APKEditor provides:
- Proper resource table merging using
ApkBundle.loadApkDirectory() - Manifest manipulation
- Efficient handling of large APK files
- No memory issues with 800MB+ APKs
All merged APKs and extracted XAPKs are saved to:
/storage/emulated/0/SplitKiller/
- Material You Design: Dynamic theming with system colors
- Bottom Sheets: Modern popup sheets for file selection and options
- Real-time Logs: Color-coded console logs with Material Icons
- Dark/Light Themes: Supports system, light, and dark themes
- Responsive: Adapts to different screen sizes
Solution: We use Google's apksig library which properly signs APKs with v1+v2+v3 schemes.
Solution: apksig handles memory efficiently with streaming.
Solution: We use ApkBundle.loadApkDirectory() for proper resource table merging.
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Google's apksig - Official APK signing library
- APKEditor - APK manipulation library
- BouncyCastle - Cryptography library
- Material Design 3 - UI design system
Made with β€οΈ using Kotlin and Jetpack Compose
β Star this repo if you find it useful!