15
CURSO DE CREACIÓN DE ROMS PARA ANDROID FAQSAndroid.com

Curso de creación de ROMS

Embed Size (px)

Citation preview

Page 1: Curso de creación de ROMS

 

CURSO DE CREACIÓN DE ROMS PARA ANDROID

 

FAQSAndroid.com  

 

 

Page 2: Curso de creación de ROMS

 

  2  

 

INTRODUCCIÓN  

Tras  un  primer  curso  en  el  que  hemos  aprendido  a  hacer  una  aplicación  Android  hoy  os  traemos  el  recopilatorio  del  segundo,  centrado  en  la  creación  de  una  ROM.  

Se  enfoca  el  curso  a  los  usuarios  noveles  en  este  campo  por  lo  que  partiremos  de  una  ROM  existente  y  veremos  las  modificaciones  que  se  le  pueden  hacer.  

El   creador   es   Robert   P.,   uno   de   los   editores   del   blog   que   tiene   a   sus   espaldas   ya  algunas  aplicaciones  y  es  miembro  destacado  de  XDA  Developers.  

El  curso  ha  sido  recopilado  en  este  PDF  completamente  gratuito  para  tenerlo  a  mano  en  un  solo  lugar.  

ÍNDICE  

1. Preparación  del  entorno.  2. Modificando  imágenes  en  una  app.  3. Modificando  código  en  una  app.  4. Creación  del  zip  con  nuestra  ROM.  

Page 3: Curso de creación de ROMS

 

  3  

 

CAPÍTULO  1  

Preparación  del  entorno  

Aunque   pueda   parecer   lo   contrario,   la   creación   de   una   ROM   no   es   un   proceso  complejo,  aunque  debe  hacerse  de   forma  metódica  para  evitar  errores  que  puedan  afectar  al  dispositivo  y  a  sus  usuarios,  para  lo  que  es  fundamental  probar  el  producto  final  en  nuestro  equipo  durante  unos  días  antes  de  publicar  cada  nueva  release.  

Afortunadamente,   no   es   necesario   iniciar   el   cocinado   de   una   ROM  desde   cero,   sino  que  es  posible  descargar  la  base  de  la  misma  y  empezar  a  realizar  nuestros  cambios  sobre   ésta,   para   lo   cual   será   necesario   saber   qué   tipo   de   ROM  es   la   que   deseamos  cocinar,  teniendo  en  cuenta  que,  en  general,  existen  dos  grandes  grupos  de  ROMs:  las  basadas   en   el   estándar   AOSP   (CM,  AOKP,  MIUI)   y   las   basadas   en   los   desarrollos   del  fabricante   (Sense,   TouchWiz,   etc),   cada   una   de   las   cuales   incorpora   sus   propias  particularidades.  

En  el  caso  concreto  de  este  tutorial  desarrollaremos  una  ROM  para  ser  utilizada  en  un  Galaxy   SII   y   basada   en   TouchWiz   aunque,   como   ya   os   indicamos   anteriormente,  procuraremos   ser   lo   suficientemente   genéricos   como   para   que   pueda   tomarse   de  referencia   para   el   desarrollo   de   casi   cualquier   tipo  de  ROM,   con   la   salvedad  de  que  algunas  de  las  basadas  en  AOSP  pueden  desarrollarse  a  partir  del  código  fuente  o  de  la  compilación  oficial,  recomendándose  esta  última  opción  inicialmente.  

 

Preparando  el  entorno  

Para  el  desarrollo  de  nuestra  ROM  utilizaremos  un  ordenador  personal  provisto  de  la  versión  11.04  de  Ubuntu,  un  sistema  operativo  que  al   igual  que  Android   se   basa   en  Unix,  y  en  el  cual  ejecutaremos  la  aplicación  Android  Kitchen,  desarrollada  por  dsixda,  

Page 4: Curso de creación de ROMS

 

  4  

reconocido  desarrollador  y  moderador  del  foro  XDA-­‐Developers  y  que  permite  cocinar  ROMs  para  más  de  60  modelos  diferentes.  

