|
ROMs y desarrollo Xperia S ROMs y desarrollo Xperia S |
|
Herramientas |
#1
|
||||
|
||||
Introducción a la cocina para Xperia
INTRODUCCIÓN El objetivo de este tutorial es facilitar la incursión de la gente en el mundo de las ROM personalizadas. Mostraremos que partiendo desde 0 a partir de un firmware de Sony podemos crear nuestra propia ROM personalizada. Aunque los ejemplos estén basados en un Xperia S este tutorial está pensado para Smarthphones Sony. He hecho un esfuerzo y he usado Windows para hacer el tutorial ()Tú eres el único responsable de los problemas que puedan surgir en tu telefono o ordenador al seguir este manual. No me hago responsable de nada. Nota: Los aportes y correcciones son muy bien bienvenidos. RECURSOS Hacer este tutorial me ha llevado horas de trabajo, si te ayuda no olvides pulsar el botón gracias. Si lo usas para crear tu ROM se aceptan agradecimientos también
No olvides agradecer también su labor a gente que ha hecho los programas que se usan aquí como dsixda (usuario de XDA-Developers) Última edición por Kiamu Día 16/06/13 a las 20:19:55. |
Los siguientes 96 usuarios han agradecido a Kiamu su comentario: | ||
|
#2
|
||||
|
||||
CONSTRUYENDO LA BASE PRIMER PASO: OBTENER UN ARCHIVO PARA FLASHTOOL 1.) Mediante Sony PC Companion, Sony Update Service o EMMA actualizamos o reparamos el firmware de nuestro Xperia. Este proceso descargará varios archivos a nuestro PC que nos permitirán crear el archivo TFT que queremos. 2.) Una vez descargados los archivos vamos a la carpeta que los contiene, por ejemplo para EMMA es esta: Si descargamos la actualización con Sony PC Companion o Sony Update Service, esta se descargará en una carpeta temporal oculta. Nos ponemos en C./ y en la barra de herramientas vamos a "Organizar"/ "Opciones de carpeta y búsqueda" y dentro seleccionamos la pestaña "Ver" - Archivos y carpetas ocultos - Mostrar archivos, carpetas y unidades ocultos. Ahora en C:/ debería aparecer una carpeta llamada "Program Data". Ahí dentro estarán ,por ejemplo en Sony Ericsson/ Update Engine/ db/ NUMERO/ blob_fs. 4.) Abrimos el programa Flashtool, este manual está realizado sobre la versión v0.9.10.1, y seleccionamos Tools/Decrypt Files. Ahí en "..." seleccionamos la carpeta donde hemos guardo los archivos y pasamos ambos archivos al lado derecho "Files to convert". Aceptamos y dejamos que Flashtool trabaje con los archivos. Cuando acabe saldrá esta pantalla. Device: LT26i (O el que sea) Version: La versión de ese firmware (ej: 6.A.2.0.100) Branding: SEMC Aceptamos. En la siguiente pantalla seleccionamos nuestro modelo de dispositivo para que agregue el "loader.sin" y volvemos a aceptar. El archivo resultante se guarda automáticamente en C:/Flashtool/Firmwares Idea: Ahora puedes subir este archivo y compartirlo con el resto. Es una gran aportación cuando Sony lanza un nuevo firmware, así ayudas a la gente con terminales no libres a actualizar fácilmente a través de Flashtool. Importante: Hay una forma de "engañar" a los programas oficiales de Sony para hacerles creer que somos de otra zona y así descargarnos esa actualización. Concretamente es editando estas lineas en build.prop. Código:
ro.product.name= ro.build.fingerprint= ro.semc.version.cust= ro.semc.version.cust_revision= SEGUNDO PASO: OBTENER UN ZIP PARA RECOVERY En el apartado anterior vimos como crear nuestro propio TFT. Ahora vamos a darle uso. Como habreis visto todas las ROM vienen en un formato tan conocido como ".zip" y no en TFT. El formato .zip es fácilmente instalable desde nuestro propio Xperia mediante un recovery. Además es relativamente sencillo de hacer nuestras propias modificaciones sobre el. Vamos a aprender a crear uno. 1.) Con Flashtool instalamos nuestra ROM en el Xperia. Es un proceso muy sencillo y explicado, así que no voy a entrar en ello. 2.) Cuando acabe encendemos nuestro telefono, nos hacemos ROOT y instalamos un recovery. Busca como, hay montón de guías. 3.) Entramos en el recovery y hacemos un Backup. Cuando acabe conectamos nuestro Xperia al PC. 4.) Vamos a donde esté nuestro Backup, en mi caso es con un recovery CWM así que lo encontraremos en: Xperia S/clockworkmod/FechaDeLaRom 5.) Solo nos interesa el archivo "system.ext4.tar" lo copiamos a nuestro PC. Este es un archivo que se abre con un descompresor, recomiendo usar "7zip".Si lo abrimos tendremos una carpeta system con algo parecido a esto: 6.) Extraemos todo en una nueva carpeta creada para este fin y empezamos a prepararla. 7.) Empieza el preparado del zip. Lo primero es volver a comprimir las carpetas creadas, esta vez lo comprimimos en formato ".zip" 8.) El problema es que este zip así no nos sirve, si lo intentamos instalar el recovery dará un error, debe de estar "firmado". Hay varias formas de firmar un archivo zip para que lo admita el recovery, por ahora usaremos el programa "Auto-Sign". 9.) Copiamos nuestra ROM a la carpeta de "Auto-Sign" con el nombre de "Update.zip" 10.) Nos tiene que aparecer "Update.zip" subrayado en verde, entonces en la ventana desplegable seleccionamos "Update.zip" y pulsamos "Auto-Sign". Nos dirá que ha creado un nuevo archivo llamado "update_signed" y quedará "como que no ha funcionado" simplemente es tener paciencia y esperar un par de minutos. Más o menos cuando el archivo final ocupe 2-3 Mb más que el original habrá acabado. Podemos renombrar la ROM como queramos. 11.) Nuestra ROM aún no sirve para instalar desde un recovery, nos queda decirle al recovery como instalarla. Bien, si abrimos el "update_signed.zip" vemos que tenemos una nueva carpeta "META-INF". Para no liarnos, he decido dar este paso hecho. Nos bajamos el archivo "META-INF", descomprimimos y lo soltamos dentro de de la ROM. Posteriormente aprenderemos más sobre esto, pero por ahora así nos vale. Atención: El updater-script puede no funcionar correctamente. Está probado sobre un Xperia S con Jelly Bean. Ahora tenemos una ROM instalable desde Recovery, podemos compartirla con el resto. Quizá alguien no quiera usar flashtool. Última edición por Kiamu Día 16/06/13 a las 20:09:44. |
Los siguientes 41 usuarios han agradecido a Kiamu su comentario: | ||
#3
|
||||
|
||||
TERCER PASO: PREPARANDO LA BASE
En este paso vamos a:
Para todo esto voy a recurrir a "Android Kitchen" de dsixda. Como se que la mayoría os hareis un hilo si os pongo el enlace de descarga y el post donde el autor explica como instalarlo y como moverse. Traduzco de la lengua de Shakesperare a la de Cervantes un poco más abajo. Una vez que tengamos todo lo anterior y la ROM colocada en la carpeta: 1.) Abrimos Cygin Terminal y escribimos "cd kitchen" para que cargue esa carpeta, pulsamos ENTER. Seguidamente escribimos "./menu" y ENTER. Si todo ha salido bien debemos tener algo como esto: En el siguiente punto aceptamos añadir un "boot.img" para que la kitchen trabaje correctamente. Si nos dice que hay un problema con "updater-script" y que necesita crear un "update-script" aceptamos crearlo. 3.) Cuando acabe volveremos a la pantalla de menu. El primer paso es añadir permisos ROOT (2) (opción c). Seguidamente añadimos BusyBox (3). Si estamos editando otra ROM puede decirnos que estas aplicaciones ya existen, podemos dejar las que hay o añadir las que la kitchen proporciona. 4.) De vuelta en el Menu, vamos a Advances Options (0). Ahí Deodex (11) System/app y Framework (b), normalmente no deoxea a la primera todo. Simplemente es volver a pasarlo sobre lo que ha dejado, en mi caso System/app (a) ATENCIÓN: Al deoxear tenemos que cambiar nuestro nivel de API a nuestra versión de Android, por ejemplo para Jelly Bean el nivel de API es 15. Pulsamos "v" y ponemos el valor 16 en el menu de deoxeo. 5.) Añadimos soporte para init.d (14) y funcionalidad data/app (13) 6.) Ya casi está. Vamos a montar la ROM, damos a la opción 99. Y en la siguiente pantalla, opción 2 (comodísima y hace zipaling). Esperamos a que acabe. (Importante firmar la ROM en este paso, la opción 2 "Lazy Mode" la firma automaticamente) 7.) La ROM resultante se guarda en la carpeta de Cygwin un nivel por encima de donde hemos metido la ROM al principio en "OUTPUT". 8.) Normalmente el updater-script resultante del paso por esta kitchen no es el correcto. Se instalará mediante recovery, pero pueden perder funciones importantes debido a que no da los permisos correctos. Puedes probar a usar el génerico facilitado más arriba (Funciona en Xperia S para Jelly Bean) o hacer tu uno. ANDROID KITCHEN: MANUAL DE INSTALACIÓN
Última edición por Kiamu Día 16/06/13 a las 20:10:03. |
Los siguientes 38 usuarios han agradecido a Kiamu su comentario: | ||
#4
|
||||
|
||||
CUARTO PASO: LIMPIANDO LA ROM
También es importante quitar parte de las aplicaciones o personalización que nuestro fabricante mete a su smartphone. Así ganaremos fluidez y ganaremos minutos o incluso horas de batería. Dependiendo de nuestro modelo podremos quitar unas o otras. Algunas serán esenciales para el sistema, otras totalmente prescindibles. El método el simple. Partiendo de la ROM que hemos obtenido al finalizar el tercer paso o cualquier otra con la queramos trabajar, sin descomprimirla y con 7zip la abrimos. Es recomendable tener una copia de la ROM por si borramos más de la cuenta y queremos recuperar. Dentro de la carpeta "System" encontramos una serie de carpetas que detallamos a continuación.
Ahora tu ROM pesará unos cuantos megas menos, puede que bastantes. Además de que habrás mejorado el consumo. QUINTO PASO: HABLEMOS DE TWEAKS Todo el mundo que anda metido en el mundillo de Android y se dedica a probar ROMS está todo el día oyendo hablar de Tweaks en Build.prop. Un tweak es básicamente una pequeña linea de código que modifica parametros por defecto en el sistema. Hay mucha tela que cortar al respecto, mucha gente sostiene que no sirven para nada otros que sí. Está demostrado que los benchmark suben o bajan ligeramente según los tweaks que usemos. Y ¿Como metemos tweaks? 1.) Esta vez con el zip abierto de la ROM vamos a "system" y ahí abrimos Build.prop con Notepad++ [IMAGEN 12] 2.) Lo que nos interesa, por ahora, está al final en "ADDITIONAL_BUILD_PROPERTIES". (Nota: Las # implica que el sistema no lee esa linea, sirven de guía para tí. Pero el sistema se las salta) 3.) Ahí empezamos a introducir los tweaks que queramos. Debemos investigar por nuestra cuenta cuales son mejores para nuestro terminal y versión de Android. Un ejemplo de Build.prop: Cita:
#
# ADDITIONAL_BUILD_PROPERTIES # ro.product-res-path=framework/SemcGenericUxpRes.apk ro.com.android.dataroaming=true keyguard.no_require_sim=true ro.com.android.dateformat=dd-MM-yyyy ro.vendor.extension_library=/system/lib/libqc-opt.so dalvik.vm.heapstartsize=8m dalvik.vm.heapgrowthlimit=64m dalvik.vm.heapsize=256m ro.setupwizard.mode=DISABLED ro.com.google.gmsversion=4.0_r7 ro.com.google.clientidbase=android-sonyericsson ro.sf.lcd_density=320 ro.ril.hsxpa=2 ro.ril.gprsclass=12 ro.semc.xloud.supported=true ro.usb.pid_suffix=169 dalvik.vm.dexopt-flags=m=y,v=n,o=v,u=n net.bt.name=Android dalvik.vm.stack-trace-file=/data/anr/traces.txt ro.service.swiqi.supported=true persist.service.swiqi.enable=1 drm.service.enable=false # MEJORAS CONEXION ro.ril.avoid.pdp.overlap=1 # CAMBIOS INTERFAZ persist.adb.notify=0 # DESHABILITAR LOGCAT logcat.live=disable # DESHABILITAR CHEQUEO DE ERRORES ro.kernel.android.checkjni=0 ro.kernel.checkjni=0 # MEJORA RESPUESTA SCROLLING windowsmgr.max_events_per_sec=240 # VELOCIDAD SCROLLING ro.max.fling_velocity=12000 ro.min.fling_velocity=8000 # MEJORA RESPUESTA TACTIL debug.performance.tuning=1 video.accelerate.hw=1 # AHORRO ENERGIA wifi.supplicant_scan_interval=180 pm.sleep_mode=1 ro.ril.disable.power.collapse=1 ro.mot.eri.losalert.delay=1000 # MEJORA SEÑAL ro.ril.hep=1 ro.ril.enable.dtm=1 ro.ril.hsdpa.category=10 ro.ril.enable.a53=1 ro.ril.enable.3g.prefix=1 ro.ril.htcmaskw1.bitmask=4294967295 ro.ril.htcmaskw1=14449 ro.ril.hsupa.category=5 # MEJORA NAVEGADOR net.tcp.buffersize.default=4096,87380,256960,4096, 16384,256960 net.tcp.buffersize.wifi=4096,87380,256960,4096,163 84,256960 net.tcp.buffersize.umts=4096,87380,256960,4096,163 84,256960 net.tcp.buffersize.gprs=4096,87380,256960,4096,163 84,256960 net.tcp.buffersize.edge=4096,87380,256960,4096,163 84,256960 # OTROS persist.sys.purgeable_assets=1 debug.enabletr=true dalvik.vm.verify-bytecode=false persist.sys.ui.hw=1 View.scroll_friction=10 ro.HOME_APP_ADJ=1 ro.config.nochekin=1 dalvik.vm.jniopts=forcecopy dalvik.vm.execution-mode=int:jit dalvik.vm.checkjni=false dalvik.gc.type=precise # AUMENTO FLASH ro.media.capture.flash=led ro.media.capture.flashMinV=3300000 ro.media.capture.torchIntensity=140 ro.media.capture.flashIntensity=145 SEXTO PASO: LOS ULTIMOS AJUSTES
Cita:
ro.config.ringtone=
ro.config.notification_sound= ro.config.alarm_alert= ej: ro.config.ringtone=xperia.ogg ro.config.notification_sound=notification.ogg ro.config.alarm_alert=alarm.ogg
Cita:
ro.semc.version.fs_revision=
ro.build.id= ro.build.display.id= ej: ro.semc.version.fs_revision=6.1.A.2.55 ro.build.id=Xperia Series - Base+ (v0.3) ro.build.display.id=Xperia Series - Base+ (v0.3) Última edición por Kiamu Día 16/06/13 a las 20:11:12. |
Los siguientes 42 usuarios han agradecido a Kiamu su comentario: | ||
#5
|
||||
|
||||
Séptimo paso: Creando un updater-scrip
A la hora de crear una ROM para instalar desde cualquier Recovery (CWM, TWRP,...) es necesario decirle a este como instalarla. Es decir, debemos darle una serie de comandos que debe ejecutar durante la instalación para que la ROM instale correctamente. Para ello nos centraremos en la carpeta META-INF/com/google/android dentro de esta encontramos el archivo "updater-script" (recuerda que ya he dejado la carpeta y un archivo para descargar a modo de ejemplo, si te falta puedes usar esa) El updater-script es este, si te entra principios de síncope al mirarlo... respira : Primera explicación a colorines. Cita:
show_progress(0.1, 0);
format("ext4", "EMMC", "/dev/block/mmcblk0p12", "0", "/system"); --> Formatea system mount("ext4", "EMMC", "/dev/block/mmcblk0p12", "/system"); --> Monta system package_extract_dir("system", "/system"); --> Extrae todo el contenido de system al móvil (todo lógico hasta ahora) symlink("Roboto-Bold.ttf", "/system/fonts/DroidSans-Bold.ttf"); --> De aquí para abajo son los llamados symlink o enlaces simbolicos, son necesarios para que todo funcione bien. Suelen ser siempre los mismos. symlink("Roboto-Regular.ttf", "/system/fonts/DroidSans.ttf"); symlink("toolbox", "/system/bin/printenv"); symlink("toolbox", "/system/bin/sync"); symlink("toolbox", "/system/bin/route"); symlink("toolbox", "/system/bin/df"); symlink("toolbox", "/system/bin/kill"); symlink("toolbox", "/system/bin/cmp"); symlink("toolbox", "/system/bin/vmstat"); symlink("mksh", "/system/bin/sh"); symlink("toolbox", "/system/bin/wipe"); symlink("toolbox", "/system/bin/schedtop"); symlink("toolbox", "/system/bin/getevent"); symlink("toolbox", "/system/bin/mv"); symlink("toolbox", "/system/bin/sendevent"); symlink("toolbox", "/system/bin/setconsole"); symlink("toolbox", "/system/bin/renice"); symlink("toolbox", "/system/bin/iftop"); symlink("toolbox", "/system/bin/watchprops"); symlink("toolbox", "/system/bin/lsof"); symlink("toolbox", "/system/bin/ln"); symlink("toolbox", "/system/bin/chown"); symlink("toolbox", "/system/bin/setprop"); symlink("toolbox", "/system/bin/ioctl"); symlink("toolbox", "/system/bin/dd"); symlink("toolbox", "/system/bin/rmmod"); symlink("toolbox", "/system/bin/reboot"); symlink("toolbox", "/system/bin/notify"); symlink("toolbox", "/system/bin/nandread"); symlink("toolbox", "/system/bin/log"); symlink("toolbox", "/system/bin/mount"); symlink("toolbox", "/system/bin/ctrlaltdel"); symlink("toolbox", "/system/bin/touch"); symlink("toolbox", "/system/bin/hd"); symlink("toolbox", "/system/bin/lsusb"); symlink("toolbox", "/system/bin/getprop"); symlink("toolbox", "/system/bin/start"); symlink("toolbox", "/system/bin/ps"); symlink("toolbox", "/system/bin/chmod"); symlink("toolbox", "/system/bin/dmesg"); symlink("toolbox", "/system/bin/ifconfig"); symlink("toolbox", "/system/bin/netstat"); symlink("toolbox", "/system/bin/rm"); symlink("toolbox", "/system/bin/md5"); symlink("toolbox", "/system/bin/cat"); symlink("toolbox", "/system/bin/insmod"); symlink("toolbox", "/system/bin/stop"); symlink("toolbox", "/system/bin/rmdir"); symlink("toolbox", "/system/bin/sleep"); symlink("toolbox", "/system/bin/ls"); symlink("toolbox", "/system/bin/uptime"); symlink("toolbox", "/system/bin/id"); symlink("toolbox", "/system/bin/date"); symlink("toolbox", "/system/bin/ionice"); symlink("toolbox", "/system/bin/newfs_msdos"); symlink("toolbox", "/system/bin/smd"); symlink("toolbox", "/system/bin/mkdir"); symlink("toolbox", "/system/bin/top"); symlink("toolbox", "/system/bin/lsmod"); symlink("toolbox", "/system/bin/umount"); set_perm_recursive(0, 0, 0755, 0644, "/system"); --> Ahora empezamos a asignar permisos set_perm_recursive(0, 2000, 0755, 0755, "/system/bin"); set_perm(0, 3003, 06755, "/system/bin/ip"); set_perm(0, 3003, 02750, "/system/bin/netcfg"); set_perm(0, 3004, 02755, "/system/bin/ping"); set_perm(0, 2000, 06750, "/system/bin/run-as"); set_perm_recursive(1002, 1002, 0755, 0440, "/system/etc/bluetooth"); set_perm(0, 0, 0755, "/system/etc/bluetooth"); set_perm(1000, 1000, 0640, "/system/etc/bluetooth/auto_pairing.conf"); set_perm(3002, 3002, 0444, "/system/etc/bluetooth/blacklist.conf"); set_perm(1002, 1002, 0440, "/system/etc/dbus.conf"); set_perm(1014, 2000, 0550, "/system/etc/dhcpcd/dhcpcd-run-hooks"); set_perm(0, 2000, 0550, "/system/etc/init.goldfish.sh"); set_perm_recursive(0, 0, 0755, 0555, "/system/etc/ppp"); set_perm_recursive(0, 2000, 0755, 0644, "/system/vendor"); set_perm_recursive(0, 2000, 0755, 0644, "/system/vendor/etc"); set_perm_recursive(0, 0, 0755, 0644, "/system/vendor/firmware"); set_perm(0, 2000, 0755, "/system/vendor/firmware"); set_perm(0, 2000, 0755, "/system/vendor/lib"); set_perm_recursive(0, 2000, 0755, 0755, "/system/xbin"); set_perm(0, 1000, 0755, "/system/xbin/busybox"); symlink("/system/xbin/busybox", "/system/bin/busybox"); run_program("/system/xbin/busybox", "--install", "-s", "/system/xbin"); --> Instala busybox set_perm(0, 0, 06755, "/system/xbin/su"); symlink("/system/xbin/su", "/system/bin/su"); show_progress(0.1, 10); show_progress(0.2, 0); show_progress(0.2, 10); unmount("/system"); --> Desmonta system (lo montó en la seguna linea) package_extract_file("boot.img", "/dev/block/mmcblk0p3"); - --> En caso de que la ROM venga con un kernel lo instala format("ext4", "EMMC", "/dev/block/mmcblk0p14", "0", "/data"); --> format("ext4", "EMMC", "/dev/block/mmcblk0p13", "0", "/cache");-- > En estos casos, hace un formateo de data y de cache. Es mejor dejarlo a elección del usuario, solo lo ponemos cuando sea obligatorio hacer los formateos.
Código:
show_progress(progreso, frecuencia) Recomendado dejarlo en show_progress(0.1, 0) 10% y sin aumento
Código:
ui_print("COMENTARIO") ui_print("Formateando particiones")
Código:
format("ext4", "EMMC", "/dev/block/mmcblk0p12", "0", "/system") --> Obligatorio, ¡también debe montarse! format("ext4", "EMMC", "/dev/block/mmcblk0p14", "0", "/data") --> Opcional format("ext4", "EMMC", "/dev/block/mmcblk0p13", "0", "/cache") --> Opcional
[php]symlink("Roboto-Bold.ttf", "/system/fonts/DroidSans-Bold.ttf"); symlink("Roboto-Regular.ttf", "/system/fonts/DroidSans.ttf"); symlink("busybox", "/system/xbin/["); symlink("busybox", "/system/xbin/[["); symlink("busybox", "/system/xbin/adjtimex"); symlink("busybox", "/system/xbin/arp"); symlink("busybox", "/system/xbin/ash"); symlink("busybox", "/system/xbin/awk"); symlink("busybox", "/system/xbin/base64"); symlink("busybox", "/system/xbin/basename"); symlink("busybox", "/system/xbin/bbconfig"); symlink("busybox", "/system/xbin/blkid"); symlink("busybox", "/system/xbin/blockdev"); symlink("busybox", "/system/xbin/brctl"); symlink("busybox", "/system/xbin/bunzip2"); symlink("busybox", "/system/xbin/bzcat"); symlink("busybox", "/system/xbin/bzip2"); symlink("busybox", "/system/xbin/cal"); symlink("busybox", "/system/xbin/cat"); symlink("busybox", "/system/xbin/catv"); symlink("busybox", "/system/xbin/chattr"); symlink("busybox", "/system/xbin/chgrp"); symlink("busybox", "/system/xbin/chmod"); symlink("busybox", "/system/xbin/chown"); symlink("busybox", "/system/xbin/chroot"); symlink("busybox", "/system/xbin/clear"); symlink("busybox", "/system/xbin/cmp"); symlink("busybox", "/system/xbin/comm"); symlink("busybox", "/system/xbin/cp"); symlink("busybox", "/system/xbin/cpio"); symlink("busybox", "/system/xbin/crond"); symlink("busybox", "/system/xbin/crontab"); symlink("busybox", "/system/xbin/cut"); symlink("busybox", "/system/xbin/date"); symlink("busybox", "/system/xbin/dc"); symlink("busybox", "/system/xbin/dd"); symlink("busybox", "/system/xbin/depmod"); symlink("busybox", "/system/xbin/devmem"); symlink("busybox", "/system/xbin/df"); symlink("busybox", "/system/xbin/diff"); symlink("busybox", "/system/xbin/dirname"); symlink("busybox", "/system/xbin/dmesg"); symlink("busybox", "/system/xbin/dnsd"); symlink("busybox", "/system/xbin/dos2unix"); symlink("busybox", "/system/xbin/du"); symlink("busybox", "/system/xbin/echo"); symlink("busybox", "/system/xbin/ed"); symlink("busybox", "/system/xbin/egrep"); symlink("busybox", "/system/xbin/env"); symlink("busybox", "/system/xbin/expand"); symlink("busybox", "/system/xbin/expr"); symlink("busybox", "/system/xbin/false"); symlink("busybox", "/system/xbin/fdisk"); symlink("busybox", "/system/xbin/fgrep"); symlink("busybox", "/system/xbin/find"); symlink("busybox", "/system/xbin/flash_lock"); symlink("busybox", "/system/xbin/flash_unlock"); symlink("busybox", "/system/xbin/flashcp"); symlink("busybox", "/system/xbin/flock"); symlink("busybox", "/system/xbin/fold"); symlink("busybox", "/system/xbin/free"); symlink("busybox", "/system/xbin/freeramdisk"); symlink("busybox", "/system/xbin/fsync"); symlink("busybox", "/system/xbin/ftpget"); symlink("busybox", "/system/xbin/ftpput"); symlink("busybox", "/system/xbin/fuser"); symlink("busybox", "/system/xbin/getopt"); symlink("busybox", "/system/xbin/grep"); symlink("busybox", "/system/xbin/groups"); symlink("busybox", "/system/xbin/gunzip"); symlink("busybox", "/system/xbin/gzip"); symlink("busybox", "/system/xbin/halt"); symlink("busybox", "/system/xbin/head"); symlink("busybox", "/system/xbin/hexdump"); symlink("busybox", "/system/xbin/id"); symlink("busybox", "/system/xbin/ifconfig"); symlink("busybox", "/system/xbin/inetd"); symlink("busybox", "/system/xbin/insmod"); symlink("busybox", "/system/xbin/install"); symlink("busybox", "/system/xbin/iostat"); symlink("busybox", "/system/xbin/ip"); symlink("busybox", "/system/xbin/kill"); symlink("busybox", "/system/xbin/killall"); symlink("busybox", "/system/xbin/killall5"); symlink("busybox", "/system/xbin/length"); symlink("busybox", "/system/xbin/less"); symlink("busybox", "/system/xbin/ln"); symlink("busybox", "/system/xbin/losetup"); symlink("busybox", "/system/xbin/ls"); symlink("busybox", "/system/xbin/lsattr"); symlink("busybox", "/system/xbin/lsmod"); symlink("busybox", "/system/xbin/lsusb"); symlink("busybox", "/system/xbin/lzcat"); symlink("busybox", "/system/xbin/lzma"); symlink("busybox", "/system/xbin/lzop"); symlink("busybox", "/system/xbin/lzopcat"); symlink("busybox", "/system/xbin/man"); symlink("busybox", "/system/xbin/md5sum"); symlink("busybox", "/system/xbin/mesg"); symlink("busybox", "/system/xbin/mkdir"); symlink("busybox", "/system/xbin/mke2fs"); symlink("busybox", "/system/xbin/mkfifo"); symlink("busybox", "/system/xbin/mkfs.ext2"); symlink("busybox", "/system/xbin/mkfs.vfat"); symlink("busybox", "/system/xbin/mknod"); symlink("busybox", "/system/xbin/mkswap"); symlink("busybox", "/system/xbin/mktemp"); symlink("busybox", "/system/xbin/modinfo"); symlink("busybox", "/system/xbin/modprobe"); symlink("busybox", "/system/xbin/more"); symlink("busybox", "/system/xbin/mount"); symlink("busybox", "/system/xbin/mountpoint"); symlink("busybox", "/system/xbin/mpstat"); symlink("busybox", "/system/xbin/mv"); symlink("busybox", "/system/xbin/nanddump"); symlink("busybox", "/system/xbin/nandwrite"); symlink("busybox", "/system/xbin/netstat"); symlink("busybox", "/system/xbin/nice"); symlink("busybox", "/system/xbin/nohup"); symlink("busybox", "/system/xbin/nslookup"); symlink("busybox", "/system/xbin/ntpd"); symlink("busybox", "/system/xbin/od"); symlink("busybox", "/system/xbin/patch"); symlink("busybox", "/system/xbin/pgrep"); symlink("busybox", "/system/xbin/pidof"); symlink("busybox", "/system/xbin/ping"); symlink("busybox", "/system/xbin/pkill"); symlink("busybox", "/system/xbin/pmap"); symlink("busybox", "/system/xbin/poweroff"); symlink("busybox", "/system/xbin/printenv"); symlink("busybox", "/system/xbin/printf"); symlink("busybox", "/system/xbin/ps"); symlink("busybox", "/system/xbin/pstree"); symlink("busybox", "/system/xbin/pwd"); symlink("busybox", "/system/xbin/pwdx"); symlink("busybox", "/system/xbin/rdev"); symlink("busybox", "/system/xbin/readlink"); symlink("busybox", "/system/xbin/realpath"); symlink("busybox", "/system/xbin/renice"); symlink("busybox", "/system/xbin/reset"); symlink("busybox", "/system/xbin/resize"); symlink("busybox", "/system/xbin/rev"); symlink("busybox", "/system/xbin/rm"); symlink("busybox", "/system/xbin/rmdir"); symlink("busybox", "/system/xbin/rmmod"); symlink("busybox", "/system/xbin/route"); symlink("busybox", "/system/xbin/run-parts"); symlink("busybox", "/system/xbin/rx"); symlink("busybox", "/system/xbin/sed"); symlink("busybox", "/system/xbin/seq"); symlink("busybox", "/system/xbin/setconsole"); symlink("busybox", "/system/xbin/setserial"); symlink("busybox", "/system/xbin/setsid"); symlink("busybox", "/system/xbin/sh"); symlink("busybox", "/system/xbin/sha1sum"); symlink("busybox", "/system/xbin/sha256sum"); symlink("busybox", "/system/xbin/sha512sum"); symlink("busybox", "/system/xbin/sleep"); symlink("busybox", "/system/xbin/sort"); symlink("busybox", "/system/xbin/split"); symlink("busybox", "/system/xbin/stat"); symlink("busybox", "/system/xbin/strings"); symlink("busybox", "/system/xbin/stty"); symlink("busybox", "/system/xbin/sum"); symlink("busybox", "/system/xbin/swapoff"); symlink("busybox", "/system/xbin/swapon"); symlink("busybox", "/system/xbin/sync"); symlink("busybox", "/system/xbin/sysctl"); symlink("busybox", "/system/xbin/tac"); symlink("busybox", "/system/xbin/tail"); symlink("busybox", "/system/xbin/tar"); symlink("busybox", "/system/xbin/taskset"); symlink("busybox", "/system/xbin/tee"); symlink("busybox", "/system/xbin/telnet"); symlink("busybox", "/system/xbin/telnetd"); symlink("busybox", "/system/xbin/test"); symlink("busybox", "/system/xbin/tftp"); symlink("busybox", "/system/xbin/tftpd"); symlink("busybox", "/system/xbin/time"); symlink("busybox", "/system/xbin/timeout"); symlink("busybox", "/system/xbin/top"); symlink("busybox", "/system/xbin/touch"); symlink("busybox", "/system/xbin/tr"); symlink("busybox", "/system/xbin/traceroute"); symlink("busybox", "/system/xbin/true"); symlink("busybox", "/system/xbin/ttysize"); symlink("busybox", "/system/xbin/tune2fs"); symlink("busybox", "/system/xbin/umount"); symlink("busybox", "/system/xbin/uname"); symlink("busybox", "/system/xbin/uncompress"); symlink("busybox", "/system/xbin/unexpand"); symlink("busybox", "/system/xbin/uniq"); symlink("busybox", "/system/xbin/unix2dos"); symlink("busybox", "/system/xbin/unlzma"); symlink("busybox", "/system/xbin/unlzop"); symlink("busybox", "/system/xbin/unxz"); symlink("busybox", "/system/xbin/unzip"); symlink("busybox", "/system/xbin/uptime"); symlink("busybox", "/system/xbin/usleep"); symlink("busybox", "/system/xbin/uudecode"); symlink("busybox", "/system/xbin/uuencode"); symlink("busybox", "/system/xbin/vi"); symlink("busybox", "/system/xbin/watch"); symlink("busybox", "/system/xbin/wc"); symlink("busybox", "/system/xbin/wget"); symlink("busybox", "/system/xbin/which"); symlink("busybox", "/system/xbin/whoami"); symlink("busybox", "/system/xbin/xargs"); symlink("busybox", "/system/xbin/xz"); symlink("busybox", "/system/xbin/xzcat"); symlink("busybox", "/system/xbin/yes"); symlink("busybox", "/system/xbin/zcat"); symlink("mksh", "/system/bin/sh"); symlink("toolbox", "/system/bin/cat"); symlink("toolbox", "/system/bin/chmod"); symlink("toolbox", "/system/bin/chown"); symlink("toolbox", "/system/bin/cmp"); symlink("toolbox", "/system/bin/date"); symlink("toolbox", "/system/bin/dd"); symlink("toolbox", "/system/bin/df"); symlink("toolbox", "/system/bin/dmesg"); symlink("toolbox", "/system/bin/getevent"); symlink("toolbox", "/system/bin/getprop"); symlink("toolbox", "/system/bin/hd"); symlink("toolbox", "/system/bin/id"); symlink("toolbox", "/system/bin/ifconfig"); symlink("toolbox", "/system/bin/iftop"); symlink("toolbox", "/system/bin/insmod"); symlink("toolbox", "/system/bin/ioctl"); symlink("toolbox", "/system/bin/ionice"); symlink("toolbox", "/system/bin/kill"); symlink("toolbox", "/system/bin/ln"); symlink("toolbox", "/system/bin/log"); symlink("toolbox", "/system/bin/ls"); symlink("toolbox", "/system/bin/lsmod"); symlink("toolbox", "/system/bin/lsof"); symlink("toolbox", "/system/bin/md5"); symlink("toolbox", "/system/bin/mkdir"); symlink("toolbox", "/system/bin/mount"); symlink("toolbox", "/system/bin/mv"); symlink("toolbox", "/system/bin/nandread"); symlink("toolbox", "/system/bin/netstat"); symlink("toolbox", "/system/bin/newfs_msdos"); symlink("toolbox", "/system/bin/notify"); symlink("toolbox", "/system/bin/printenv"); symlink("toolbox", "/system/bin/ps"); symlink("toolbox", "/system/bin/r"); symlink("toolbox", "/system/bin/reboot"); symlink("toolbox", "/system/bin/renice"); symlink("toolbox", "/system/bin/rm"); symlink("toolbox", "/system/bin/rmdir"); symlink("toolbox", "/system/bin/rmmod"); symlink("toolbox", "/system/bin/route"); symlink("toolbox", "/system/bin/schedtop"); symlink("toolbox", "/system/bin/sendevent"); symlink("toolbox", "/system/bin/setconsole"); symlink("toolbox", "/system/bin/setprop"); symlink("toolbox", "/system/bin/sleep"); symlink("toolbox", "/system/bin/smd"); symlink("toolbox", "/system/bin/start"); symlink("toolbox", "/system/bin/stop"); symlink("toolbox", "/system/bin/sync"); symlink("toolbox", "/system/bin/top"); symlink("toolbox", "/system/bin/touch"); symlink("toolbox", "/system/bin/umount"); symlink("toolbox", "/system/bin/uptime"); symlink("toolbox", "/system/bin/vmstat"); symlink("toolbox", "/system/bin/watchprops"); symlink("toolbox", "/system/bin/wipe");[/php]
set_perm_recursive(uid, gid, permisos_carpeta, permisos_archivo, "ruta") [php]set_perm_recursive(0, 0, 0755, 0644, "/system"); set_perm_recursive(0, 2000, 0755, 0755, "/system/bin"); set_perm(0, 3003, 06755, "/system/bin/ip"); set_perm(0, 3003, 02750, "/system/bin/netcfg"); set_perm(0, 3004, 02755, "/system/bin/ping"); set_perm(0, 2000, 06750, "/system/bin/run-as"); set_perm_recursive(1002, 1002, 0755, 0440, "/system/etc/bluetooth"); set_perm(0, 0, 0755, "/system/etc/bluetooth"); set_perm(1000, 1000, 0640, "/system/etc/bluetooth/auto_pairing.conf"); set_perm(3002, 3002, 0444, "/system/etc/bluetooth/blacklist.conf"); set_perm(1002, 1002, 0440, "/system/etc/dbus.conf"); set_perm(1014, 2000, 0550, "/system/etc/dhcpcd/dhcpcd-run-hooks"); set_perm_recursive(0, 2000, 0755, 0750, "/system/etc/init.d"); set_perm(0, 0, 0777, "/system/etc/init.d"); set_perm(0, 2000, 0550, "/system/etc/init.goldfish.sh"); set_perm_recursive(0, 0, 0755, 0555, "/system/etc/ppp"); set_perm_recursive(0, 2000, 0755, 0644, "/system/vendor"); set_perm_recursive(0, 2000, 0755, 0644, "/system/vendor/etc"); set_perm_recursive(0, 0, 0755, 0644, "/system/vendor/firmware"); set_perm(0, 2000, 0755, "/system/vendor/firmware"); set_perm(0, 2000, 0755, "/system/vendor/lib"); set_perm(0, 2000, 0755, "/system/vendor/lib/hw"); set_perm_recursive(0, 2000, 0755, 0755, "/system/xbin"); set_perm(0, 1000, 0755, "/system/xbin/busybox"); symlink("/system/xbin/busybox", "/system/bin/busybox"); run_program("/system/xbin/busybox", "--install", "-s", "/system/xbin"); set_perm(0, 0, 0777, "/system/bin/.ext"); set_perm(0, 0, 06755, "/system/bin/.ext/.su"); set_perm(0, 0, 06755, "/system/xbin/su");[/php]Más comandos para los Updater-script en este enlace: Última edición por Kiamu Día 01/06/13 a las 19:58:56. |
Los siguientes 38 usuarios han agradecido a Kiamu su comentario: | ||
#6
|
||||
|
||||
NOVENO PASO: DECOMPILAR Y COMPILAR APK
Hay varios programas o kitchens para compilar y decompilar aplicaciones. Una apk es un archivo comprimido, a menos que queramos cambiar las imágenes no nos sirve con abirlo con un descompresor de archivos. Decompilar sirve para personalizar mucho Android o la propia aplicación, así como traducirla. Para decompilar apk usaremos "Virtuous Ten Studio" un programa gratuito con algunas opciones especiales de pago. Podemos descargarlo de ESTA página. Una vez descargado lo instalamos, es posible que nos pida instalar "Microsoft .NET Framework 4.5" para poder continuar. Esta es la interfaz que nos encontramos: A la hora de decompilar es fundamental decirle al programa bajo que framework tiene que trabajar. Sony incluye dos framework diferentes en sus Xperia "framework-res.apk" y "SemcGenericUxpRes.apk" presentes ambas en system/framework. 1. Dar a VTS los dos framework con los que trabajar. Vamos a "File"/Open Settings/External tools/Apktool, damos a Add multiple framework (same tag) y damos un nombre al conjunto de framewoks que vamos a dar. En la siguiente pantalla vamos a "use local files", navegamos hasta la carpeta donde están los framework. Nos mostrará la carpeta vacía. Aceptamos en ese carpeta. Debería aparecernos así, dos framework con el nombre que nosotros pusimos. Ahora ya podemos empezar a decompilar apk 2. Decompilando una apk. Ahora vamos a File/New Proyect y:
3.¿Que podemos hacer?
4.Compilar Cuando acabemos de editar nuestro archivo simplemente hacemos click encima de el y damos a "Build project", nos entregará nuestra app compilada y firmada. Normalmente la guarda en Mis Documentos/Virtuous Ten Studio/Projectsnombrequelehasdado/nombredelaapp/binary Ahora solo tenemos que soltarla dentro de nuestro zip de la ROM. Nota: VTS también nos permite editar archivos ".jar". OCTAVO PASO: INTRODUCE MOD's DE TERCEROS EN TU ROM Como veis realmente la parte más complicada de la cocina en Android es crear tus propios MODs, se requieren conocimientos de programación o tiempo buscando tutoriales. En todos los modelos de Android siempre encontraremos Mods hechos por teceros que podremos incluir en nuestra ROM. No tiene mucha ciencia la cosa. Muchas veces basta con bajarte el MOD, descomprimirlo y soltar los archivos que tenga dentro en las misma carpetas; sustituyendo a los que hay por defecto. Otras veces, estos MOD son más complejos y traen archivos nuevos o los archivos que sustituyen requieren otro tipo de permisos. En este caso hemos de darles estos permisos a la vez que instalamos la ROM, es decir, debemos editar el updater-script. Lo primero debemos consultar el updater-script que trae nuestro MOD y hacer una lectura comprensiva de el. Tenemos que ver que permisos da, si elimina alguna aplicación, etc. Una vez mirado los añadimos al updater-script de nuestra ROM. Por ejemplo: PRIMER UPDATER-SCRIPT DE UN MOD X Código:
ui_print(" "); ui_print(">>> Mount system..."); run_program("/sbin/mount", "/system"); run_program("/sbin/busybox","mount","/data"); ui_print(" "); delete_recursive("/system/app/SystemUI.odex"); delete_recursive("/system/framework/android.policy.odex"); ui_print(">>> Extracting files..."); package_extract_dir("system", "/system"); package_extract_dir("data/", "/data/local"); ui_print(" "); ui_print(">>> Unmount system..."); run_program("/sbin/umount", "/system"); run_program("/sbin/umount", "/data"); ui_print("Press thanks if it works :D "); ui_print(">>> Reboot system..."); run_program("/sbin/sleep", "5"); run_program("/sbin/reboot"); Depende. Fijate en los delete_recursive, ahí nos está elimando dos archivos. Pero SOLO elimina archivos odex, es decir si nuestra ROM es deodex no tenemos que eliminarlos. Si nuestra ROM es odex podemos eliminarlos a pelo en system/app o incluir estas dos lineas en nuestro updater-script. ¿Facil no? SEGUNDO UPDATER-SCRIPT DE UN MOD Y Código:
ui_print("Activating SONY Camera Driver"); set_perm_recursive(0, 2000, 0755, 0755, "/system/bin/mm-gs-camctrl-test"); set_perm_recursive(0, 2000, 0755, 0755, "/system/bin/MPQDvbCTestApp"); set_perm_recursive(0, 2000, 0755, 0755, "/system/bin/MPQStrMgrTest"); set_perm_recursive(0, 2000, 0755, 0755, "/system/bin/MPQUnitTest"); set_perm_recursive(0, 2000, 0755, 0755, "/system/bin/MPQVideoRendererTestApp"); ui_print(""); ui_print("Done..."); unmount("/system"); Última edición por Kiamu Día 16/06/13 a las 20:11:35. |
Los siguientes 25 usuarios han agradecido a Kiamu su comentario: | ||
#7
|
||||
|
||||
Añadidos futuros:
+ Crea tus tweaks init.d + Bootanimation personalizada + ftf de Kernel y Baseband + Obtener archivos a partir de un ftf Agradecimientos: Creo que debo agradecer este tutorial a:
Marc0sgb Última edición por Kiamu Día 16/06/13 a las 20:25:51. |
Los siguientes 27 usuarios han agradecido a Kiamu su comentario: | ||
#9
|
||||
|
||||
Muchas gracias kiamu, enserio!
|
#10
|
||||
|
||||
Excelente trabajo Kiamu!!!!! Tiene una pinta estupenda y con explicaciones muy accesibles.
Mañana me paso para darte las gracias en todos lo post. |
#12
|
||||
|
||||
¡Genial! Como que lo empujas a uno al mundillo este de la cocina, espero animarme y hacer algunas pruebas con mi Xperia S ahora que Jelly Bean está a la vuelta de la esquina/ojala Aunque admito que me da algo de miedillo el dejar el teléfono como una bonita maqueta.
|
#14
|
||||
|
||||
Esto es justamente lo que estaba esperando, estuve leyendo para meterme en el mundo de la cocina y con este curro pues nada que decir, a ponerle ganas y meterle mano a mi XS
|
Gracias de parte de: | ||
#15
|
||||
|
||||
WOW !!!
Perfecto !!! La habia estado buscando por mucho tiempo... Estare moscas de nuevas actualiazciones... |
#16
|
||||
|
||||
Kiamu , fantástico el trabajo
Un 10 ya y chincheta !! Gracias |
#17
|
||||
|
||||
Muchísimas gracias
Hace mucho que estaba esperando y buscando un tutorial, para cocinarme alguna que otra rom Gracias de nuevo |
Gracias de parte de: | ||
#18
|
||||
|
||||
buen trabajo compañero
|
#19
|
||||
|
||||
Eres un grande compañero
|
|
Estás aquí | ||||||
|