LineageOS移植Pixel导航栏动画
原文链接 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 Launcher
和Google Assistant
都不再是Pixel系列独享了,但是依旧有很多人对于Pixel依旧独享的导航栏动画非常感兴趣。
同理,我也很喜欢那个动画,从我去年十二月份刚开始使用Android N
,我使用的Nexus 6
在XDA论坛有一个大神做了一盒mod整合包(参考地址),包括网速显示,Pixel开机动画,Pixel导航栏动画等,从那时候开始,我便一直在使用这个mod,直到今年4月份。
那个时候我不太喜欢那位大神的网速显示,然后就自己拿着LineageOS
源码添加网速显示,并且取得了成功,从那之后我便一直使用自编译的系统直到现在。
网速显示,开机动画这些我都自己添加到源码中了,没有添加的也做成了mod包。只有导航栏动画我没找到办法。
办法
两个月前,我只找到一个教程,就是通过反编译SystemUI.apk
然后移植动画,对于这种方法,我是觉得太过于麻烦了,而且从某一个版本开始,我回编译SystemUI.apk
不能成功了,所以这种办法我直接放弃。
虽然决定了放弃,但是并不是说这种办法不可行,而我也简单研究了一下这种方法需要修改什么东西。
总共需要改以下东西:
- home键的布局文件——
home.xml
dimens.xml
ids.xml
styles.xml
- 大部分的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