Los  usuarios  de  Windows  pueden  utilizar  también  esta  aplicación,  para   lo  cual  deben  instalar  cygwin,  una  aplicación  que  permite  simular  un  entorno  Unix  sobre  el  sistema  operativo  de  Microsoft.  

La  instalación  del  Android  Kitchen  es  sencilla  y  tan  sólo  requiere  de  la  descompresión  del   archivo   zip   que   contiene   todos   los   scripts   y   configuraciones   en  el  directorio  de  nuestra   elección,   si   bien   será   necesario   para   que   todo   el   conjunto   funcione  correctamente  que  hayamos  instalado  el  android-­‐sdk  con  anterioridad.  

La  instalación  del  software  de  cocinado  creará  los  siguientes  elementos  en  el  directorio  raíz  del  programa:  

• original_update:  Directorio  en  el  que  debemos  almacenar  la  ROM  base.  • scripts   y   tools:   Carpetas   que   contienen   el   código   fuente   del   programa   y   las  

herramientas  auxiliares.  • menu:   Script  de   inicio  del  programa,  que  debe  ejecutarse  para  acceder   a   sus  

funcionalidades.  • README:  Archivo  con  información  relevante  sobre  la  aplicación.  

Descarga  de  la  ROM  base  

En  cuanto  a  la  ROM  que  usaremos  de  base  y  que,  como  habíamos  indicado  se  basará  más   arriba,   se   basará   en   el   desarrollo   oficial   de   Samsung,   la   descargaremos   de  SamMobile.com,  el  sitio  oficial  de  descarga  de  ROMs  de  dispositivos  Samsung.  

 

Page 5: Curso de creación de ROMS

 

  5  

Una   vez   descargada   la   ROM   base,   que   en   nuestro   caso   es   simplemente   un   archivo  comprimido   (en   formato   zip   o   rar,   según   el   caso),   deberemos   extraer   el   contenido  relevante   de   la  misma   (archivos   factoryfs.img,   cache.img   y   zimage)   en   el   directorio  original_update,  tras  lo  cual  podremos  acceder  al  Android  Kitchen  e  iniciar  el  cocinado  de  nuestra  ROM.  

En   caso   que   el   archivo   descargado   de   SamMobile.com   fuera   en   formato   zip,   lo  más  probable  es  que  su  contenido  incluyera  un  archivo  de  tipo  tar  o  tar.md5,  que  es  el  que  realmente   contiene   la   ROM   de   la   que   hay   que   extraer   los   archivos   indicados   en   el  párrafo  superior.  

Empezar  el  proceso  

El  archivo  factoryfs.img  contiene  la  imagen  de  nuestra  ROM  base,  pero  en  un  formato  que  no  es  fácilmente  modificable,  por  lo  que  procederemos  a  obtener  los  archivos  que  contiene,   para   lo   ejecutaremos   el   Android   Kitchen   y   seleccionar   la   opción   1,   que  desempaquetará   los   archivos   en   un   directorio   temporal   incluyendo,   si   así   lo  especificamos,  el  CSC  de  la  ROM,  que  se  encuentra  en  el  archivo  cache.img.  

Seguidamente   añadiremos   el   root   a   la   ROM,   seleccionando   la   opción   2   y   pulsando  seguidamente   la   tecla   f,   que   añadirá   el   binario   su   y   la   aplicación   SuperUser.apk   de  ChainsDD.  

La   opción   3   nos   permitirá   añadir   el   programa   busybox,   que   resulta   de   especial  relevancia  para  aplicaciones  privilegiadas  y  que  deberíamos  incluir  siempre.  

 

Usaremos  la  opción  8  para  definir  el  nombre  de  nuestra  ROM,  que  aparecerá  cuando  el  usuario  acceda  a  Configuración  →  Acerca  del  teléfono.  

Page 6: Curso de creación de ROMS

 

  6  

La   opción   0   desplegará   un  menú   con   opciones   avanzadas,   entre   las   que   destaca   la  opción  número  11,  que  realiza  el  deodex  de   las  aplicaciones  de  nuestra  ROM,   lo  que  nos  permitirá,  posteriormente,  aplicarles  temas.  

