LineageOS移植Pixel导航栏动画

2017-07-14 Mystery0 M 更多博文 » 博客 » GitHub »

Android Rom

原文链接 https://mystery00.github.io/2017/07/14/LineageOS%E7%A7%BB%E6%A4%8DPixel%E5%AF%BC%E8%88%AA%E6%A0%8F%E5%8A%A8%E7%94%BB/
注:以下为加速网络访问所做的原文缓存,经过重新格式化,可能存在格式方面的问题,或偶有遗漏信息,请以原文为准。


前言

Google Pixel & Pixel XL是Google在2016年10月4日推出的全新Android智能手机,接任之前的Nexus系列,也是Pixel系列首次推出智能手机产品;于东8区时间2016年10月5日凌晨的Google秋季发布会上正式公布。 可以说对于Pixel系列,大多数人都不陌生,Pixel系列作为最先搭载Android N操作系统的移动终端系列,除了Android N之外,还有独享的Pixel Launcher以及Google Assistant。 当然,对于现在(2017/07/14)来说,Pixel LauncherGoogle Assistant都不再是Pixel系列独享了,但是依旧有很多人对于Pixel依旧独享的导航栏动画非常感兴趣。 同理,我也很喜欢那个动画,从我去年十二月份刚开始使用Android N,我使用的Nexus 6在XDA论坛有一个大神做了一盒mod整合包(参考地址),包括网速显示,Pixel开机动画,Pixel导航栏动画等,从那时候开始,我便一直在使用这个mod,直到今年4月份。 那个时候我不太喜欢那位大神的网速显示,然后就自己拿着LineageOS源码添加网速显示,并且取得了成功,从那之后我便一直使用自编译的系统直到现在。 网速显示,开机动画这些我都自己添加到源码中了,没有添加的也做成了mod包。只有导航栏动画我没找到办法。

办法

两个月前,我只找到一个教程,就是通过反编译SystemUI.apk然后移植动画,对于这种方法,我是觉得太过于麻烦了,而且从某一个版本开始,我回编译SystemUI.apk不能成功了,所以这种办法我直接放弃。 虽然决定了放弃,但是并不是说这种办法不可行,而我也简单研究了一下这种方法需要修改什么东西。 总共需要改以下东西:

  1. home键的布局文件——home.xml
  2. dimens.xml
  3. ids.xml
  4. styles.xml
  5. 大部分的java代码 可以看出来,前四样都是布局相关的,直接反编译pixel的apk也能得到数据,但是最重要的是第五样,home.xml中将KeyButtonView用了一个叫做OpaLayout的控件包起来,而我想在源码层一劳永逸的话,必须要搞到java代码而不是smali。 这也是我当初放弃了的原因。 这里是当初我找到的反编译修改的方法:[Guide] How to Port Pixel Navigation Bar Animation to Your Phone (Updated to 7.1.1 Final) 没找到相应的java代码,也没找到pixel的源码,所以就暂时搁置了。 直到今天。 隔几天我就喜欢进xda论坛看看有没有什么有趣的东西或者rom,mod之类的,但是今天下午我看到了一个rom——DARK ROM 14.1 而在这个rom的简介中列出了pixel的导航栏动画:

Key features

  • Full OMS support (rootless)
  • Signature spoofing support
  • Pixel Launcher (with the provided GAPPS package)
  • Pixel animated navbar (with on/off switch)
  • Pixel sounds
  • Pixel accent colors
  • Pixel bootanimation with sound
  • Rounded icons
  • Google Assistant
  • Night Light
  • Night Light Brightness
  • Choose between dialer and voice assistant in lockscreen
  • Hide next alarm from expanded status bar and lockscreen
  • Disable the boot animation sound
  • Secure lockscreen (disables status bar pull down, quick settings tiles, power button and lockscreen shortcuts)
  • Double tap the lock icon on the lockscreen to sleep
  • Longpress power button while screen off to trigger flashlight
  • Hide bluetooth icon when disconnected
  • Volume steps
  • Quick unlock pin/password
  • Remove album art from lockscreen
  • Date in status bar
  • Battery bar
  • Custom headers
  • Smart pulldown
  • Volume button controls media volume anywhere
  • Change navbar height
  • Screenshot tile
  • Caffeine tile
  • Sync tile
  • Reboot/recovery tile
  • Music tile
  • USB Tethering tile
  • NFC tile
  • Quick settings custom rows/columns
  • Turn on/off mobile data with single click on collapsed quick settings
  • Status bar ticker
  • Separate ring and notification volume
  • Specific color for 100% charged battery
  • Prevent accidental wakeup
  • Remove settings suggestions
  • Show WiFi SSID in status bar
  • Show carrier label in status bar
  • Hide carrier label when WiFi SSID is showing
  • Hide carrier label on the lockscreen (or rename to whatever you want)
  • Hide the low battery warning notification
  • Remove the orange status bar and navigation bar when in battery saver mode
  • One hand mode
  • Choose doze brightness
  • Adjust animation scale precisely with a slider
  • Dynamic nav bar color (changes color to the same of status bar)
  • In-call vibration options (on connect, on call waiting and on disconnect)

可以说是很强大了,但是我关注的是pixel的导航栏动画。简单翻了一下,下面居然有github地址,也就是说有pixel导航栏动画的源码。 后来也就猜到了,我找到了对应的OpaLayout.java文件,然后添加到我的源码中,修改,编译,成功。 这里留下这个rom在nexus 6的帖子:[ROM][LOS14.1][7.1.2_r24] DARK ROM [OMS][Pixel features][Delta updates]

具体修改

OpaLayout.java 上面的就是这个rom中的OpaLayout.java文件了。但是直接添加进去是无法使用的。 由于不知道这个rom是什么样子的,所以我直接把文件扔进源码编译了,我相信编译器会告诉我哪里错了。 果不其然,编译的时候提示我第100行和614行有错误。 告诉我找不到CMSettings.System.PIXEL_NAV_ANIMATION,看起来这个应该是设置项什么的,而我想要的是一直显示,自然不需要一个开关,所以我去掉了设置相关的代码,并且在setOpaEnabled方法中设置为一直显示。 编译,成功。 最后放上我修改过的OpaLayout.java源文件。 其他布局相关的修改可以参照反编译的方法中的代码。

参考列表

[Guide] How to Port Pixel Navigation Bar Animation to Your Phone Cool Pixel Mod for StockOS - Android 7.1.1 / LineageOS - Android 7.1.2 [ROM][LOS14.1][7.1.2_r24] DARK ROM [OMS][Pixel features] LineageOS/android_frameworks_base darkeyes84/android_frameworks_base