LineageOS移植Pixel导航栏动画

前言

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

坚持原创技术分享,您的支持将鼓励我继续创作!