160 lines
4.6 KiB
Markdown
160 lines
4.6 KiB
Markdown
# Building ISO Droid
|
|
|
|
This document explains how to build ISO Droid from source and contribute to the project.
|
|
|
|
## Building from Source
|
|
|
|
### Prerequisites
|
|
|
|
**1. isodrive Binary (Required)**
|
|
|
|
ISO Droid requires the `isodrive` binary to function. This binary is the actual tool that communicates with the Linux kernel's USB gadget subsystem to mount ISO/IMG files.
|
|
|
|
- **Source**: The binary is compiled from [nitanmarcel/isodrive](https://github.com/nitanmarcel/isodrive)
|
|
- **Why required**: Android apps cannot directly access USB gadget interfaces - they need a native binary with root privileges
|
|
- **Location**: Place the binary at `app/src/main/assets/bin/isodrive`
|
|
- **Supported architectures**: ARM64 (arm64-v8a), ARM32 (armeabi-v7a), x86, x86_64
|
|
|
|
**How to obtain the binary:**
|
|
|
|
1. Download the latest release from [isodrive-magisk releases](https://github.com/nitanmarcel/isodrive-magisk/releases/latest)
|
|
|
|
2. Extract the `isodrive-magisk-v<version>.zip` file
|
|
|
|
3. The binaries for each architecture are in the `libs/` directory:
|
|
```
|
|
libs/
|
|
├── arm64-v8a/
|
|
│ └── isodrive
|
|
├── armeabi-v7a/
|
|
│ └── isodrive
|
|
├── x86/
|
|
│ └── isodrive
|
|
└── x86_64/
|
|
└── isodrive
|
|
```
|
|
|
|
4. Copy the binary for your target architecture to `app/src/main/assets/bin/isodrive`
|
|
- For most modern devices: use `arm64-v8a/isodrive`
|
|
- The app can bundle multiple architectures if needed
|
|
|
|
### Build Steps
|
|
|
|
```bash
|
|
# Clone the repository
|
|
git clone https://github.com/sargit/ISODroid.git
|
|
cd ISODroid
|
|
|
|
# Ensure isodrive binary is present
|
|
ls -la app/src/main/assets/bin/isodrive
|
|
|
|
# Build debug APK
|
|
./gradlew assembleDebug
|
|
|
|
# Or build release APK (requires signing configuration)
|
|
./gradlew assembleRelease
|
|
```
|
|
|
|
The compiled APK will be in:
|
|
- Debug: `app/build/outputs/apk/debug/app-debug.apk`
|
|
- Release: `app/build/outputs/apk/release/app-release.apk`
|
|
|
|
## Contributing
|
|
|
|
### Adding OS Icons
|
|
|
|
OS icons are displayed in the file browser when ISO/IMG filenames match the icon name.
|
|
|
|
**Steps:**
|
|
|
|
1. Add your SVG file to `app/src/main/assets/osicons/`
|
|
- Filename should be lowercase (e.g., `ubuntu.svg`, `archlinux.svg`)
|
|
- SVG should be simple and recognizable
|
|
- Recommended: Get icons from [Simple Icons](https://simpleicons.org/)
|
|
|
|
2. The app automatically detects and matches icons:
|
|
- Filename `ubuntu-22.04-desktop-amd64.iso` → matches `ubuntu.svg`
|
|
- Filename `archlinux-2024.12.01-x86_64.iso` → matches `archlinux.svg`
|
|
- Matching is case-insensitive and searches for icon name within filename
|
|
|
|
3. **Symlinks for filename variations:**
|
|
|
|
Sometimes ISO files use shortened or alternate names. Create symlinks to match these variations:
|
|
```bash
|
|
cd app/src/main/assets/osicons/
|
|
|
|
# Linux Mint ISOs often named "mint-*.iso"
|
|
ln -s linuxmint.svg mint.svg
|
|
|
|
# Windows ISOs might be "Win11.iso" or "Win.iso"
|
|
ln -s windows.svg win.svg
|
|
ln -s windows.svg win11.svg
|
|
|
|
# FreeBSD might be shortened
|
|
ln -s freebsd.svg bsd.svg
|
|
```
|
|
|
|
This ensures `mint-21.3-cinnamon.iso` matches even though the icon is `linuxmint.svg`
|
|
|
|
4. Submit a pull request with your new icon(s) and any necessary symlinks
|
|
|
|
### Adding OS Download Links
|
|
|
|
The Downloads screen shows curated links to operating system ISOs.
|
|
|
|
**Steps:**
|
|
|
|
1. Edit `app/src/main/assets/os.json`
|
|
|
|
2. Add a new entry with all required fields:
|
|
|
|
```json
|
|
{
|
|
"name": "Ubuntu Desktop",
|
|
"category": "Linux",
|
|
"description": "Popular Linux distribution with GNOME desktop",
|
|
"icon": "ubuntu.svg",
|
|
"url": "https://ubuntu.com/download/desktop"
|
|
}
|
|
```
|
|
|
|
**Field descriptions:**
|
|
|
|
- `name` (required): Display name for the OS
|
|
- `category` (required): One of: `Linux`, `BSD`, `Windows`, or `Recovery`
|
|
- `description` (required): Brief description (one sentence)
|
|
- `icon` (required): Filename of SVG in `osicons/` directory, or `null` if no icon
|
|
- `url` (required): Direct link to download page or ISO file
|
|
|
|
**Example with no icon:**
|
|
```json
|
|
{
|
|
"name": "Custom Linux",
|
|
"category": "Linux",
|
|
"description": "A custom Linux distribution",
|
|
"icon": null,
|
|
"url": "https://example.com/download"
|
|
}
|
|
```
|
|
|
|
3. Test your changes:
|
|
- Build the app
|
|
- Navigate to Downloads screen
|
|
- Verify your entry appears in the correct category
|
|
- Verify the icon displays (if provided)
|
|
- Verify the link opens correctly
|
|
|
|
4. Submit a pull request with:
|
|
- Updated `os.json`
|
|
- New SVG icon in `osicons/` (if applicable)
|
|
- Brief description of what you added
|
|
|
|
## Testing
|
|
|
|
Before submitting a PR, test on a real rooted Android device:
|
|
|
|
- [ ] App builds successfully
|
|
- [ ] New OS icon displays correctly
|
|
- [ ] New download link opens properly
|
|
- [ ] No crashes or errors in logcat
|