让旧手机运行 Android O? 看看 Android Go 是如何做到的

  • 佐嗣晏
  • 发表   2018-1-22 10:29
  • 查看: 4046| 评论 |原作者: 佐嗣晏
Android Go 是谷歌基于Android 8.1 Oreo 的精简版 Android 系统,是成为针对 1GB 或更低内存的低端设备的 Android 优化版。Android Go 是为下一代入门级设备开发的,为的是确保发展中国家的消费者仍然可以使用功能正 ...
Android-Go-1.png




Android Go 是谷歌基于Android 8.1 Oreo 的精简版 Android 系统,是成为针对 1GB 或更低内存的低端设备的 Android 优化版。Android Go 是为下一代入门级设备开发的,为的是确保发展中国家的消费者仍然可以使用功能正常的智能手机来访问互联网并使用应用程序。

Android Go 拥有各种性能优化和改进,比如其内存占用比普通 Android O 少一半,设备平均运行速度比在同一设备上安装常规的 Android O 快 15%。这些优化是通过谷歌制作的一些专门的构建配置完成的,将在后面进行解释。

Screen_Shot_2017-12-05_at_11.54.52_AM.width-1000-768x359.png

Android Go 还益于特殊的 “Go” 系列应用程序,比如 Files Go,YouTube Go 和 Google Maps Go。这些是由谷歌制作的轻量级版应用,不那么吃配置。这意味着那些使用 Android Go 设备的用户可以拥有标准的 Android 系统体验,开心地使用谷歌全家桶,无需购买昂贵的旗舰手机。

这关乎谷歌扩大智能机市场的计划。但是开发者们可能会有疑问,如果 Android Go 主要基于构建配置和一套优化过的谷歌应用组成,那么开发者是否可以自己构建一个 “Android Go”?答案是肯定的。




一些 LineageOS 开发者已经在开发拥有 Android Go 优化的 ROM

已经有一部分开发者对 Android Go 十分感兴趣,比如 XDA 认可的开发者AdrianDC,正在做 LineageOS 15.1 上的工作,同时也在进行针对几款老式索尼手机的 Android Go 配置构建 。上面提到的索尼设备是索尼 Xperia SP,索尼 Xperia T,索尼 Xperia V 和索尼 Xperia TX。这些设备已经是五六年前推出的“准古董”了,但是他们将会得到拥有 Android Go 优化的 LineageOS 15.1,这可能会让这些“准古董”流畅地运行 Google “Go” 系列应用程序。

任何独立的 LineageOS 开发者都应该可以引入一个 Android Go 的构建配置,使得 LineageOS 成为 Android Go 优化和其他优化的综合版本。这意味着那些可能购买了索尼 Xperia T 的人,昨天手机还在运行 Android 4.0.4,明天就能够用上 Android 8.1,以及最新的 YouTube Go 和Google Maps Go 等应用程序。




Android Go 如何帮助老 Android 手机运行 Android Oreo

Android 上的配置构建是一组与 Android 系统各个方面相关的参数,这些参数通常这会改变系统的行为,而 Android Go 主要就是针对构建配置进行优化。

build-configs-android-go-768x852.png

如果想让 Android Go 发挥作用。其中一些配置构建必须在重新编译的情况下才能修改,并且会成为 ROM 蓝图的一部分。但是这涉及诸如 Android 在存储和内存使用等多个方面,包括自动存储管理,Android 低内存杀手,dalvik可执行文件(DEX),优化和针对应用程序的 RAM 限制。而 APK 文件由 DEX 文件组成,因此你可以将 APK 文件看成一个包含许多 .dex 文件的 ZIP 文件。另外,自动存储管理将由 Files Go 来控制,而不是让 Android 系统控制。




Android Go 参考了 Android 的低 RAM 模式

在 Android 4.4 KitKat 中,谷歌推出了一个名为 “low-ram”  的新标志,旨在支持只有 512MB 内存的设备。它对系统进行了一些优化,这些改变对于低 RAM 设备是非常有效的。

  • 已验证的内存节省内核配置:切换到 ZRAM
  • 如果未被缓存或者缓存太大,杀死这个进程
  • 不要让大型服务把自己归类到 A 服务里(避免启动器被误杀)
  • 如果进程在空闲维护中变得过大,杀死这个进程
  • 序列化的后台服务启动
  • 调谐低 RAM 设备的内存使用:更严的内存不足预警级别,更小的图形缓存等
  • 修改 system_server 和 SystemUI 进程
  • 在 Dalvik 预载 dex 缓存
  • 经过验证的 JIT-OFF 选项
  • 减少了每个进程的字体缓存占用
  • 引入 ArrayMap / ArraySet,并在框架中广泛使用,作为 HashMap / HashSet 的轻量级替换





Android Go使用修改的低内存杀手和dex优化

鉴于 Android Go 主要用于内存为 1GB 或更低的设备,还需要进行更积极的内存管理。Android Go 以几种不同的方式修改低内存杀手 (low memory killer)。首先,当大量的 RAM 被消耗时,低内存杀手将进入“临界压力”状态。这是因为当内存使用率变得过高时,设备存储上的交换文件被频繁访问,系统就会变卡。保持 RAM 有足够的空余能避免系统不停地使用交换文件或者爆内存。

通过将各种基本服务以及 WiFi 服务设置为“速度档”,可以让这些服务进行提前编译,可以减少 RAM 的使用和存储。同时共享 APK 被设置为“加速”,通过优化 dex 指令来获得更好的性能,从而延长电池寿命和额外的 CPU 周期。

在 dex 优化方面,Android Go 做了很多,比如对不常用的应用进行降级处理。此处降级并不是说应用程序的实际版本号会被降低,而是指这个应用程序的 dalvik_cache 将被清除。使用 Dalvik 缓存是为了使设备不用重新编译应用程序,而只编译最需要的部分并对其进行缓存。其余部分在应用程序运行时使用 Just in Time(JIT)编译器进行编译。但是如果应用程序在 10 天内没有使用,那么预编译的应用程序的主要部分也将被删除。这样做是为了释放尽可能多的空间。另一个简单的变化是不允许应用程序的 RAM 使用超过 256MB,以至于应用程序无法使用设备上的所有RAM。




Android Go 将成为低端设备定制 ROM 的未来吗?

目前并不能下一个定论,但是对于旧设备上的自定义 ROM 开发来说,前景很光明。虽然在设备上运行最新版本的 Android 可能还有其他问题,但从理论上说,基于 Android O 并进行了优化的 Android Go 肯定比 Android 4.4 用起来要舒服多了。



Source: XDA Developers


加pixel中文网官方微信公众账号,扫描下图或者搜索"pixel中文网"关注!

最新评论

返回顶部