Deberemos   seleccionar   la   opción   f   (deodex   las   apps   en   las   carpetas   system   y  framework)  en  el  submenú  correspondiente,  no  sin  antes  seleccionar  la  opción  v  para  indicar  que  se  trata  de  una  ROM  basada  en  Ice  Cream  Sandwitch  (API  número  14).  

Finalizado  el  proceso,  que  se  prolongará  durante  unos  minutos  debido  a  que  el  sistema  debe   procesar  más   de   100   aplicaciones,   hemos   obtenido   como   resultado   una   ROM  básica  customizable,  que  encontraremos  en  el  directorio  base  del  Android  Kitchen,   y  que  podemos  empezar  a  modificar;  aunque  eso  será  en  la  próxima  sesión.  

Page 7: Curso de creación de ROMS

 

  7  

CAPÍTULO  2  

Modificando  imágenes  en  una  app    

Una  vez  descargada  la  ROM  base  que  utilizaremos  en  nuestro  proyecto,  que  según  el  caso   también   podríamos   compilar   a   partir   del   código   fuente,   y   una   vez   realizado   el  deodex  de  las  aplicaciones,  que  básicamente  lo  que  hace  es  fusionar  los  archivo  odex  y  apk  de  cada  aplicación  del  sistema  dentro  del  archivo  apk  correspondiente,  y  que  es  en  principio   independiente  del   dispositivo,   podremos   iniciar   el   customizado   de   nuestra  ROM,   que   básicamente   podrá   incluir   cambios   estéticos   (iconos,   colores,   layouts)   o  internos  (cambios  en  el  código  de  algunas  aplicaciones).  

Lo  normal  es  empezar  a  realizar  cambios  en  el  plano  estético,  que  generalmente  son  más  sencillos  de  aplicar  y  que  podremos  probar  en  nuestro  propio  terminal  sin  temor  a  un  brick,  si  bien  los  errores  al  realizar  cambios  en  el  framework  pueden  provocar  algún  que   otro   susto,   por   lo   que   es   muy   importante   hacer   copias   de   seguridad   de   los  archivos   que   cambiamos   en   nuestro   dispositivo,   sobretodo   si   se   trata   de   nuestro  dispositivo  de  uso  diario,   lo  que   suele   ser  habitual,  pudiendo   restaurar   los   archivos  originales   mediante   el   recovery   en   caso   de   error,   para   lo   cual   deberemos   haber  rooteado  el  terminal  antes,  obviamente.  

 

En  general  deberemos   tener  en   cuenta  que   los   colores,   iconos   y   gráficos  en  general  que   son   usados   por   varias   aplicaciones   se   encontrarán   en   el   archivo  system/framework/framework-­‐res.apk,  y  opcionalmente  en  algún  otro  apk  dentro  del  mismo  directorio,  dependiendo  de  la  ROM  concreta  (en  el  caso  de  Samsung  el  archivo  system/framework/twframework-­‐res.apk).  

Page 8: Curso de creación de ROMS

 

  8  

En   cuanto   a   los   iconos   de   aplicaciones   concretas   (reloj,   calendario,   settings,   etc)   se  encontrarán  en  el  archivo  correspondiente  a  su  aplicación  en  el  directorio  system/app.  

En  cualquier  caso,  la  modificación  siempre  se  realiza  de  la  misma  manera:  

1. Decompilación  de  la  aplicación  a  modificar,  2. Implementación  de  las  modificaciones,  3. Recompilación,  4. Sustitución  de  archivos  esenciales.  

La  decompilación  de  la  aplicación  debe  realizarse  usando  la  utilidad  apkTool,  tal  como  ya  os  hemos  explicado  en  otras  ocasiones,  radicando  la  única  complicación  posible  en  localizar   qué   versión   del   mencionado   programa   se   adapta   a   la   versión   concreta   de  Android  que  queremos  utilizar.  

