Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
c34900a2b1
|
|||
|
f654ba52a1
|
|||
|
e7735a0446
|
|||
|
1e0d5dd640
|
|||
|
2672f8dfa5
|
|||
|
157f5103f1
|
|||
|
bcf0ffec4c
|
|||
|
8a08b31f32
|
|||
|
b974fd1b2b
|
|||
|
881bb70e99
|
|||
|
a0012b4d5e
|
25
CHANGELOG.md
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
# Changelog
|
||||||
|
|
||||||
|
All notable changes to this project will be documented in this file.
|
||||||
|
|
||||||
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||||
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
|
## [1.1] - 2025-03-10
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- New app icon
|
||||||
|
|
||||||
|
## [1.0] - 2025-03-10
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Mount ISO/IMG files as USB mass storage or CD-ROM
|
||||||
|
- Create blank IMG files for writable USB drives
|
||||||
|
- Read-only or read-write mount options
|
||||||
|
- Persistent notification with quick unmount button
|
||||||
|
- OS-specific icons for popular distributions (Linux, BSD, etc.)
|
||||||
|
- Download links to popular operating systems (Linux, BSD, Windows, Recovery tools)
|
||||||
|
- Rename and delete files
|
||||||
|
- Material 3 dynamic theming with dark mode support
|
||||||
|
- Support for Magisk, KernelSU, and APatch root solutions
|
||||||
|
- Bundled isodrive binary for all architectures (arm64-v8a, armeabi-v7a, x86_64, x86)
|
||||||
10
README.md
@@ -4,11 +4,9 @@ Android app for mounting ISO/IMG files as USB mass storage or CD-ROM devices on
|
|||||||
|
|
||||||
## Screenshots
|
## Screenshots
|
||||||
|
|
||||||
| OS images listing | Mounted Status | Mount Options Dialog |
|
| OS images listing | Mounted Status | Mount Options Dialog | Create IMG Dialog | Download OS ISOs |
|
||||||
|:--:|:--:|:--:|
|
|:--:|:--:|:--:|:--:|:--:|
|
||||||
|  |  |  |
|
|  |  |  |  |  |
|
||||||
| **Create IMG Dialog** | **Download OS ISOs** | |
|
|
||||||
|  |  | |
|
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
@@ -65,7 +63,7 @@ Android app for mounting ISO/IMG files as USB mass storage or CD-ROM devices on
|
|||||||
|
|
||||||
- [isodrive](https://github.com/nitanmarcel/isodrive) by nitanmarcel - The CLI tool that powers ISO Droid
|
- [isodrive](https://github.com/nitanmarcel/isodrive) by nitanmarcel - The CLI tool that powers ISO Droid
|
||||||
- [ISODriveUT](https://github.com/fredldotme/ISODriveUT) by fredldotme - Original inspiration for isodrive
|
- [ISODriveUT](https://github.com/fredldotme/ISODriveUT) by fredldotme - Original inspiration for isodrive
|
||||||
- OS icons from [Simple Icons](https://simpleicons.org/)
|
- OS icons from [Simple Icons](https://simpleicons.org/) and [SVG Repo](https://www.svgrepo.com/)
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ android {
|
|||||||
minSdk = 26
|
minSdk = 26
|
||||||
targetSdk = 36
|
targetSdk = 36
|
||||||
versionCode = 1
|
versionCode = 1
|
||||||
versionName = "1.0"
|
versionName = "1.1"
|
||||||
|
|
||||||
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2026 Shiham Abdul Rahman <shihaam@shihaam.dev>
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
package sh.sar.isodroid
|
package sh.sar.isodroid
|
||||||
|
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
@@ -12,7 +17,7 @@ class ISODroidApp : Application() {
|
|||||||
Shell.enableVerboseLogging = BuildConfig.DEBUG
|
Shell.enableVerboseLogging = BuildConfig.DEBUG
|
||||||
Shell.setDefaultBuilder(
|
Shell.setDefaultBuilder(
|
||||||
Shell.Builder.create()
|
Shell.Builder.create()
|
||||||
.setFlags(Shell.FLAG_MOUNT_MASTER or Shell.FLAG_REDIRECT_STDERR)
|
.setFlags(Shell.FLAG_MOUNT_MASTER)
|
||||||
.setTimeout(10)
|
.setTimeout(10)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -23,7 +28,7 @@ class ISODroidApp : Application() {
|
|||||||
Shell.enableVerboseLogging = true
|
Shell.enableVerboseLogging = true
|
||||||
Shell.setDefaultBuilder(
|
Shell.setDefaultBuilder(
|
||||||
Shell.Builder.create()
|
Shell.Builder.create()
|
||||||
.setFlags(Shell.FLAG_MOUNT_MASTER or Shell.FLAG_REDIRECT_STDERR)
|
.setFlags(Shell.FLAG_MOUNT_MASTER)
|
||||||
.setTimeout(10)
|
.setTimeout(10)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2026 Shiham Abdul Rahman <shihaam@shihaam.dev>
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
package sh.sar.isodroid
|
package sh.sar.isodroid
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2026 Shiham Abdul Rahman <shihaam@shihaam.dev>
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
package sh.sar.isodroid.data
|
package sh.sar.isodroid.data
|
||||||
|
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2026 Shiham Abdul Rahman <shihaam@shihaam.dev>
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
package sh.sar.isodroid.data
|
package sh.sar.isodroid.data
|
||||||
|
|
||||||
data class MountOptions(
|
data class MountOptions(
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2026 Shiham Abdul Rahman <shihaam@shihaam.dev>
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
package sh.sar.isodroid.data
|
package sh.sar.isodroid.data
|
||||||
|
|
||||||
enum class MountType {
|
enum class MountType {
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2026 Shiham Abdul Rahman <shihaam@shihaam.dev>
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
package sh.sar.isodroid.isodrive
|
package sh.sar.isodroid.isodrive
|
||||||
|
|
||||||
import kotlinx.coroutines.flow.MutableSharedFlow
|
import kotlinx.coroutines.flow.MutableSharedFlow
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2026 Shiham Abdul Rahman <shihaam@shihaam.dev>
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
package sh.sar.isodroid.isodrive
|
package sh.sar.isodroid.isodrive
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2026 Shiham Abdul Rahman <shihaam@shihaam.dev>
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
package sh.sar.isodroid.isodrive
|
package sh.sar.isodroid.isodrive
|
||||||
|
|
||||||
import kotlinx.coroutines.flow.MutableSharedFlow
|
import kotlinx.coroutines.flow.MutableSharedFlow
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2026 Shiham Abdul Rahman <shihaam@shihaam.dev>
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
package sh.sar.isodroid.notification
|
package sh.sar.isodroid.notification
|
||||||
|
|
||||||
import android.content.BroadcastReceiver
|
import android.content.BroadcastReceiver
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2026 Shiham Abdul Rahman <shihaam@shihaam.dev>
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
package sh.sar.isodroid.notification
|
package sh.sar.isodroid.notification
|
||||||
|
|
||||||
import android.app.NotificationChannel
|
import android.app.NotificationChannel
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2026 Shiham Abdul Rahman <shihaam@shihaam.dev>
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
package sh.sar.isodroid.notification
|
package sh.sar.isodroid.notification
|
||||||
|
|
||||||
import android.content.BroadcastReceiver
|
import android.content.BroadcastReceiver
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2026 Shiham Abdul Rahman <shihaam@shihaam.dev>
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
package sh.sar.isodroid.root
|
package sh.sar.isodroid.root
|
||||||
|
|
||||||
import com.topjohnwu.superuser.Shell
|
import com.topjohnwu.superuser.Shell
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2026 Shiham Abdul Rahman <shihaam@shihaam.dev>
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
package sh.sar.isodroid.ui.components
|
package sh.sar.isodroid.ui.components
|
||||||
|
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2026 Shiham Abdul Rahman <shihaam@shihaam.dev>
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
package sh.sar.isodroid.ui.components
|
package sh.sar.isodroid.ui.components
|
||||||
|
|
||||||
import androidx.compose.foundation.ExperimentalFoundationApi
|
import androidx.compose.foundation.ExperimentalFoundationApi
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2026 Shiham Abdul Rahman <shihaam@shihaam.dev>
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
package sh.sar.isodroid.ui.components
|
package sh.sar.isodroid.ui.components
|
||||||
|
|
||||||
import androidx.compose.foundation.clickable
|
import androidx.compose.foundation.clickable
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2026 Shiham Abdul Rahman <shihaam@shihaam.dev>
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
package sh.sar.isodroid.ui.components
|
package sh.sar.isodroid.ui.components
|
||||||
|
|
||||||
import androidx.compose.foundation.layout.Arrangement
|
import androidx.compose.foundation.layout.Arrangement
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2026 Shiham Abdul Rahman <shihaam@shihaam.dev>
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
package sh.sar.isodroid.ui.components
|
package sh.sar.isodroid.ui.components
|
||||||
|
|
||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2026 Shiham Abdul Rahman <shihaam@shihaam.dev>
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
package sh.sar.isodroid.ui.screens
|
package sh.sar.isodroid.ui.screens
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2026 Shiham Abdul Rahman <shihaam@shihaam.dev>
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
package sh.sar.isodroid.ui.screens
|
package sh.sar.isodroid.ui.screens
|
||||||
|
|
||||||
import androidx.compose.foundation.layout.Box
|
import androidx.compose.foundation.layout.Box
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2026 Shiham Abdul Rahman <shihaam@shihaam.dev>
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
package sh.sar.isodroid.ui.screens
|
package sh.sar.isodroid.ui.screens
|
||||||
|
|
||||||
import android.Manifest
|
import android.Manifest
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2026 Shiham Abdul Rahman <shihaam@shihaam.dev>
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
package sh.sar.isodroid.ui.screens
|
package sh.sar.isodroid.ui.screens
|
||||||
|
|
||||||
import android.Manifest
|
import android.Manifest
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2026 Shiham Abdul Rahman <shihaam@shihaam.dev>
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
package sh.sar.isodroid.ui.theme
|
package sh.sar.isodroid.ui.theme
|
||||||
|
|
||||||
import androidx.compose.ui.graphics.Color
|
import androidx.compose.ui.graphics.Color
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2026 Shiham Abdul Rahman <shihaam@shihaam.dev>
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
package sh.sar.isodroid.ui.theme
|
package sh.sar.isodroid.ui.theme
|
||||||
|
|
||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2026 Shiham Abdul Rahman <shihaam@shihaam.dev>
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
package sh.sar.isodroid.ui.theme
|
package sh.sar.isodroid.ui.theme
|
||||||
|
|
||||||
import androidx.compose.material3.Typography
|
import androidx.compose.material3.Typography
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2026 Shiham Abdul Rahman <shihaam@shihaam.dev>
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
package sh.sar.isodroid.viewmodel
|
package sh.sar.isodroid.viewmodel
|
||||||
|
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
|
|||||||
@@ -4,167 +4,10 @@
|
|||||||
android:height="108dp"
|
android:height="108dp"
|
||||||
android:viewportWidth="108"
|
android:viewportWidth="108"
|
||||||
android:viewportHeight="108">
|
android:viewportHeight="108">
|
||||||
|
|
||||||
|
<!-- ISODroid Background - Clean Android Green -->
|
||||||
<path
|
<path
|
||||||
android:fillColor="#3DDC84"
|
android:fillColor="#3DDC84"
|
||||||
android:pathData="M0,0h108v108h-108z" />
|
android:pathData="M0,0h108v108h-108z" />
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M9,0L9,108"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M19,0L19,108"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M29,0L29,108"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M39,0L39,108"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M49,0L49,108"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M59,0L59,108"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M69,0L69,108"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M79,0L79,108"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M89,0L89,108"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M99,0L99,108"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M0,9L108,9"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M0,19L108,19"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M0,29L108,29"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M0,39L108,39"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M0,49L108,49"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M0,59L108,59"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M0,69L108,69"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M0,79L108,79"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M0,89L108,89"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M0,99L108,99"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M19,29L89,29"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M19,39L89,39"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M19,49L89,49"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M19,59L89,59"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M19,69L89,69"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M19,79L89,79"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M29,19L29,89"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M39,19L39,89"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M49,19L49,89"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M59,19L59,89"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M69,19L69,89"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M79,19L79,89"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
</vector>
|
</vector>
|
||||||
|
|||||||
@@ -1,30 +1,99 @@
|
|||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:aapt="http://schemas.android.com/aapt"
|
|
||||||
android:width="108dp"
|
android:width="108dp"
|
||||||
android:height="108dp"
|
android:height="108dp"
|
||||||
android:viewportWidth="108"
|
android:viewportWidth="108"
|
||||||
android:viewportHeight="108">
|
android:viewportHeight="108">
|
||||||
<path android:pathData="M31,63.928c0,0 6.4,-11 12.1,-13.1c7.2,-2.6 26,-1.4 26,-1.4l38.1,38.1L107,108.928l-32,-1L31,63.928z">
|
|
||||||
<aapt:attr name="android:fillColor">
|
<!-- ISODroid Launcher Icon Foreground -->
|
||||||
<gradient
|
<!-- Safe zone is 66dp centered (21-87 in 108dp viewport) -->
|
||||||
android:endX="85.84757"
|
|
||||||
android:endY="92.4963"
|
<!-- Left antenna with ball -->
|
||||||
android:startX="42.9492"
|
|
||||||
android:startY="49.59793"
|
|
||||||
android:type="linear">
|
|
||||||
<item
|
|
||||||
android:color="#44000000"
|
|
||||||
android:offset="0.0" />
|
|
||||||
<item
|
|
||||||
android:color="#00000000"
|
|
||||||
android:offset="1.0" />
|
|
||||||
</gradient>
|
|
||||||
</aapt:attr>
|
|
||||||
</path>
|
|
||||||
<path
|
<path
|
||||||
android:fillColor="#FFFFFF"
|
android:fillColor="#FFFFFF"
|
||||||
android:fillType="nonZero"
|
android:pathData="M38,24 a3,3 0 1,1 0.01,0"/>
|
||||||
android:pathData="M65.3,45.828l3.8,-6.6c0.2,-0.4 0.1,-0.9 -0.3,-1.1c-0.4,-0.2 -0.9,-0.1 -1.1,0.3l-3.9,6.7c-6.3,-2.8 -13.4,-2.8 -19.7,0l-3.9,-6.7c-0.2,-0.4 -0.7,-0.5 -1.1,-0.3C38.8,38.328 38.7,38.828 38.9,39.228l3.8,6.6C36.2,49.428 31.7,56.028 31,63.928h46C76.3,56.028 71.8,49.428 65.3,45.828zM43.4,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2c-0.3,-0.7 -0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C45.3,56.528 44.5,57.328 43.4,57.328L43.4,57.328zM64.6,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2s-0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C66.5,56.528 65.6,57.328 64.6,57.328L64.6,57.328z"
|
<path
|
||||||
android:strokeWidth="1"
|
android:fillColor="#FFFFFF"
|
||||||
android:strokeColor="#00000000" />
|
android:strokeColor="#FFFFFF"
|
||||||
|
android:strokeWidth="3.5"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M39.5,26.5 L44,33"/>
|
||||||
|
|
||||||
|
<!-- Right antenna with ball -->
|
||||||
|
<path
|
||||||
|
android:fillColor="#FFFFFF"
|
||||||
|
android:pathData="M70,24 a3,3 0 1,1 0.01,0"/>
|
||||||
|
<path
|
||||||
|
android:fillColor="#FFFFFF"
|
||||||
|
android:strokeColor="#FFFFFF"
|
||||||
|
android:strokeWidth="3.5"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M68.5,26.5 L64,33"/>
|
||||||
|
|
||||||
|
<!-- Droid head -->
|
||||||
|
<path
|
||||||
|
android:fillColor="#FFFFFF"
|
||||||
|
android:pathData="M34,42 Q34,30 54,30 Q74,30 74,42 L74,56 Q74,62 68,62 L40,62 Q34,62 34,56 Z"/>
|
||||||
|
|
||||||
|
<!-- Left eye -->
|
||||||
|
<path
|
||||||
|
android:fillColor="#3DDC84"
|
||||||
|
android:pathData="M44,46 a4,4 0 1,0 0.01,0"/>
|
||||||
|
|
||||||
|
<!-- Right eye -->
|
||||||
|
<path
|
||||||
|
android:fillColor="#3DDC84"
|
||||||
|
android:pathData="M64,46 a4,4 0 1,0 0.01,0"/>
|
||||||
|
|
||||||
|
<!-- USB Trident Symbol -->
|
||||||
|
<!-- Main vertical stem -->
|
||||||
|
<path
|
||||||
|
android:fillColor="#FFFFFF"
|
||||||
|
android:strokeColor="#FFFFFF"
|
||||||
|
android:strokeWidth="5"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M54,62 L54,88"/>
|
||||||
|
|
||||||
|
<!-- Horizontal bar -->
|
||||||
|
<path
|
||||||
|
android:fillColor="#FFFFFF"
|
||||||
|
android:strokeColor="#FFFFFF"
|
||||||
|
android:strokeWidth="4"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M40,70 L68,70"/>
|
||||||
|
|
||||||
|
<!-- Left branch -->
|
||||||
|
<path
|
||||||
|
android:fillColor="#FFFFFF"
|
||||||
|
android:strokeColor="#FFFFFF"
|
||||||
|
android:strokeWidth="3.5"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M40,70 L40,76"/>
|
||||||
|
|
||||||
|
<!-- Left terminal (rectangle) -->
|
||||||
|
<path
|
||||||
|
android:fillColor="#FFFFFF"
|
||||||
|
android:pathData="M36,76 L44,76 L44,82 L36,82 Z"/>
|
||||||
|
|
||||||
|
<!-- Right branch -->
|
||||||
|
<path
|
||||||
|
android:fillColor="#FFFFFF"
|
||||||
|
android:strokeColor="#FFFFFF"
|
||||||
|
android:strokeWidth="3.5"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M68,70 L68,76"/>
|
||||||
|
|
||||||
|
<!-- Right terminal (circle) -->
|
||||||
|
<path
|
||||||
|
android:fillColor="#FFFFFF"
|
||||||
|
android:pathData="M68,80 a4,4 0 1,0 0.01,0"/>
|
||||||
|
|
||||||
|
<!-- USB bottom arrow -->
|
||||||
|
<path
|
||||||
|
android:fillColor="#FFFFFF"
|
||||||
|
android:strokeColor="#FFFFFF"
|
||||||
|
android:strokeWidth="4"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:pathData="M48,88 L54,94 L60,88"/>
|
||||||
|
|
||||||
</vector>
|
</vector>
|
||||||
90
app/src/main/res/drawable/ic_launcher_monochrome.xml
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="108dp"
|
||||||
|
android:height="108dp"
|
||||||
|
android:viewportWidth="108"
|
||||||
|
android:viewportHeight="108">
|
||||||
|
|
||||||
|
<!-- ISODroid Monochrome Icon for Material You Theming -->
|
||||||
|
<!-- This icon uses a single color that Android will tint based on wallpaper -->
|
||||||
|
|
||||||
|
<!-- Left antenna with ball -->
|
||||||
|
<path
|
||||||
|
android:fillColor="#000000"
|
||||||
|
android:pathData="M38,24 a3,3 0 1,1 0.01,0"/>
|
||||||
|
<path
|
||||||
|
android:fillColor="#000000"
|
||||||
|
android:strokeColor="#000000"
|
||||||
|
android:strokeWidth="3.5"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M39.5,26.5 L44,33"/>
|
||||||
|
|
||||||
|
<!-- Right antenna with ball -->
|
||||||
|
<path
|
||||||
|
android:fillColor="#000000"
|
||||||
|
android:pathData="M70,24 a3,3 0 1,1 0.01,0"/>
|
||||||
|
<path
|
||||||
|
android:fillColor="#000000"
|
||||||
|
android:strokeColor="#000000"
|
||||||
|
android:strokeWidth="3.5"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M68.5,26.5 L64,33"/>
|
||||||
|
|
||||||
|
<!-- Droid head with hollow eyes -->
|
||||||
|
<path
|
||||||
|
android:fillColor="#000000"
|
||||||
|
android:fillType="evenOdd"
|
||||||
|
android:pathData="M34,42 Q34,30 54,30 Q74,30 74,42 L74,56 Q74,62 68,62 L40,62 Q34,62 34,56 Z M44,50 a4,4 0 1,0 0.01,0 M64,50 a4,4 0 1,0 0.01,0"/>
|
||||||
|
|
||||||
|
<!-- USB Trident Symbol -->
|
||||||
|
<!-- Main vertical stem -->
|
||||||
|
<path
|
||||||
|
android:fillColor="#000000"
|
||||||
|
android:strokeColor="#000000"
|
||||||
|
android:strokeWidth="5"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M54,62 L54,88"/>
|
||||||
|
|
||||||
|
<!-- Horizontal bar -->
|
||||||
|
<path
|
||||||
|
android:fillColor="#000000"
|
||||||
|
android:strokeColor="#000000"
|
||||||
|
android:strokeWidth="4"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M40,70 L68,70"/>
|
||||||
|
|
||||||
|
<!-- Left branch -->
|
||||||
|
<path
|
||||||
|
android:fillColor="#000000"
|
||||||
|
android:strokeColor="#000000"
|
||||||
|
android:strokeWidth="3.5"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M40,70 L40,76"/>
|
||||||
|
|
||||||
|
<!-- Left terminal (rectangle) -->
|
||||||
|
<path
|
||||||
|
android:fillColor="#000000"
|
||||||
|
android:pathData="M36,76 L44,76 L44,82 L36,82 Z"/>
|
||||||
|
|
||||||
|
<!-- Right branch -->
|
||||||
|
<path
|
||||||
|
android:fillColor="#000000"
|
||||||
|
android:strokeColor="#000000"
|
||||||
|
android:strokeWidth="3.5"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M68,70 L68,76"/>
|
||||||
|
|
||||||
|
<!-- Right terminal (circle) -->
|
||||||
|
<path
|
||||||
|
android:fillColor="#000000"
|
||||||
|
android:pathData="M68,80 a4,4 0 1,0 0.01,0"/>
|
||||||
|
|
||||||
|
<!-- USB bottom arrow -->
|
||||||
|
<path
|
||||||
|
android:fillColor="#000000"
|
||||||
|
android:strokeColor="#000000"
|
||||||
|
android:strokeWidth="4"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:pathData="M48,88 L54,94 L60,88"/>
|
||||||
|
|
||||||
|
</vector>
|
||||||
@@ -4,7 +4,67 @@
|
|||||||
android:viewportWidth="24"
|
android:viewportWidth="24"
|
||||||
android:viewportHeight="24"
|
android:viewportHeight="24"
|
||||||
android:tint="?attr/colorControlNormal">
|
android:tint="?attr/colorControlNormal">
|
||||||
|
|
||||||
|
<!-- ISODroid Notification Icon -->
|
||||||
|
|
||||||
|
<!-- Left antenna ball -->
|
||||||
<path
|
<path
|
||||||
android:fillColor="@android:color/white"
|
android:fillColor="@android:color/white"
|
||||||
android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,16.5c-2.49,0 -4.5,-2.01 -4.5,-4.5S9.51,7.5 12,7.5s4.5,2.01 4.5,4.5 -2.01,4.5 -4.5,4.5zM12,9.5c-1.38,0 -2.5,1.12 -2.5,2.5s1.12,2.5 2.5,2.5 2.5,-1.12 2.5,-2.5 -1.12,-2.5 -2.5,-2.5z"/>
|
android:pathData="M7.5,2.5 m-0.9,0 a0.9,0.9 0 1,1 1.8,0 a0.9,0.9 0 1,1 -1.8,0"/>
|
||||||
|
|
||||||
|
<!-- Left antenna stem -->
|
||||||
|
<path
|
||||||
|
android:fillColor="@android:color/white"
|
||||||
|
android:pathData="M7.8,3.3 L8.8,3.8 L9.3,5.3 L8.3,5.5 Z"/>
|
||||||
|
|
||||||
|
<!-- Right antenna ball -->
|
||||||
|
<path
|
||||||
|
android:fillColor="@android:color/white"
|
||||||
|
android:pathData="M16.5,2.5 m-0.9,0 a0.9,0.9 0 1,1 1.8,0 a0.9,0.9 0 1,1 -1.8,0"/>
|
||||||
|
|
||||||
|
<!-- Right antenna stem -->
|
||||||
|
<path
|
||||||
|
android:fillColor="@android:color/white"
|
||||||
|
android:pathData="M16.2,3.3 L15.2,3.8 L14.7,5.3 L15.7,5.5 Z"/>
|
||||||
|
|
||||||
|
<!-- Droid head -->
|
||||||
|
<path
|
||||||
|
android:fillColor="@android:color/white"
|
||||||
|
android:pathData="M8,8 Q8,5.2 12,5.2 Q16,5.2 16,8 L16,11 Q16,12.5 14.5,12.5 L9.5,12.5 Q8,12.5 8,11 Z"/>
|
||||||
|
|
||||||
|
<!-- USB main stem -->
|
||||||
|
<path
|
||||||
|
android:fillColor="@android:color/white"
|
||||||
|
android:pathData="M11.2,12.5 L12.8,12.5 L12.8,20 L11.2,20 Z"/>
|
||||||
|
|
||||||
|
<!-- USB horizontal bar -->
|
||||||
|
<path
|
||||||
|
android:fillColor="@android:color/white"
|
||||||
|
android:pathData="M9,14.8 L15,14.8 L15,16 L9,16 Z"/>
|
||||||
|
|
||||||
|
<!-- USB left branch vertical -->
|
||||||
|
<path
|
||||||
|
android:fillColor="@android:color/white"
|
||||||
|
android:pathData="M8.5,16 L9.6,16 L9.6,17 L8.5,17 Z"/>
|
||||||
|
|
||||||
|
<!-- USB left terminal rectangle -->
|
||||||
|
<path
|
||||||
|
android:fillColor="@android:color/white"
|
||||||
|
android:pathData="M8,17 L10.2,17 L10.2,19.2 L8,19.2 Z"/>
|
||||||
|
|
||||||
|
<!-- USB right branch vertical -->
|
||||||
|
<path
|
||||||
|
android:fillColor="@android:color/white"
|
||||||
|
android:pathData="M14.4,16 L15.5,16 L15.5,17.5 L14.4,17.5 Z"/>
|
||||||
|
|
||||||
|
<!-- USB right terminal circle -->
|
||||||
|
<path
|
||||||
|
android:fillColor="@android:color/white"
|
||||||
|
android:pathData="M15,18.5 m-1.2,0 a1.2,1.2 0 1,1 2.4,0 a1.2,1.2 0 1,1 -2.4,0"/>
|
||||||
|
|
||||||
|
<!-- USB bottom arrow -->
|
||||||
|
<path
|
||||||
|
android:fillColor="@android:color/white"
|
||||||
|
android:pathData="M10.5,20 L12,22 L13.5,20 Z"/>
|
||||||
|
|
||||||
</vector>
|
</vector>
|
||||||
|
|||||||
@@ -2,5 +2,5 @@
|
|||||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<background android:drawable="@drawable/ic_launcher_background" />
|
<background android:drawable="@drawable/ic_launcher_background" />
|
||||||
<foreground android:drawable="@drawable/ic_launcher_foreground" />
|
<foreground android:drawable="@drawable/ic_launcher_foreground" />
|
||||||
<monochrome android:drawable="@drawable/ic_launcher_foreground" />
|
<monochrome android:drawable="@drawable/ic_launcher_monochrome" />
|
||||||
</adaptive-icon>
|
</adaptive-icon>
|
||||||
@@ -2,5 +2,5 @@
|
|||||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<background android:drawable="@drawable/ic_launcher_background" />
|
<background android:drawable="@drawable/ic_launcher_background" />
|
||||||
<foreground android:drawable="@drawable/ic_launcher_foreground" />
|
<foreground android:drawable="@drawable/ic_launcher_foreground" />
|
||||||
<monochrome android:drawable="@drawable/ic_launcher_foreground" />
|
<monochrome android:drawable="@drawable/ic_launcher_monochrome" />
|
||||||
</adaptive-icon>
|
</adaptive-icon>
|
||||||
77
build_isodrive.sh
Executable file
@@ -0,0 +1,77 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
# Build isodrive from source for all Android architectures
|
||||||
|
# Requires: Android NDK (or runs via nix-shell on NixOS)
|
||||||
|
|
||||||
|
SCRIPT_DIR=$(dirname "$(realpath "$0")")
|
||||||
|
ISODRIVE_DIR="/tmp/isodrive"
|
||||||
|
OUTPUT_DIR="$SCRIPT_DIR/app/src/main/assets/bin"
|
||||||
|
|
||||||
|
# Clone isodrive source
|
||||||
|
if [[ -d "$ISODRIVE_DIR" ]]; then
|
||||||
|
echo "Updating isodrive source..."
|
||||||
|
git -C "$ISODRIVE_DIR" pull
|
||||||
|
else
|
||||||
|
echo "Cloning isodrive..."
|
||||||
|
git clone --depth 1 https://github.com/nitanmarcel/isodrive "$ISODRIVE_DIR"
|
||||||
|
fi
|
||||||
|
|
||||||
|
SRCS="$ISODRIVE_DIR/src/util.cpp $ISODRIVE_DIR/src/configfsisomanager.cpp $ISODRIVE_DIR/src/androidusbisomanager.cpp $ISODRIVE_DIR/src/main.cpp"
|
||||||
|
CFLAGS="-I$ISODRIVE_DIR/src/include -static-libstdc++ -Os -s"
|
||||||
|
|
||||||
|
build_all() {
|
||||||
|
local NDK="$1"
|
||||||
|
local TOOLCHAIN="$NDK/toolchains/llvm/prebuilt/linux-x86_64/bin"
|
||||||
|
|
||||||
|
echo "Building arm64-v8a..."
|
||||||
|
"$TOOLCHAIN/aarch64-linux-android26-clang++" $CFLAGS $SRCS -o "$OUTPUT_DIR/arm64-v8a/isodrive"
|
||||||
|
|
||||||
|
echo "Building armeabi-v7a..."
|
||||||
|
"$TOOLCHAIN/armv7a-linux-androideabi26-clang++" $CFLAGS $SRCS -o "$OUTPUT_DIR/armeabi-v7a/isodrive"
|
||||||
|
|
||||||
|
echo "Building x86_64..."
|
||||||
|
"$TOOLCHAIN/x86_64-linux-android26-clang++" $CFLAGS $SRCS -o "$OUTPUT_DIR/x86_64/isodrive"
|
||||||
|
|
||||||
|
echo "Building x86..."
|
||||||
|
"$TOOLCHAIN/i686-linux-android26-clang++" $CFLAGS $SRCS -o "$OUTPUT_DIR/x86/isodrive"
|
||||||
|
|
||||||
|
echo "Done! Built isodrive for all architectures."
|
||||||
|
ls -la "$OUTPUT_DIR"/*/isodrive
|
||||||
|
}
|
||||||
|
|
||||||
|
# On NixOS, prefer nix-shell (local Android SDK has /bin/bash issues)
|
||||||
|
if command -v nix-shell &>/dev/null; then
|
||||||
|
echo "Using nix-shell to get Android NDK..."
|
||||||
|
export SRCS CFLAGS OUTPUT_DIR
|
||||||
|
NIXPKGS_ALLOW_UNFREE=1 nix-shell -p androidenv.androidPkgs.ndk-bundle --run '
|
||||||
|
SDK_ROOT=$(find /nix/store -maxdepth 1 -name "*android-sdk-ndk*" -type d 2>/dev/null | head -1)
|
||||||
|
NDK=$(ls -d "$SDK_ROOT/libexec/android-sdk/ndk/"* | head -1)
|
||||||
|
TOOLCHAIN="$NDK/toolchains/llvm/prebuilt/linux-x86_64/bin"
|
||||||
|
|
||||||
|
echo "Using NDK: $NDK"
|
||||||
|
|
||||||
|
echo "Building arm64-v8a..."
|
||||||
|
"$TOOLCHAIN/aarch64-linux-android26-clang++" $CFLAGS $SRCS -o "$OUTPUT_DIR/arm64-v8a/isodrive"
|
||||||
|
|
||||||
|
echo "Building armeabi-v7a..."
|
||||||
|
"$TOOLCHAIN/armv7a-linux-androideabi26-clang++" $CFLAGS $SRCS -o "$OUTPUT_DIR/armeabi-v7a/isodrive"
|
||||||
|
|
||||||
|
echo "Building x86_64..."
|
||||||
|
"$TOOLCHAIN/x86_64-linux-android26-clang++" $CFLAGS $SRCS -o "$OUTPUT_DIR/x86_64/isodrive"
|
||||||
|
|
||||||
|
echo "Building x86..."
|
||||||
|
"$TOOLCHAIN/i686-linux-android26-clang++" $CFLAGS $SRCS -o "$OUTPUT_DIR/x86/isodrive"
|
||||||
|
|
||||||
|
echo "Done!"
|
||||||
|
ls -la "$OUTPUT_DIR"/*/isodrive
|
||||||
|
'
|
||||||
|
elif [[ -n "${ANDROID_NDK_HOME:-}" ]]; then
|
||||||
|
build_all "$ANDROID_NDK_HOME"
|
||||||
|
elif [[ -n "${ANDROID_NDK:-}" ]]; then
|
||||||
|
build_all "$ANDROID_NDK"
|
||||||
|
else
|
||||||
|
echo "Error: Android NDK not found."
|
||||||
|
echo "Set ANDROID_NDK_HOME or ANDROID_NDK, or install nix-shell."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
9
fastlane/metadata/android/en-US/changelogs/1.txt
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
* New app icon
|
||||||
|
* Mount ISO/IMG files as USB mass storage or CD-ROM
|
||||||
|
* Create blank IMG files for writable USB drives
|
||||||
|
* Read-only or read-write mount options
|
||||||
|
* Persistent notification with quick unmount button
|
||||||
|
* OS-specific icons for popular distributions
|
||||||
|
* Download links to popular operating systems
|
||||||
|
* Rename and delete files
|
||||||
|
* Material 3 dynamic theming with dark mode support
|
||||||
24
fastlane/metadata/android/en-US/full_description.txt
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
ISO Droid lets you mount ISO and IMG files as USB mass storage or CD-ROM devices on rooted Android devices. Connect your phone to any PC and it will appear as a bootable USB drive or CD-ROM.
|
||||||
|
|
||||||
|
Features:
|
||||||
|
* Mount ISO/IMG files as USB mass storage or CD-ROM
|
||||||
|
* Create blank IMG files for writable USB drives
|
||||||
|
* Read-only or read-write mount options
|
||||||
|
* Persistent notification with quick unmount button
|
||||||
|
* OS-specific icons for popular distributions (Linux, BSD, etc.)
|
||||||
|
* Download links to popular operating systems
|
||||||
|
* Rename and delete files
|
||||||
|
* Material 3 dynamic theming with dark mode support
|
||||||
|
|
||||||
|
Requirements:
|
||||||
|
* Rooted Android device (Magisk, KernelSU, APatch, etc.)
|
||||||
|
* USB gadget support (configfs or sysfs)
|
||||||
|
* Android 8.0+ (API 26)
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
1. Place your ISO/IMG files in /sdcard/isodrive/
|
||||||
|
2. Select an ISO/IMG file from the list
|
||||||
|
3. Choose mount options (Mass Storage or CD-ROM)
|
||||||
|
4. Tap Mount
|
||||||
|
5. Connect your phone to a PC via USB
|
||||||
|
6. Unmount via the app or notification when done
|
||||||
BIN
fastlane/metadata/android/en-US/images/icon.png
Normal file
|
After Width: | Height: | Size: 50 KiB |
BIN
fastlane/metadata/android/en-US/images/phoneScreenshots/1.jpg
Normal file
|
After Width: | Height: | Size: 82 KiB |
BIN
fastlane/metadata/android/en-US/images/phoneScreenshots/2.jpg
Normal file
|
After Width: | Height: | Size: 104 KiB |
BIN
fastlane/metadata/android/en-US/images/phoneScreenshots/3.jpg
Normal file
|
After Width: | Height: | Size: 94 KiB |
BIN
fastlane/metadata/android/en-US/images/phoneScreenshots/4.jpg
Normal file
|
After Width: | Height: | Size: 117 KiB |
BIN
fastlane/metadata/android/en-US/images/phoneScreenshots/5.jpg
Normal file
|
After Width: | Height: | Size: 162 KiB |
1
fastlane/metadata/android/en-US/short_description.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Mount ISO/IMG files as USB drives on rooted Android
|
||||||
1
fastlane/metadata/android/en-US/title.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
ISO Droid
|
||||||
18
get_isodrive.sh
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Get the directory where this script lives
|
||||||
|
SCRIPT_DIR=$(dirname "$(realpath "$0")")
|
||||||
|
|
||||||
|
ISODRIVE_VERSION=$(curl -sI https://github.com/nitanmarcel/isodrive-magisk/releases/latest | grep -i ^location | grep -oP 'v\K[\d.]+')
|
||||||
|
curl -sL https://github.com/nitanmarcel/isodrive-magisk/releases/download/v$ISODRIVE_VERSION/isodrive-magisk-v$ISODRIVE_VERSION.zip -o /tmp/isodrive-magisk.zip
|
||||||
|
|
||||||
|
unzip -q /tmp/isodrive-magisk.zip -d /tmp/isodrive-magisk
|
||||||
|
|
||||||
|
# Move the isodrive binary for each architecture
|
||||||
|
mv /tmp/isodrive-magisk/libs/arm64-v8a/isodrive $SCRIPT_DIR/app/src/main/assets/bin/arm64-v8a/
|
||||||
|
mv /tmp/isodrive-magisk/libs/armeabi-v7a/isodrive $SCRIPT_DIR/app/src/main/assets/bin/armeabi-v7a/
|
||||||
|
mv /tmp/isodrive-magisk/libs/x86/isodrive $SCRIPT_DIR/app/src/main/assets/bin/x86/
|
||||||
|
mv /tmp/isodrive-magisk/libs/x86_64/isodrive $SCRIPT_DIR/app/src/main/assets/bin/x86_64/
|
||||||
|
|
||||||
|
# Clean up temp files
|
||||||
|
rm -rf /tmp/isodrive-magisk /tmp/isodrive-magisk.zip
|
||||||
BIN
isodroid_logo.png
Normal file
|
After Width: | Height: | Size: 50 KiB |
44
isodroid_logo.svg
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 108 108" width="512" height="512">
|
||||||
|
<!-- Background -->
|
||||||
|
<rect width="108" height="108" rx="20" fill="#3DDC84"/>
|
||||||
|
|
||||||
|
<!-- Left antenna ball -->
|
||||||
|
<circle cx="38" cy="24" r="3" fill="#FFFFFF"/>
|
||||||
|
<!-- Left antenna stem -->
|
||||||
|
<line x1="39.5" y1="26.5" x2="44" y2="33" stroke="#FFFFFF" stroke-width="3.5" stroke-linecap="round"/>
|
||||||
|
|
||||||
|
<!-- Right antenna ball -->
|
||||||
|
<circle cx="70" cy="24" r="3" fill="#FFFFFF"/>
|
||||||
|
<!-- Right antenna stem -->
|
||||||
|
<line x1="68.5" y1="26.5" x2="64" y2="33" stroke="#FFFFFF" stroke-width="3.5" stroke-linecap="round"/>
|
||||||
|
|
||||||
|
<!-- Droid head -->
|
||||||
|
<path d="M34,42 Q34,30 54,30 Q74,30 74,42 L74,56 Q74,62 68,62 L40,62 Q34,62 34,56 Z" fill="#FFFFFF"/>
|
||||||
|
|
||||||
|
<!-- Left eye -->
|
||||||
|
<circle cx="44" cy="46" r="4" fill="#3DDC84"/>
|
||||||
|
|
||||||
|
<!-- Right eye -->
|
||||||
|
<circle cx="64" cy="46" r="4" fill="#3DDC84"/>
|
||||||
|
|
||||||
|
<!-- USB main stem -->
|
||||||
|
<line x1="54" y1="62" x2="54" y2="88" stroke="#FFFFFF" stroke-width="5" stroke-linecap="round"/>
|
||||||
|
|
||||||
|
<!-- USB horizontal bar -->
|
||||||
|
<line x1="40" y1="70" x2="68" y2="70" stroke="#FFFFFF" stroke-width="4" stroke-linecap="round"/>
|
||||||
|
|
||||||
|
<!-- USB left branch -->
|
||||||
|
<line x1="40" y1="70" x2="40" y2="76" stroke="#FFFFFF" stroke-width="3.5" stroke-linecap="round"/>
|
||||||
|
|
||||||
|
<!-- USB left terminal rectangle -->
|
||||||
|
<rect x="36" y="76" width="8" height="6" fill="#FFFFFF"/>
|
||||||
|
|
||||||
|
<!-- USB right branch -->
|
||||||
|
<line x1="68" y1="70" x2="68" y2="76" stroke="#FFFFFF" stroke-width="3.5" stroke-linecap="round"/>
|
||||||
|
|
||||||
|
<!-- USB right terminal circle -->
|
||||||
|
<circle cx="68" cy="80" r="4" fill="#FFFFFF"/>
|
||||||
|
|
||||||
|
<!-- USB bottom arrow -->
|
||||||
|
<path d="M48,88 L54,94 L60,88" stroke="#FFFFFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" fill="none"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.7 KiB |