diff --git a/README.developers_es b/README.developers_es new file mode 100644 index 000000000..1af64fee8 --- /dev/null +++ b/README.developers_es @@ -0,0 +1,279 @@ +Virtual Machine (QEMU) para Android +================================================================================ +1. ¿Qué es Vitual Machine? +Virtual Machine es un emulador basado en QEMU para Android. Actualmente es compatible con la emulación de PC para la arquitectura Intel x86. +Para más información, instrucciones, guías, problemas conocidos y descargas, visita: +https://github.com/limboemu/limbo +=============================================================================== +2. Requisitos: +* Android SDK +* Android NDK: r14b/gcc o r23b/clang +* Android Studio (se prefiere la versión 3.1.1) +* Dispositivo Android con sistema operativo Android 8.0 (Oreo) o superior +* PC de escritorio Linux (se prefiere Ubuntu) +* Asegúrate de tener instalados los siguientes paquetes. Si no es así, ejecuta: + * sudo apt-get install make autoconf automake git python binutils + * sudo apt-get install libtool-bin pkg-config flex bison gettext texinfo rsync +* Para el desarrollo, puedes usar tus propios editores. Geany es muy recomendable para editar el código nativo. +=============================================================================== +3. Problemas Conocidos: +https://github.com/limboemu/limbo/issues +=============================================================================== +4. Actualizar Configuración +* Si compilas la versión de QEMU compatible, lo único que tienes que hacer es editar el archivo: +limbo-android-lib/src/main/jni/android-limbo-config.mak +* En todos los demás casos, tienes que mirar los archivos de configuración en: +limbo-android-lib/src/main/jni/android-config/ +Para más información, consulta la sección Compilación. +5. Obtener y Compilar Librerías Externas +# Asegúrate de estar en el directorio jni +cd ./limbo-android-lib/src/main/jni + +# Ahora descarga el código fuente de las librerías externas y descomprímelas en el directorio jni +# Nota: si alguno de estos enlaces no se descarga con wget, usa tu navegador para descargarlos + +##### Obtener QEMU +# enlace de descarga: [http://download.qemu-project.org/qemu-x.x.x.tar.xz](http://download.qemu-project.org/qemu-x.x.x.tar.xz) +# Versiones actuales compatibles con limbo: 5.1.0 y 2.9.1 +# ejemplo para la versión 5.1.0: +wget [http://download.qemu-project.org/qemu-5.1.0.tar.xz](http://download.qemu-project.org/qemu-5.1.0.tar.xz) -P /tmp/ +tar -xJf /tmp/qemu-5.1.0.tar.xz +mv qemu-5.1.0 qemu +# Para la versión de QEMU 2.9.1: +wget [http://download.qemu-project.org/qemu-2.9.1.tar.xz](http://download.qemu-project.org/qemu-2.9.1.tar.xz) -P /tmp/ +tar -xJf /tmp/qemu-2.9.1.tar.xz +mv qemu-2.9.1 qemu + +##### OBTENER glib +wget [https://ftp.gnome.org/pub/GNOME/sources/glib/2.56/glib-2.56.1.tar.xz](https://ftp.gnome.org/pub/GNOME/sources/glib/2.56/glib-2.56.1.tar.xz) -P /tmp/ +tar -xJf /tmp/glib-2.56.1.tar.xz +mv glib-2.56.1 glib + +##### OBTENER libffi +wget [https://sourceware.org/pub/libffi/libffi-3.3.tar.gz](https://sourceware.org/pub/libffi/libffi-3.3.tar.gz) -P /tmp/ +tar -xzf /tmp/libffi-3.3.tar.gz +mv libffi-3.3 libffi + +##### OBTENER pixman +wget [https://www.cairographics.org/releases/pixman-0.40.0.tar.gz](https://www.cairographics.org/releases/pixman-0.40.0.tar.gz) -P /tmp/ +tar -xzf /tmp/pixman-0.40.0.tar.gz +mv pixman-0.40.0 pixman + +##### OBTENER SDL2 +wget [https://www.libsdl.org/release/SDL2-2.0.8.tar.gz](https://www.libsdl.org/release/SDL2-2.0.8.tar.gz) -P /tmp/ +tar -xzf /tmp/SDL2-2.0.8.tar.gz +mv SDL2-2.0.8 SDL2 + +Ahora deberías tener esta estructura de directorios: +jni/ + android-config/ + compat/ + glib/ + libffi/ + limbo/ + patches/ + pixman/ + qemu/ + SDL2/ + +=============================================================================== +6. Aplicar parches +### Aplicar parche para QEMU: +# ejemplo para 5.1.0: +cd ./limbo-android-lib/src/main/jni/qemu/ +patch -p1 < ../patches/qemu-5.1.0.patch +# para 2.9.1: +patch -p1 < ../patches/qemu-2.9.1.patch + +### Aplicar parche glib para Limbo: +cd ./limbo-android-lib/src/main/jni/glib/ +patch -p1 < ../patches/glib-2.56.1.patch + +### Aplicar parche SDL2 para Limbo: +cd ./limbo-android-lib/src/main/jni/SDL2/ +patch -p1 < ../patches/sdl2-2.0.8.patch + +### Otras versiones de QEMU: +# Si deseas redistribuir una compilación de Limbo con otras versiones de QEMU, crea tu propio parche de esta manera: +cd /limbo-android-lib/src/main/jni/qemu/ +diff -ru --no-dereference /tmp/qemu-x.x.x . | grep -v '^Only in' > ../patches/qemu-x.x.x.patch +# No olvides crear tu archivo android-qemu-config-x.x.x.mak +# e incluirlo en android-qemu-config.mak + +=============================================================================== +7. Compilación +a. Para compilar la parte nativa de la aplicación, asegúrate de estar en el directorio jni: +cd limbo-android-lib/src/main/jni + +Asegúrate de actualizar el archivo android-limbo-config.mak con la ruta de la carpeta NDK a tu carpeta de instalación. +Ten en cuenta que la última versión de NDK que admitía gcc fue r14b. La alternativa es usar clang con la versión r23 de ndk. Por ejemplo: +NDK_ROOT = /home/dev/tools/ndk/android-ndk-r14b + +El resto de la configuración sirve para especificar la versión correcta de QEMU: USE_QEMU_VERSION, la arquitectura del host (dispositivo Android): BUILD_HOST, y la arquitectura guest del emulador: BUILD_GUEST. +b. Desde Android Studio, importa TANTO la librería Android limbo-android-lib COMO el módulo para la arquitectura guest que necesites (x86, arm, ppc, sparc), por ejemplo, limbo-android-x86. +c. Compila las librerías nativas: +# Asegúrate de seguir en el directorio jni: +cd limbo-android-lib/src/main/jni + +# En lugar de editar android-limbo-config.mak, también puedes proporcionar las variables en la línea de comandos. +# Por ejemplo: +export BUILD_HOST= +export BUILD_GUEST= +export NDK_DEBUG= + +Donde: + * EABI es el tipo de dispositivo Android (arquitectura host): armeabi-v7a, arm64-v8a, x86, x86_64 + * GUEST_ARCH es el tipo de emulador: x86_64-softmmu, aarch64-softmmu, sparc64-softmmu, ppc64-softmmu + * ENABLE_DEBUG es 1 (opcional) +# Para iniciar la compilación, escribe en tu terminal: +make limbo + +Notas: + * Si deseas eliminar TODOS los objetos y librerías nativas compiladas previamente: +make clean + * Si estás compilando un apk para múltiples arquitecturas host, debes hacer lo siguiente entre compilaciones: +make distclean + * Si estás compilando un apk para múltiples arquitecturas guest, puedes especificarlas separadas por comas: +BUILD_GUEST=x86_64-softmmu,aarch64-softmmu +Ejemplos: + 1. Para compilar Limbo x86 Emulator para teléfonos ARM64, escribe: +export BUILD_HOST=arm64-v8a +export BUILD_GUEST=x86_64-softmmu +make limbo + + 2. Para compilar Limbo x86 Emulator para teléfonos ARM, escribe: +export BUILD_HOST=armeabi-v7a +export BUILD_GUEST=x86_64-softmmu +make limbo + + 3. Para compilar Limbo ARM Emulator para teléfonos ARM64, escribe: +export BUILD_HOST=arm64-v8a +export BUILD_GUEST=aarch64-softmmu +make limbo + + 4. Para compilar Limbo x86 Emulator para teléfonos/tabletas/PC Intel x86 de 32 bits, escribe: +export BUILD_HOST=x86 +export BUILD_GUEST=x86_64-softmmu +make limbo + + 5. Para compilar Limbo x86 Emulator para PC Intel x86 de 64 bits, escribe: +export BUILD_HOST=x86_64 +export BUILD_GUEST=x86_64-softmmu +make limbo + + 6. Para compilar Limbo ARM Emulator para teléfonos ARM64 con fines de depuración, escribe: +export NDK_DEBUG=1 +export BUILD_HOST=arm64-v8a +export BUILD_GUEST=aarch64-softmmu +make limbo + + 7. Para compilar varios emuladores Limbo para teléfonos ARM, escribe: +export BUILD_HOST=arm64-v8a +export BUILD_GUEST=x86_64-softmmu,aarch64-softmmu +make limbo + + 8. Para compilar Limbo para dispositivos más antiguos con gcc, establece las siguientes opciones: +export NDK_ROOT=/home/dev/tools/ndk/android-ndk-r14b +export USE_GCC=true +export BUILD_HOST=armeabi-v7a +export BUILD_GUEST=x86_64-softmmu +export USE_QEMU_VERSION=2.9.1 +export USE_AAUDIO=false + +Para más opciones, consulta android-limbo-config.mak. +Ahora deberías tener las siguientes librerías en estas 2 carpetas: +limbo-android-lib/src/main/jniLibs// + * libcompat-iconv.so + * libcompat-intl.so + * libcompat-limbo.so + * libcompat-SDL2-ext.so + * libglib-2.0.so + * liblimbo.so + * libpixman-1.so + * libSDL2.so +limbo-android-/src/main/jniLibs// + * libqemu-system-xxx.so +Nota: +Cuando compilas el apk en Android Studio, contendrá las librerías de ambas carpetas, por lo que no necesitas copiar archivos manualmente. +d. Compila el apk de Android para el guest correspondiente usando Android Studio. +Asegúrate de que las librerías *.so estén comprimidas en el .apk final. +e. Para compilar desde la línea de comandos en lugar de Android Studio: +export ANDROID_SDK_ROOT=~/Android/Sdk +gradle wrapper +./gradlew assembleRelease + +f. Si deseas compilar la versión de depuración: + * Establece variables en Config.java: +debug = true; + * Modifica android-config/android-limbo-config.mak y apunta a una configuración sin optimización: +USE_OPTIMIZATION=false + * Sigue los pasos para compilar las librerías nativas como se describió anteriormente +export NDK_DEBUG=1 + * Importante: +Desde Android Studio, haz clic en Build > Rebuild Project y luego Run > Debug. +=============================================================================== +8. Depuración +Para depurar el código nativo para un guest en particular: +# para guest x86 y teléfono ARM64: +export BUILD_HOST=arm64-v8a +export BUILD_GUEST=x86_64-softmmu +make ndk-gdb PKG_NAME=com.limbo.emu.main + +# para otros guests, usa respectivamente: +make ndk-gdb PKG_NAME=com.limbo.emu.main.arm +make ndk-gdb PKG_NAME=com.limbo.emu.main.sparc +make ndk-gdb PKG_NAME=com.limbo.emu.main.ppc + +Nota: Es posible que desees deshabilitar el manejo de señales en gdb: +handle all nostop noprint +Para atrapar un SIGSEGV: +handle 11 stop print +Comandos útiles: + * Para establecer breakpoints: b : + * Para avanzar una instrucción: s + * Para ir a la siguiente instrucción: n + * Para continuar: c + * Para detener (interrumpir): ctrl-c + * Para ver la pila (backtrace): bt +=============================================================================== +9. Notas de Desarrollo +a. Los cambios de código para la compatibilidad con Android están en archivos de parches marcados con __ANDROID__. +b. Del mismo modo, los cambios de código para la funcionalidad de LIMBO están etiquetados con __LIMBO__. +c. Archivos de configuración importantes (deberás actualizar la ruta de NDK en este archivo antes de compilar): +limbo-android-lib/src/main/jni/android-config/android-limbo-config.mak +d. Archivos de configuración avanzada de QEMU: +limbo-android-lib/src/main/jni/android-config/android-qemu-config.mak +d. Archivos de configuración avanzada de dispositivos: +limbo-android-lib/src/main/jni/android-config/android-config/*.mak +e. Archivos Makefile importantes: + * limbo-android-lib/src/main/jni/Makefile + * limbo-android-lib/src/main/jni/Android.mk + * limbo-android-lib/src/main/jni/Application.mk + * limbo-android-lib/src/main/jni/android-limbo-build.mak + * limbo-android-lib/src/main/jni/android-qemu-build.mak +f. Para la configuración de las opciones de la interfaz de usuario de frontend, consulta: Config.java +g. Cuando uses git, aplica la siguiente configuración a tu archivo de configuración si quieres usar retornos de nueva línea para windows: +[core] + eol = true + autocrlf = input + fileMode = false + +=============================================================================== +10. Ejecución +a. Instala un teclado Qwerty completo para Android, como Hacker's keyboard, desde la tienda Google Android. Asegúrate de usar el tema Transparente y Direct Draw que se encuentran en la configuración de Temas. +b. Inicia la aplicación Limbo y elige CPU, Memoria (~8-64MB), etc. +c. Elige una imagen de disco de arranque para CD-Rom, Floppy y una imagen de HDD. +d. Inicia la máquina virtual. +e. Para más instrucciones y guías, visita: +https://github.com/limboemu/limbo +f. ¡Diviértete! +=============================================================================== +11. Historial de Cambios (Changelog) +Consulta limbo-android-lib/src/main/assets/CHANGELOG para las notas de la versión. +=============================================================================== +12. Licencia +Limbo PC Emulator se publica bajo la Licencia GPL v2. +Todos los iconos en /res son del Proyecto Gnome (Licencia GPL v2). +Consulta el archivo COPYING en el directorio raíz +y LICENSE en limbo-android-lib/src/main/assets. +Otras fuentes incluidas se publican bajo su propia licencia; consulta las Licencias en cada subdirectorio. \ No newline at end of file diff --git a/README.md b/README.md index 4874d7a8b..efcc598f1 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,8 @@ -# Limbo Emulator (QEMU) for Android -# -# For APK Downloads, Guides, and Help visit: -# https://virtualmachinery.weebly.com +# Virtual Machine (QEMU) for Android It's a fork of the limbo emulator -Limbo is a QEMU-based emulator for Android supports emulation for these architectures: +Virtual is a QEMU-based emulator for Android supports emulation for these architectures: x86/x86_64 ARM/ARM64 - PowerPC/PowerPC64 - Sparc -For developers read file README.developers for instructions on how to compile on your own +For developers read file README.developers or README.developers_es for instructions on how to compile on your own and other useful information. diff --git a/VERSION b/VERSION index 6f68e2ea5..881aefa13 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -600.01 +600.02 diff --git a/build.gradle b/build.gradle index a7e9a06be..bb1d24e4b 100644 --- a/build.gradle +++ b/build.gradle @@ -1,36 +1,15 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. -buildscript { - repositories { - jcenter() - google() - } - dependencies { - classpath 'com.android.tools.build:gradle:4.1.1' - - // NOTE: Do not place your application dependencies here; they belong - // in the individual module build.gradle files - } -} - -allprojects { - repositories { - google() - jcenter() - } - -// gradle.projectsEvaluated { -// tasks.withType(JavaCompile) { -// options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation" -// } -// } - +plugins { + // Plugins automatically generated by TLGradle.kt + alias(libs.plugins.android.application) apply false } -task clean(type: Delete) { +tasks.register('clean', Delete) { delete rootProject.buildDir } + apply plugin: 'idea' idea { module { @@ -38,9 +17,6 @@ idea { excludeDirs.add(file('limbo-android-lib/src/main/jni')) excludeDirs.add(file('limbo-android-lib/build')) excludeDirs.add(file('limbo-android-arm/build')) - excludeDirs.add(file('limbo-android-sparc/build')) - excludeDirs.add(file('limbo-android-ppc/build')) - excludeDirs.add(file('limbo-android-x86/build')) excludeDirs.add(file('gradle')) } } diff --git a/gradle.properties b/gradle.properties index fefd06fef..b831ac8d7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,23 +1,12 @@ -# Project-wide Gradle settings. - -# IDE (e.g. Android Studio) users: -# Gradle settings configured through the IDE *will override* -# any settings specified in this file. - -# For more details on how to configure your build environment visit -# http://www.gradle.org/docs/current/userguide/build_environment.html - -# Specifies the JVM arguments used for the daemon process. -# The setting is particularly useful for tweaking memory settings. -org.gradle.jvmargs=-Xmx2000m - -# When configured, Gradle will run in incubating parallel mode. -# This option should only be used with decoupled projects. More details, visit -# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects -org.gradle.parallel=true +#AndroidIDE: enforce UTF-8 & locale for Gradle daemon +#Sat Dec 27 23:11:41 GMT 2025 +systemProp.user.country=US +systemProp.user.language=en +systemProp.sun.jnu.encoding=UTF-8 org.gradle.daemon=true +systemProp.file.encoding=UTF-8 +org.gradle.parallel=true org.gradle.configureondemand=true -android.enableBuildCache=true -android.useAndroidX=true +org.gradle.jvmargs=-Xmx2000m -Dfile.encoding\=UTF-8 -Dsun.jnu.encoding\=UTF-8 -Duser.language\=en -Duser.country\=US android.enableJetifier=true - +android.useAndroidX=true diff --git a/limbo-android-arm/build.gradle b/limbo-android-arm/build.gradle index 02efb6958..65995b96c 100644 --- a/limbo-android-arm/build.gradle +++ b/limbo-android-arm/build.gradle @@ -1,14 +1,17 @@ -apply plugin: 'com.android.application' +plugins { + // Plugins automatically generated by MLGradleWriter.kt + alias(libs.plugins.android.application) +} android { - compileSdkVersion 29 - buildToolsVersion "29.0.3" + namespace 'com.virtual.emu.main.arm' + compileSdk 36 defaultConfig { - applicationId "com.limbo.emu.main.arm" - minSdkVersion 21 - targetSdkVersion 29 - ndk { abiFilters "armeabi-v7a","arm64-v8a", "x86", "x86_64" } + applicationId 'com.virtual.emu.main.arm' + minSdk 23 + targetSdk 34 + ndk { abiFilters "armeabi-v7a","arm64-v8a"} } buildTypes { @@ -32,7 +35,6 @@ android { dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') - implementation 'androidx.appcompat:appcompat:1.1.0' - + implementation libs.androidx.appcompat implementation project(':limbo-android-lib') } diff --git a/limbo-android-arm/src/main/AndroidManifest.xml b/limbo-android-arm/src/main/AndroidManifest.xml index 0823c2de1..91db55c02 100644 --- a/limbo-android-arm/src/main/AndroidManifest.xml +++ b/limbo-android-arm/src/main/AndroidManifest.xml @@ -1,20 +1,20 @@ + android:theme="@style/AppTheme" + android:exported="true"> diff --git a/limbo-android-arm/src/main/res/values/colors.xml b/limbo-android-arm/src/main/res/values/colors.xml new file mode 100644 index 000000000..452871266 --- /dev/null +++ b/limbo-android-arm/src/main/res/values/colors.xml @@ -0,0 +1,143 @@ + + #3E6700 + #FFFFFF + #4F8200 + #F9FFEA + #4B662A + #FFFFFF + #CCEEA1 + #516D2F + #00694E + #FFFFFF + #008564 + #F5FFF8 + #BA1A1A + #FFFFFF + #FFDAD6 + #93000A + #F7FBEA + #191D13 + #F7FBEA + #191D13 + #DEE6CD + #424937 + #727A66 + #C2CAB2 + #000000 + #2E3227 + #EFF3E2 + #97D945 + #B2F65F + #102000 + #97D945 + #2F4F00 + #CCEEA1 + #102000 + #B1D188 + #344E14 + #7CF9CB + #002116 + #5DDCB0 + #00513C + #D8DCCC + #F7FBEA + #FFFFFF + #F2F5E5 + #ECF0DF + #E6EADA + #E0E4D4 + #233D00 + #FFFFFF + #4A7A00 + #FFFFFF + #243D03 + #FFFFFF + #597637 + #FFFFFF + #003F2D + #FFFFFF + #007C5D + #FFFFFF + #740006 + #FFFFFF + #CF2C27 + #FFFFFF + #F7FBEA + #191D13 + #F7FBEA + #0E1209 + #DEE6CD + #313928 + #4E5543 + #68705C + #000000 + #2E3227 + #EFF3E2 + #97D945 + #4A7A00 + #FFFFFF + #395F00 + #FFFFFF + #597637 + #FFFFFF + #425D21 + #FFFFFF + #007C5D + #FFFFFF + #006148 + #FFFFFF + #C4C8B9 + #F7FBEA + #FFFFFF + #F2F5E5 + #E6EADA + #DBDFCE + #CFD3C4 + #1C3200 + #FFFFFF + #305200 + #FFFFFF + #1C3200 + #FFFFFF + #365116 + #FFFFFF + #003325 + #FFFFFF + #00543E + #FFFFFF + #600004 + #FFFFFF + #98000A + #FFFFFF + #F7FBEA + #191D13 + #F7FBEA + #000000 + #DEE6CD + #000000 + #272E1E + #444C3A + #000000 + #2E3227 + #FFFFFF + #97D945 + #305200 + #FFFFFF + #203900 + #FFFFFF + #365116 + #FFFFFF + #213901 + #FFFFFF + #00543E + #FFFFFF + #003B2A + #FFFFFF + #B6BBAB + #F7FBEA + #FFFFFF + #EFF3E2 + #E0E4D4 + #D2D6C6 + #C4C8B9 + diff --git a/limbo-android-arm/src/main/res/values/strings.xml b/limbo-android-arm/src/main/res/values/strings.xml index 91b029bc3..b75f7af42 100644 --- a/limbo-android-arm/src/main/res/values/strings.xml +++ b/limbo-android-arm/src/main/res/values/strings.xml @@ -1,8 +1,8 @@ - Limbo ARM Emulator - Limbo ARM + Virtual ARM Machine + Machine ARM Debian ARM Linux A Linux-based light weight OS with Desktop Manager, network, and package manager diff --git a/limbo-android-arm/src/main/res/values/theme_overlays.xml b/limbo-android-arm/src/main/res/values/theme_overlays.xml new file mode 100644 index 000000000..e81f18fb5 --- /dev/null +++ b/limbo-android-arm/src/main/res/values/theme_overlays.xml @@ -0,0 +1,98 @@ + + + + diff --git a/limbo-android-arm/src/main/res/values/themes.xml b/limbo-android-arm/src/main/res/values/themes.xml new file mode 100644 index 000000000..266cdd27b --- /dev/null +++ b/limbo-android-arm/src/main/res/values/themes.xml @@ -0,0 +1,50 @@ + + + diff --git a/settings.gradle b/settings.gradle index cbab89687..82145c588 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,5 +1,18 @@ +pluginManagement { + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +dependencyResolutionManagement { + repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) + repositories { + google() + mavenCentral() + } +} + include ':limbo-android-lib' -include ':limbo-android-x86' -include ':limbo-android-arm' -include ':limbo-android-sparc' -include ':limbo-android-ppc' +include ':limbo-android-x86' \ No newline at end of file