Una   vez   realizada   la   decompilación,   podremos   realizar   los   cambios   que   deseemos,  tanto  en  los  archivos  de  imágenes  como  en  los  relacionados  con  los  colores,  cadenas  de  texto,  etc,  siempre  teniendo  en  cuenta  la  estructura  de  directorios  presente  en  las  apps  Android.  

 

En   cuanto   a   la   recompilación,   puede   realizarse   la  misma  utilidad   apkTool,   si   bien   es  recomendable  descargar  alguna  utilidad,   tal  como  apkManager,  que  se  encargará  de  ejecutar   la   utilidad   anterior   con   los   parámetros   adecuados,   minimizando   la  probabilidad  de  cometer  errores.  

Page 9: Curso de creación de ROMS

 

  9  

No  obstante,  no  será  posible  utilizar  el  nuevo  archivo  en  nuestra  ROM  directamente,  debido   al   sistema   de   firmas   de   Android,   siendo   necesario   realizar  manualmente   un  cambio   en   dicho   archivo   para   incluir   el   certificado   original   (algunos   gestores  incorporan  la  posibilidad  de  realizar  este  cambio  automáticamente).  

Para  realizar  el  cambio  haremos  lo  siguiente:  

1. Abrir   el   nuevo   archivo   apk   que   hemos   generado   usando   la   utilidad   WinRar  (que  podemos  descargar  de  forma  gratuita),  

2. Abrir  el  antiguo  archivo  apk  utilizando  WinRar  o  cualquier  utilidad  de  gestión  de  archivos  comprimidos,  

3. Extraer   los   archivos   AndroidManifest.xml   y   classes.dex   y   el   directorio  META-­‐INF,  

4. Incluir   los   archivos  del   punto  anterior   en  el   nuevo  archivo   apk   seleccionando  como  método  de  compresión  el  valor  normal.  

Finalmente   indicar   que,   en   el   caso   que   en   una   app   sólo   queramos   cambiar   algún  elemento   gráfico   (archivos   en   el   directorio   res/drawable*),   es   posible   realizar   los  cambios   directamente   (sin   necesidad   de   decompilar,   recompilar   y   añadir   firmas),  pudiendo  sustituirse  las  imágenes  necesarias  en  la  apk  original  usando  WinRar,  para  lo  cual  deberemos  recordar  seleccionar  como  modo  de  compresión  el  valor  ninguno.  

 

Page 10: Curso de creación de ROMS

 

  10  

CAPÍTULO  3  

Modificando  código  en  una  app  

 

En   el   capítulo   anterior   del   curso   práctico   de   desarrollo   de   ROMs   para   Android  aprendimos  a  decompilar   una   aplicación   para  modificar   el   layout   de   alguna   de   las  actividades  (ventanas)  que  la  formaban,  así  como  algunos  colores  o  imágenes,  lo  que  nos  permitirá  aplicar  nuestros  propios  temas  a  la  ROM.  

No   obstante,   y   pese   a   que   los   usuarios   valoran   este   tipo   de   cambios,   que   además  permiten  agregar  elementos  diferenciadores  a  nuestra  ROM,   la  mayor  parte  de  ellos  valora   aún   más   aquellos   cambios   que   conducen   a   la   resolución   de   algún   bug,   que  desgraciadamente  siempre  existen,  o  a  la  inclusión  de  nuevas  funcionalidades;  para  lo  cual  suele  ser  necesario  tocar  el  código  fuente  de  los  programas.  

En  cualquier  caso,  y  pese  a  que  Android  es  un  sistema  de  código  abierto,  la  licencia  con  la  que  se  publica  no  afecta  a  las  aplicaciones  ni  a  las  capas  que  incluyen  el  fabricante  o  el   operador   correspondiente,   tales   como  Sense   (HTC)   o   TouchWiz   (Samsung),   por   lo  que   en   la  mayor   parte   de   los   casos   no   podremos   realizar   los   cambios   en   el   código  fuente   de   los   programas   y   deberemos   optar   por   modificar   el   código   que   nos  proporciona  el  decompilador,  algo  que  no  siempre  es  fácil.  

 

