Comunidad Abierta En El Desarrollo De Distribuciones Basadas En Android
Total Page:16
File Type:pdf, Size:1020Kb
UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO FACULTAD DE INGENIERÍA COMUNIDAD ABIERTA EN EL DESARROLLO DE DISTRIBUCIONES BASADAS EN ANDROID TESIS Que para obtener el título de INGENIERO EN COMPUTACIÓN P R E S E N T A JONATHAN DANIEL CRUZ RABADÁN DIRECTOR DE TESIS ING. JUAN J. CARREÓN GRANADOS Ciudad Universitaria, Cd. Mx., 2018 AGRADECIMIENTOS A la Facultad de Ingeniería de esta máxima casa de estudios de M xico! la UNAM! donde recibí la $ormación como ingeniero& A la "NAM& A mi asesor de tesis! el Ingeniero 'uan 'os Carreón Granados! por permitirme desarrollar este traba)o ba)o su asesoría& A todos mis maestros de la carrera& A Ira y Arturo, quienes siempre han demostrado ser padres ejemplares y me han apoyado incondicionalmente. A mi hermano Saúl, porque es como mi segundo padre, y también el mejor hermano que alguien pudiera tener. A mi abuela Carmelita (Q !"), a quien recuerdo con gran cariño. A mis t%os, Victor y Nahúm. A Mary Bell. A mis amigos* A Adrián, por escucharme, aconsejarme y ser un gran amigo para todo. A Carlos, quien siempre me ha brindado gran apoyo tanto personal como profesional. A Coco, Sergio, Humberto y Enrique, por haber estado en los momentos importantes de mi vida. / por último pero no menos importante, a Julio César, quien me enseñó que se puede volar en lugar de ser una persona gris. Índice general Resumen 1 Abstract 3 1. Antecedentes de Android 5 1.1. Introducción a los dispositivos móviles . .5 1.1.1. Los dispositivos móviles . .5 1.1.2. Sistemas operativos para móviles . .6 1.1.3. Estadísticas de uso de dispositivos móviles . .7 1.2. Nacimiento de Android . .8 2. Planteamiento del problema 10 2.1. Objetivo . 12 2.2. Método . 12 3. Android 13 3.1. AOSP . 15 3.1.1. Versiones de Android por API . 16 3.2. Máquina virtual . 17 3.2.1. Dalvik . 18 3.2.2. ART . 18 i 3.3. Kernel . 19 3.3.1. Kernel Linux . 19 3.3.2. Kernel de Android . 20 3.3.2.1. Requerimientos . 21 3.3.2.2. Ramas . 21 3.3.2.3. Lineamientos . 21 3.3.2.4. Pruebas . 23 3.3.3. Kernels personalizados . 23 3.4. Particiones estándar en Android . 24 3.5. Bootloader . 26 3.5.1. Bootloader en dispositivos Android . 26 3.6. Root . 27 3.6.1. Root en Android . 27 3.6.2. Systemless root . 29 3.6.3. Seguridad relacionada al acceso root en Android . 29 3.7. Android Debug Bridge . 29 3.8. SDK . 30 3.9. Dispositivos virtuales . 31 3.9.1. AVD Manager . 32 3.9.2. Rendimiento de los emuladores . 35 3.9.3. Comunicación con los emuladores . 37 3.9.3.1. Comunicación al dispositivo virtual por medio de Telnet 38 3.9.3.2. Comunicación entre múltiples instancias del dispositivo virtual . 41 3.10. Dispositivos Nexus . 42 3.11. Las ROM . 45 ii 3.11.1. Distribuciones basadas en AOSP . 46 3.11.1.1. CyanogenMod . 46 3.11.1.2. LineageOS . 47 3.11.1.3. SlimRoms . 47 3.11.1.4. Nitrogen OS . 47 3.11.2. Distribuciones basadas en stock . 48 3.12. SafetyNet . 48 3.13. ¿Por qué usar una ROM de la comunidad abierta? . 49 4. Desarrollo 50 4.1. Instalación de una distribución Android de la comunidad abierta en el dispositivo . 51 4.1.1. Desbloqueo del bootloader e instalación de Recovery personalizado 53 4.1.2. Sustitución del sistema operativo . 59 4.1.3. OpenGapps . 62 4.2. Configuraciones adicionales . 69 4.2.1. Root en la nueva distribución . 69 4.2.1.1. SuperSU . 69 4.2.1.2. Magisk . 70 4.2.2. Utilización de un kernel personalizado . 70 4.2.2.1. Kernel manager . 73 4.2.3. Configuraciones disponibles del Kernel . 73 4.2.3.1. CPU . 73 4.2.3.2. GPU y Pantalla . 74 4.2.3.3. Voltaje . 75 4.2.3.4. Audio . 76 4.2.3.5. Memoria . 77 iii 4.2.4. Configuraciones adicionales del kernel . 82 4.3. Pruebas de la nueva distribución . 83 4.3.1. Aplicaciones a instalar . 84 4.3.2. Benchmarks . 85 4.4. Estadísticas de uso de distribuciones de la comunidad abierta . 88 4.5. Conclusiones . 88 Bibliografía 91 iv Resumen Desde la introducción de Android como sistema operativo para teléfonos inteligentes, surgió una comunidad de desarrolladores independientes que se encargaron de persona- lizar el software de sus dispositivos, añadiendo características que al principio fueron consideradas faltantes en el software original y permitiendo a los usuarios configurar parámetros que de otra manera no hubieran podido modificar. Con el tiempo, la comunidad abierta de desarrollo de software ha jugado un pa- pel importante. Desde el inicio de Android, la comunidad abierta fue quien aprovechó una vulnerabilidad del sistema operativo presente en el HTC Dream que permitió al usuario adquirir permisos de súper usuario, iniciando así un camino donde aparecieron aplicaciones que Google, como principal desarrollador oficial de Android no tenía consi- deradas que existieran. Surgieron entonces aplicaciones que hacían uso de los permisos elevados concedidos, las cuales permitieron a la comunidad abierta ofrecer más libertad a los usuarios que eligieran modificar sus teléfonos. La posibilidad de modificar el software fue percibido como una amenaza por parte de los fabricantes, quienes han ido perfeccionando mecanismos para impedir que los usuarios modifiquen el software original, y que en caso de hacerlo, el fabricante pueda invalidar de inmediato la garantía ofrecida a los consumidores o restringir el uso del dispositivo. Google, por otro lado, ha creado métodos de verificación que indican si el software en un móvil ha sido alterado, permitiendo así a los desarrolladores de apps usar esa información para impedir la ejecución de sus aplicaciones en ese dispositivo. La modificación del Código Abierto de Android permitió que características que solamente se encontraban presentes en distribuciones no oficiales, fueran permeando a las oficiales, cerrando así la brecha entre las versiones originales y las modificadas. Una posibilidad importante resultante del desarrollo de distribuciones de la comuni- 1 dad abierta es que permite tener una versión de Android reciente en dispositivos cuyos fabricantes abandonaron el soporte oficial de actualizaciones. Por lo tanto, podemos obtener un software actualizado si optamos por instalar una distribución no oficial en dispositivos antiguos pero que por sus características de hardware puedan ser utilizados de forma segura. 2 Abstract Since the introduction of Android as an operating system for mobile phones, a new developers independent community was born, which was the one in charge of customizing the software running in their devices, adding features that were not included at the begining in the original software, and allowing users to change extra parameters which in other way they would not have been able to modify. The open software development comunity has had an important role. Since An- droid’s begining, that comunity was which took advantage of an operating system vul- nerability that was found in the HTC Dream which permited users to gain root access. Since that, apps using root access have been developed, which allowed the open comu- nity to offer freedom to whom chose to modify his mobile’s software, although Google had not considered it. That new posibility was percibed like a security threat for makers, which have been improving mechanisms in order not to permit users modifying the original software, and whether it has been done, warranty might be void, or the functionality of the device would be restringed. On the other hand, Google has created methods of verification that indicate if the running software in the device has been modified, allowing app developers to use that information to block the execution of their apps in these devices. Modifications over Android open source have allowed some features that were only present in no-official distributions arrived to the official ones, closing the gap between the original and the modified ones. A quite important posibility when an open comunity distribution is ported to a device, is that the phone would have a newer operating system version even though the maker has laid it down as its official support period has finished. Thus, we may obtain an upgraded system whether we chose installing an open community distribution in 3 older devices as their specifications permit to be used securely for an extra time. 4 Capítulo 1 Antecedentes de Android 1.1. Introducción a los dispositivos móviles 1.1.1. Los dispositivos móviles Desde el inicio del siglo XXI los dispositivos móviles han ido cambiando a la sociedad. Éstos nos permiten estar comunicados a cualquier instante, enterarnos de las noticias, el clima, conectarnos a los servicios que se ofrecen en la nube, obtener información del tráfico en las calles y no menos importante, los juegos. Sus prestaciones han ido creciendo, ofreciendo características como memoria RAM, 5 CPUs y GPUs con rendimientos que hasta hace poco sólo se veían en dispositivos más grandes como las computadoras de escritorio y portátiles. Esta evolución no sólo se ha dado en el aspecto de hardware, sino también y de manera muy acelerada, en el software. De hecho, un dispositivo sin software no nos serviría para nada. En este tenor, el software que un usuario final ocuparía, consiste básicamente de un sistema operativo, y aplicaciones ejecutándose sobre éste. 1.1.2. Sistemas operativos para móviles En los últimos 10 años han existido varios sistemas operativos para dispositivos móviles, principalmente en teléfonos inteligentes, entre los que destacan: ! Android ! BlackBerry OS ! Firefox OS (B2G OS posteriormente) ! iOS ! Symbian ! Tizen ! Ubuntu Touch ! webOS (Sucesor de Palm OS) ! Windows Phone Cada uno de ellos cuenta con una tasa de utilización diferente en el mercado, y el que domina actualmente es Android con un 74.39 %.