- 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!