Como   ya   hemos   explicado   anteriormente,   la   decompilación   y   recompilación   de   las  aplicaciones  se  realiza  mediante  la  utilidad  apkTool,  creada  por  Brut.all,  desarrollador  de  reconocido  prestigio  en  el  mundillo  Android,  si  bien  en  este  caso  nos  fijaremos  en  el  directorio   smali,   que   es   el   que   contiene   el   código   fuente,   en   un   formato   pseudo-­‐máquina  que  no  resulta  demasiado  fácil  de  seguir.  

A   partir   del   directorio   smali   encontraremos   los   diferentes   paquetes   y   clases   que   ha  definido  el  desarrollador,  no  siendo  necesario  que  entendamos  el  contenido  de  dichos  archivos,   cuyo   hilo   estructural   es,   como   hemos   indicado,   prácticamente   ilegible,  

Page 11: Curso de creación de ROMS

 

  11  

sobretodo   si   su   creador   ha   ofuscado   el   código   con   el   objeto   de   evitar   la   ingeniería  inversa,  algo  que  viene  siendo  bastante  común.  

En  cualquier  caso,  para  la  aplicación  de  un  parche  simplemente  deberemos  seguir  las  instrucciones  del  desarrollador  del  mismo,  que  nos  indicará  el  archivo,  procedimiento  y   línea   (o   líneas)   que   debemos  modificar,   tras   lo   cual   procederemos   al   recompilado  (existen  multitud  de  fuentes  en  las  que  encontrar  optimizaciones  o  modificaciones  de  apps  Android,   siendo   la  más  conocida  el   foro  XDA-­‐Developers,  que   incluye  sub-­‐foros  específicos  para  la  mayor  parte  de  los  terminales  Android).  

 

Al  igual  que  ocurría  con  las  modificaciones  relativas  a  imágenes,  deberemos  recordar  aplicar  la  firma  de  la  aplicación  original  a  la  nueva  aplicación,  ya  que  podríamos  tener  problemas  en  caso  de  no  hacerlo.  

Lógicamente,  deberemos  testear  los  cambios  introducidos  en  nuestro  dispositivo  antes  de  incluirlos  en  nuestra  ROM,  para  lo  cual  iniciaremos  el  dispositivo  en  modo  recovery  y   copiaremos   la   aplicación   modificada   al   directorio   /system/app,   de   forma   que   la  aplicación  anterior  será  reemplazada,  procediendo  también  a  eliminar  los  rastros  de  la  aplicación   original   del   directorio   /data/dalvik-­‐cache,   algo   que   realizaremos   siempre  desde  el  recovery.  

Page 12: Curso de creación de ROMS

 

  12  

CAPÍTULO  4  

Creación  del  ZIP  con  nuestra  ROM  

 

En  capítulos  anteriores  de  nuestro  curso  de  creación  de  ROMs  aprendimos  a  generar  los  archivos  y  programas  de  inicio  sobre  los  que  basaremos  nuestra  ROM,  algunos  de  los   cuales  decompilamos  para  aplicar   temas  o  parches,   tras   lo   cual   tan   sólo  quedará  empaquetar  y,  si  es  el  caso,  distribuir  la  ROM  en  algún  foro  especializado.  

Antes   de   proceder   al   empaquetado   de   la   ROM   deberemos   asegurarnos   que   hemos  reemplazado  todos  los  archivos  de  base  por  los  que  hemos  modificado,  garantizando  también  que  hemos  conservado   las   firmas  originales  de  aquellos  que   tienen  que  ver  con   el   propio   sistema   o   con   Google,   ya   que   en   caso   de   no   hacerlo   se   producirían  errores.  

 

Hecho   esto,   procederemos   a   ejecutar   el   Android   Kitchen,   que   tras   comprobar   si  existen  actualizaciones  nos  mostrará  un  menú  con  las  diferentes  opciones  disponibles,  de  las  cuales  recomendamos  activar  las  siguientes:  

• 3   -­‐   Add   root   permissions:   Rooteará   nuestra   ROM,   algo   que   desean   todos   los  usuarios  de  ROMs  cocinadas.  

