论文部分内容阅读
应用程序少是基于GNU/Linux的各种桌面发行版没能在桌面操作系统领域大量流行的重要原因。借用其他平台的应用程序是解决桌面Linux系统应用程序少的一种思路。一般使用系统虚拟机和兼容层技术解决应用程序跨平台执行的问题。系统虚拟机因为要在host系统运行一个完整的guest系统而带来很高的额外性能开销。本文目标是设计并实现一个Android兼容层,旨在使Android应用程序不经修改即可在桌面Linux系统上以本地进程的形式运行,在充分利用桌面系统的高性能硬件资源的同时,兼顾一些影响兼容性的关键技术。 通过分析现有兼容层技术,总结出兼容层技术地一般方法。在详细分析Android系统架构的基础上,提出Android兼容层的技术路线:1)使Android Java虚拟机在x86架构下运行;2)使Android系统服务在桌面环境下运行;3)以Android系统开机过程为线索组织各个组件。 Android和桌面Linux发行版一样使用Linux作为系统内核。通过面向x86架构编译AOSP源码,并基于Bionic C的多架构支持可以解决二进制文件兼容和系统调用支持问题,实现Android本地程序在桌面Linux系统上执行。进而实现Android Java虚拟机在桌面x86架构下执行。本文以ART作为默认Java虚拟机,以Intel Houdini作为动态二进制翻译机制,并使用NativeBridge将两者解耦,成功实现JNI在x86架构下调用arm共享库的问题,极大的增加了系统兼容性。 Android应用程序在桌面Linux系统上的正确执行离不开Android系统服务的支持。Android设备和桌面Linux系统软硬件环境的巨大差异使得一些系统服务并不能通过简单的交叉编译移植到桌面环境执行。其中最值得关注的是Android的图形合成系统SurfaceFlinger和输入系统InputManagerService。本文提出一种比现有方案更加简洁高效的图形系统移植方案,实现了Android应用程序的UI渲染过程和SurfaceFlinger的图像合成过程能均够使用GPU进行硬件加速。通过将X Window鼠标事件模拟为InputManagerService可识别的触屏点击事件,实现通过鼠标和Android应用进行交互。此外,在深入分析Android GUI系统的基础上,给出一种简洁的多窗口架构,使用户可以同时使用多个Android应用程序。 最后,在研究Android系统开机过程的基础上,通过定制Init进程的行为,有序组织Android兼容层的各个组件。 基于这些关键技术,本文开发了一个Android兼容层原型。相对于已有Android兼容层方案,该原型具备更好地兼容性和图形性能,用户能像桌面应用程序一样和Android应用程序交互,并可同时使用多个Android应用。