Tengo un teléfono (Samsung Galaxy A320F (AKA "A3 (2017)") con la ROM de stock que contiene un kernel armv8l de 64 bits (Linux 3.18.14) y un espacio de usuario de 32 bits con la plataforma Android 8.0.0 de 32 bits. Algunas aplicaciones de Android sólo proporcionan bibliotecas basadas en el NDK de 64 bits, lo que las hace incompatibles con esta configuración.
He intentado transferir algunos binarios ELF64 al teléfono, como gdb
, strace
, gphoto2
junto con libc.so.6
, ld-linux-aarch64.so.1
y otras partes de glibc. Funcionan bien, así que confío en la capacidad del kernel para manejar esos binarios.
Ahora me gustaría tratar de hacer que la plataforma Android sea capaz de 64 bits. En particular, estoy interesado en hacer que el APK de 64 bits sea capaz de comunicarse con la pantalla, la pantalla táctil y un dispositivo USB conectado al teléfono. Tengo acceso Root (a través de Magisk), así que en principio, puedo hackear el sistema como quiera.
Mi pregunta es ahora: ¿qué componentes hacen que la plataforma Android sea de 32 o 64 bits? ¿Es sólo la VM, o tal vez algunas bibliotecas adicionales? ¿O tiene que haber también una parte de 64 bits de la HAL? ¿Cuántos de estos componentes podrían tomarse de, por ejemplo, Lineage OS sin tener que instalar el Lineage OS completo? ¿Alguien ha intentado hacer un mod similar?
1 votos
En mi opinión, puede ser más fácil unirse al desarrollo de una ROM personalizada basada en 64 bits para tu dispositivo en xda-developers.com. Yo asumiría que esto es mucho más fácil que tratar solo de modificar una versión existente de Android no tiene las fuentes para un gran número de componentes / binarios.
1 votos
Véase mi respuesta detallada a ¿Podría un dispositivo con hardware de 64 bits ejecutar una versión de Android de 32 bits?
0 votos
@IrfanLatif aunque interesante, no aborda en absoluto esta cuestión. De esa respuesta he aprendido principalmente que un verdadero sistema operativo Android de 64 bits puede tener un montón de procesos de 32 bits (siempre que haya soporte de CPU y kernel para el modo de compatibilidad), pero nada acerca de qué componentes permiten la compatibilidad de la plataforma con APKs de 64 bits-NDK.
0 votos
Bueno, pensé que la respuesta a su pregunta sería evidente después de leer mi respuesta. ¿Qué componentes hacen que el sistema operativo Android sea de 64 bits? Simplemente es el conjunto de librerías (aparte del kernel) que vienen con la ROM, incluyendo VMs/zygote (las
app_process
binario), enlazador y libc. Daemon ejecutables (AOSP's y vendor HALs) incluyendoinit
y otras herramientas en/bin
también son de 64 bits. Pero algunos demonios y HAL pueden seguir siendo de 32 bits incluso en una ROM de 64 bits (he citado un ejemplo en mi respuesta). Así que las ROMs de 64 bits incluyen ambos conjuntos de librerías (en/lib
y/lib64
), aunque esto puede cambiar en el futuro.0 votos
Abordar su situación en particular,
armv8l
significa que tu kernel es de 64b pero el proceso de espacio de usuario que consulta la arquitectura se ejecuta en personalidad de 32b. Así que lo que necesitas para ejecutar aplicaciones sólo 64b (ya que Google está empujando a los desarrolladores hacia 64b) es recompilar tu ROM para 64b. Eso no es imposible, pero sería un reto. Como he dicho, algunos componentes centrales de la plataforma no estaban preparados para 64b y los desarrolladores de Google los dejaron en 32b para ser portados en el futuro (no estoy seguro de la última situación en 10 y 11). Hastazygote
no se ejecuta en modo 64b, no será posible ejecutar aplicaciones creadas únicamente con bibliotecas 64b.