• 4  -­‐  Add  busybox:  Busybox  es  un  programa  que  añade  multitud  de  comandos  (de  Linux)  a  nuestro  dispositivo,  tales  como  “cp”  (el  programa  que  permite  copiar  archivos)  y  que  luego  pueden  ser  usados  por  las  aplicaciones.  

• 8   –   Change   name   of   ROM:   Permite   cambiar   el   nombre   que   aparecerá   en   la  casilla   correspondiente   al   nombre   de   la   ROM   en   la   pestaña   Ajustes   →  Información  del  teléfono.  

Page 13: Curso de creación de ROMS

 

  13  

Seguidamente   accederemos   al   submenú   de   opciones   avanzadas   (0   –   Advanced  options),  en  el  que  activaremos  las  casillas:  

• 13   –   Add   /data/app   functionality:   Esta   casilla   es   necesaria   si   vamos   a  preinstalar  algún  programa  en   la  partición  de  datos,  permitiendo  automatizar  el  copiado  de  los  mismos  cuando  se  instale  la  ROM,  si  es  el  caso.  

• 15  –  Add  Bash  (command  shell):  Reemplaza  el  intérprete  de  comandos  (shell),  por  una  versión  más  moderna  y  que  soporta  un  mayor  número  de  órdenes.  

• 23   –   Convert   update-­‐script   or   updater-­‐script:   Inicialmente   sólo   un   pequeño  número  de  comandos  podían  ser  incluidos  en  el  programa  de  instalación  de  la  ROM,   los   cuales   se   almacenaban   en   el   archivo   update-­‐script,   que   fue  reemplazado  en  posteriores  versiones  por  el  archivo  updater-­‐script,  al  que  se  le  añadió  un  mayor  número  de  comandos.  

Una  vez  activadas  las  opciones  anteriores,  o  aquellas  que  consideremos  convenientes  para  nuestro  proyecto,  procederemos  a  generar  el  instalable  de  nuestra  ROM,  para  lo  cual  volveremos  al  menú  principal   (pulsando   la  opción  0  –  Back  to  main  menú)  en  el  menú  de  opciones  avanzadas,   tras   lo  que  seleccionaremos   la  opción  99  –  Build  ROM  from  working  menú.  

 

Tras   pulsar   la   mencionada   opción,   nos   aparecerá   un   nuevo   menú   en   el   que  seleccionaremos   la   opción   1   -­‐   interactive   mode,   en   la   que   responderemos  afirmativamente   a   todas   las   preguntas,   lo   que   provocará   que   las   aplicaciones  presentes  en  nuestra  ROM  se  optimizen  antes  de  generar  el  zip  y  que  el  contenido  de  éste  se  firme,  algo  que  requieren  algunas  versiones  del  recovery.  

Al   finalizar   este   proceso   tendremos   un   archivo   zip   con   nuestra   ROM   cocinada   en   el  directorio  OUTPUT_ZIP   (a  partir  de  la  ruta  en  la  que  hubiéramos  instalado  el  Android  Kitchen),  que  podremos  instalar  en  nuestro  dispositivo  o  distribuir,  según  el  caso.  

Page 14: Curso de creación de ROMS

 

  14  

Esperamos  que  este  tutorial  haya  sido  de  vuestro  agrado  y  os  animamos  a  enviarnos  vuestras   consultas   sobre   este   u   otros   temas,   para   lo   que   podéis   utilizar   los  comentarios  al  final  de  esta  página  o  nuestro  foro,  con  el  hilo  abierto  para  este  curso  desarrollo  ROMs.  

Page 15: Curso de creación de ROMS

 

  15  

 

 

El  CURSO  DE   CREACIÓN  DE   ROMS   EN   ANDROID   ha   sido  desarrollado  por  Robert   P.  para  FaqsAndroid.com  del  Grupo  bemoob.  

 

 

 Este  obra  está  bajo  una  Licencia  Creative  Commons  Atribución-­‐NoComercial-­‐

SinDerivadas  3.0  Unported.  

 

by