-
Notifications
You must be signed in to change notification settings - Fork 0
Guida Uso Italiano
🇬🇧 English · 🇮🇹 Italiano · 🇫🇷 Français · 🇩🇪 Deutsch · 🇪🇸 Español · 🇵🇹 Português · 🇨🇳 简体中文
- Cos'è
- Requisiti
- Installazione
- Guida rapida
- Guida completa all'interfaccia
- Formati di output
- Come funziona internamente
- Debug / diagnosi problemi
- Domande frequenti
- Limiti noti
- Ricompilare da zero
- Licenza e crediti
XGDTool per Android è un'app che porta il core C++ di XGDTool (GPL-3.0) — lo stesso motore di conversione usato su PC — direttamente sul telefono, per convertire immagini disco Xbox e Xbox 360 (ISO, XISO strippate) in formati più compatti o compatibili con emulatori (ZAR, GOD, CCI, CSO), senza dover passare da un computer.
La GUI originale (wxWidgets) non è portabile su Android, quindi è stata sostituita con un'app Kotlin che parla con lo stesso core C++ tramite JNI.
- Android 8.0 (API 26) o superiore.
- Architettura arm64-v8a (la stragrande maggioranza degli smartphone Android recenti). Dispositivi solo a 32 bit non sono supportati da questa build — vedi Ricompilare da zero.
- Spazio libero pari ad almeno 2× la dimensione del gioco più grande della tua collezione (il file sorgente copiato in cache e l'output prodotto coesistono temporaneamente durante la conversione).
- Connessione internet opzionale: serve solo se vuoi la ricerca automatica del titolo online (per nominare meglio i file convertiti); l'app funziona comunque offline.
- Scarica l'ultimo
XGDTool-android-debug.apkdalla sezione Releases di questa repo. - Sul telefono, abilita "Installa app sconosciute" per l'app che usi per aprire il file (file manager, browser, ecc.).
- Installa l'APK. È firmato con la debug key standard di Android — va bene per sideload personale, non è pensato per il Play Store.
- Al primo avvio l'app chiede il permesso notifiche (serve per la notifica di progresso del servizio in background).
L'app rileva automaticamente la lingua del sistema tra le 7 supportate (italiano, inglese, francese, tedesco, spagnolo, portoghese, cinese semplificato); se la lingua del telefono non è tra queste, usa l'inglese come lingua di riferimento.
- Tocca Seleziona ISO/XISO da convertire e scegli uno o più file (selezione multipla supportata: tieni premuto un file nel selettore di sistema per attivarla).
- Tocca Seleziona cartella di destinazione e scegli dove salvare i file convertiti — può essere qualunque cartella accessibile dal telefono, inclusa una SD esterna.
- Scegli il formato di output tra i chip disponibili (ZAR è preselezionato).
- Tocca Converti.
- Segui l'avanzamento nella card "Avanzamento" e nel registro in fondo alla schermata. Puoi uscire dall'app durante la conversione: gira come servizio in primo piano con notifica dedicata, e sopravvive al backgrounding.
Sorgente — il file (o i file) ISO/XISO da convertire. Il selettore usa lo Storage Access Framework di Android: puoi scegliere da qualunque provider di archiviazione visibile al telefono (memoria interna, SD, cloud locale, ecc.).
Destinazione — la cartella dove verranno scritti i file convertiti. Anche qui, qualunque cartella accessibile via SAF.
Opzioni di conversione
- Formato: vedi Formati di output sotto.
- Modalità offline: se disattivata, l'app prova a cercare online il titolo corretto del gioco per nominare meglio l'output (richiede rete, con timeout massimo di qualche secondo — se la rete è lenta o assente l'app aspetta il tempo massimo e poi procede comunque offline). Se attivata, salta del tutto questo passaggio.
Avanzamento — ogni file passa per 3 fasi visibili, ciascuna con la propria etichetta e barra di avanzamento:
- Copia locale — il file scelto viene copiato dalla posizione SAF nella cache privata dell'app (necessario perché il motore nativo lavora su path reali, non su content:// Uri).
- Conversione — verifica connessione, ricerca titolo online (se non offline), poi scrittura vera e propria. Parte con una barra "indeterminata" (a scorrimento) perché la durata della fase di rete non è prevedibile, poi passa a percentuale reale appena inizia a scrivere dati.
- Scrittura output — copia del risultato dalla cache alla cartella di destinazione scelta.
Con più file selezionati, queste 3 fasi si ripetono in sequenza per ciascuno (nessuna conversione in parallelo — vedi Limiti noti); l'intestazione mostra "File X di Y" con il nome del file corrente.
Annulla interrompe la conversione in corso (in modo pulito, al primo punto di controllo utile — non tronca a metà una scrittura).
Registro — mostra ogni riga prodotta dal motore nativo, utile per capire esattamente cosa sta facendo o perché un file è fallito.
| Formato | Uso tipico |
|---|---|
| ZAR | Archivio compresso universale, formato più efficiente per l'uso con Xenia Canary (emulatore Xbox 360). Preselezionato. |
| GOD | Games on Demand — formato nativo usato da Xbox 360 e da diversi front-end/RGH. |
| CCI | Formato compresso pensato per l'uso con emulatori Xbox originali. |
| CSO | Formato compresso, alternativa a CCI supportata da diversi emulatori. |
SAF Uri (input)
│ copia byte-a-byte con progresso
▼
cache privata app (path reale)
│ XgdNative.convert() — JNI, sincrono, su thread dedicato
▼
libxgdtool.so (core C++ XGDTool)
│ scrive il formato scelto in una cartella di cache
▼
cache privata app (output)
│ copia byte-a-byte con progresso verso la destinazione SAF
▼
Cartella di destinazione scelta dall'utente
Un solo file alla volta, in coda sequenziale. Ogni fase riporta byte
processati/totali alla UI tramite callback JNI (XgdCallback.onLog /
onProgress), gestiti nel ConvertService (Foreground Service Android).
Se un file fallisce, il registro nell'app mostra il motivo — cerca una riga del tipo:
<Tipo errore> in <file:riga>: <dettaglio>
Se ti serve più contesto di quello mostrato in app (es. per capire un
crash nativo, non solo un'eccezione gestita), collega il telefono a un PC
con adb e lancia, durante una conversione:
adb logcat -s XgdJNI:* XgdCore:*-
XgdCorestampa ogni riga di log e ogni aggiornamento di progresso emesso dal codice C++ del convertitore (stesso contenuto del registro in app, ma senza perdere nulla se l'app viene messa in background o se il processo muore). -
XgdJNIstampa la diagnostica del bridge JNI (risoluzione dei metodi di callback, eccezioni pendenti).
Se l'app si comporta in modo strano senza log utili nemmeno in logcat, è
probabile un crash nativo (SIGSEGV) — in quel caso serve un adb logcat
completo (non filtrato) preso subito dopo il crash, o un tombstone
(adb bugreport / /data/tombstones).
Problemi comuni:
- Il selettore file di sistema mostra "Nessun elemento" anche navigando nella memoria principale del telefono — è un problema del componente di sistema Android (DocumentsUI/ExternalStorageProvider), non dell'app. Prova a riavviare il telefono, o a svuotare la cache dell'app "File"/"Gestione file" di sistema da Impostazioni.
- Copia bloccata o file troncato: verifica lo spazio libero (vedi Requisiti); l'app rileva e segnala una copia incompleta invece di procedere con dati parziali.
- Conversione lenta ad avviarsi: se la modalità offline è disattivata e la rete è assente o molto lenta, l'app attende il timeout massimo della ricerca titolo online prima di procedere — attivare la modalità offline evita questa attesa.
L'app modifica o cancella i file originali? No. I file sorgente vengono solo letti (copiati in una cache temporanea per la conversione, poi la copia in cache viene eliminata a fine lavorazione). L'output è sempre un file nuovo nella cartella di destinazione scelta.
Serve una connessione internet? No, è opzionale. Serve solo per la ricerca automatica del titolo online (rinomina più leggibile dell'output). Con la modalità offline attivata, o senza rete disponibile, l'app converte comunque, usando il nome del gioco come appare nel disco.
Posso convertire più file insieme? Sì, seleziona più file nel passaggio 1 — verranno processati in coda uno alla volta, con riepilogo finale di quanti sono riusciti/falliti.
L'app è ufficiale Microsoft/Xbox? No. È un progetto amatoriale, non affiliato né sponsorizzato da Microsoft. "Xbox" è un marchio registrato dei rispettivi proprietari, usato qui solo a scopo descrittivo/di compatibilità.
- Un file alla volta, nessuna conversione parallela.
- La copia SAF → cache richiede spazio libero pari ad almeno 2× la dimensione del gioco più grande della tua collezione (il file sorgente copiato + l'output prodotto coesistono temporaneamente).
- Solo
arm64-v8a(la stragrande maggioranza dei telefoni recenti; se il tuo è un dispositivo a 32 bit va ricompilato anche perarmeabi-v7a, non incluso in questa build). - APK firmato con debug key: reinstallarlo sovrascrivendo una versione precedente funziona sempre (stessa firma), ma non è distribuibile tramite store.
- Nessuna suite di test automatica: ogni modifica è verificata tramite compilazione pulita + test manuale su dispositivo reale.
Serve: Android NDK r27, Android SDK (platform 34, build-tools 34.0.0), Gradle 8.7+, JDK 17+.
# 1. Cross-compila zstd, lz4, OpenSSL, curl per arm64-v8a con l'NDK.
# XGDTool/android/CMakeLists.txt si aspetta tutto sotto
# ~/android/install-arm64 di default (override con -DXGD_DEPS_PREFIX).
# 2. Build della libreria nativa
cd XGDTool/android && mkdir build && cd build
cmake -G Ninja \
-DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_HOME/build/cmake/android.toolchain.cmake \
-DANDROID_ABI=arm64-v8a -DANDROID_PLATFORM=android-24 \
-DCMAKE_PREFIX_PATH=$HOME/android/install-arm64 \
-DCMAKE_FIND_ROOT_PATH=$HOME/android/install-arm64 \
-DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=BOTH \
-DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=BOTH \
-DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=BOTH ..
ninja
$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/<host>/bin/llvm-strip \
--strip-unneeded libxgdtool.so -o ../../../XGDToolAndroid/app/src/main/jniLibs/arm64-v8a/libxgdtool.so
# <host> = linux-x86_64, windows-x86_64 o darwin-x86_64 a seconda del tuo sistema
# 3. Build dell'APK
cd ../../../XGDToolAndroid
gradle clean assembleDebug
# APK in app/build/outputs/apk/debug/app-debug.apkNota: XGDTool/cmake/embed_resources.cmake genera
XGDTool/src/Executable/AttachXbe.h da un binario incluso nel submodule
external/Repackinator alla prima configurazione CMake — non toccarlo a
mano, si rigenera da solo.
Il core XGDTool e questo porting sono distribuiti sotto GPL-3.0 — vedi LICENSE nella root della repo. Il core C++ integra a sua volta componenti di terze parti elencati in ATTRIBUTION.md.
Progetto upstream: wiredopposite/XGDTool.
XGDTool v1.4.0 — High-Performance Xbox & Xbox 360 Disc Image Converter by Ashnar2602.
GitHub Repository ·
Releases ·
GPL-3.0 License