[Guide] How to Port Pixel Navigation Bar Animation to Your Phone (Updated to 7.1.1 Final)

After I posted the Pixel Navigation bar animation mod for Nexus 5X / Nexus 6P, I have received a number of people’s messages, they were asking me to port the animation to their Roms. So I have tried on some custom Rom and succeed in 7.1 Rom, like Oneplus One with AOSP Rom, HTC M8 with CM 14.1, and Nexus 6 running UBERSTOCK Rom, but failed with all the 7.0 Roms, maybe someone could pointed out if the failure is API related.

Meanwhile some theme/mod developers wanted to know about the trick, and ask me if they can plant the animation in their mod, I said yes and I’m going to record these words to show how to modify the System UI component to add the Pixel exclusive navigation bar animation.

First of all, to clarify, the navigation bar animation was just a animation, it was connected with Google Assistant by default, that means you only can use it in English/Germany at present, not available in other languages. That’s why in some Pixel review videos, you did not see this little creativity things. But I have succeed in separating it from Google Assistant connection, and now it can perform even if without the Google Assistant, I hope these animation can be show in most of 7.1 Roms soon.

Nav bar animation Pixel

PS: Android 7.1.1 Final ‘s update was added at Step 3.4, new code. Pixel’s apk still the old one, will upload the latest 7.1.1 version later.

This is a guide for people who know about Windows’s CMD commands and have some base code skills. For other newbies, I will go to explain everything in a simple way and will take the Nexus 5X for an example, we will do this on Windows.

Tools we need to download:

JDK, for Java tools runtime, you can get it from oracle.com, install it then reboot your PC.

Baksmali, for decode SystenUI.odex, you can get it from https://bitbucket.org/JesusFreke/smali/downloads, download and put the Baksmali.jar file in a new folder named “Baksmali”.

Apktool, for decode SystemUI.apk, get it from https://ibotpeaches.github.io/Apktool/, download and put the Apktool.jar, Apktool.bat in a new folder “Apktool”.

Sublime Text, for searching and editing smail file, download it in their official website.

Web also need to get those files from your Rom:

SystemUI.apk, Path: \Root\System\priv-app\SystemUI\

SystemUI.odex (Stock Rom Only), Path: \Root\System\priv-app\SystemUI\ota\arm64\(/arm for 32 bit device.)

framework-res.apk Path: \Root\System\framework\

Oat files, required to deodex process.(Stock Rom only): Path: \Root\System\framework\arm64\(/arm for 32 bit device), PS. need all files in the directory.

We also need the SystemUIGoogle.apk form Pixel or Pixel XL (for different dip screen), we need their resources and smali codes. Download it here (All has updated to 7.1.1):

Pixel:  SystemUIGoogle.apk from AFH mirror

Pixel XL: SystemUIGoogle XL.apk from AFH mirror

Update 02/13/2017: This Guide still works for Android 7.1.2 beta.

OK, I suppose you already get all stuff, let’s begin the magic. Remember I am using the Nexus 5X with Stock 7.1.1 developer preview 1 as example, things will change on your side with different devices, do not copy and paste all things from here to your files.

Step 1, Stock Rom was odexed, (Custom Rom does not have this issue, jump to step 2 if you are on custom Roms like CM or AOSP rom.) it means the front-end and back-end of system apps were separated in two files, like SystemUI.apk and SystemUI.odex, we need to combine the two files together.

How to combine the apk and odex file?

If you search on the Internet for how to decompile apk files, you can find many resources, learn about this knowledge, then, let’s do the easy steps first, which is decompile SystemUI.apk. In Windows’s explorer, navigate to the Apktool folder, hold shift key and right click the mouse, select “Open Command Window Here”, this will open a black DOS command window. Copy framework-res.apk, SystemUI.apk to the same folder.

We need to install the framework for Apktool to decompile apks. Input the command in the DOS command window.

java -jar apktool.jar if framework-res.apk

Wait a few seconds, apktool will response you a successful message. Then let’s input the decompile command,

java -jar apktool.jar d SystemUI.apk
, then we wait for apktool finish decompile the SystemUI.apk and get the /SystemUI folder, look into it and you can find “original”, “res”, two sun-folders, we are missing the “smali” folder. Where is it? It is inside the SystemUI.odex.

Step 1.1 Let’s go to the Baksmali folder. We put the SystemUI.odex and the Oat files all together in the root of “Baksmali” folder, open DOS command here and input this command:

java -jar baksmali.jar deodex SystemUI.odex -l
, a “out” folder will appear in /Baksmali folder, open it and copy all files, then go back to “SystemUI” folder, create a folder named it “smali” , open it then paste the files from “out”, until now, we get all the sources for compile a new SystemUI.apk, but we need to modify something before the first compilation (we have to compile it twice.)

Step 2 Plant the new resources of Pixel navigation bar animation from SystemUIGoogle.apk. First, we decompile the SystemUIGoogle.apk with Apktool, we got the folder SystemUIGoogle, now I will give you a list for telling you what we have to copy and modify, go into SystemUIGoogle folder, copy those files to SystenUI folder with the same path “\res\drawable\”.


\res\drawable\halo.xml
\res\drawable\ic_sysbar_opa_blue.xml
\res\drawable\ic_sysbar_opa_green.xml
\res\drawable\ic_sysbar_opa_red.xml
\res\drawable\ic_sysbar_opa_yellow.xml

Good, you should be familiar with the operation of apktool, next, we will modify some xml files for making the new resources alive. I also make a list for the modification details, all the operation has to be done with Sublime Text:

Step 2.1. Open SystemUI\res\layout\home.xml and SystemUIGoogle\res\layout\home.xml with Sublime Text.
Change

<com.android.systemui.statusbar.policy.KeyButtonView android:id="@id/home" android:layout_width="@dimen/navigation_key_width" android:layout_height="fill_parent" android:src="@drawable/ic_sysbar_home" android:scaleType="center" android:layout_weight="0.0" android:contentDescription="@string/accessibility_home" android:paddingStart="@dimen/navigation_key_padding" android:paddingEnd="@dimen/navigation_key_padding" systemui:keyCode="3"
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:systemui="http://schemas.android.com/apk/res-auto" />

To

<com.google.android.systemui.OpaLayout android:id="@id/home" android:clipChildren="false" android:clipToPadding="false" android:layout_width="@dimen/navigation_key_width" android:layout_height="fill_parent" android:layout_weight="0.0" android:paddingStart="@dimen/navigation_key_padding" android:paddingEnd="@dimen/navigation_key_padding"
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:systemui="http://schemas.android.com/apk/res-auto">
<RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent">
<ImageView android:id="@id/red" android:src="@drawable/ic_sysbar_opa_red" android:importantForAccessibility="no" style="@style/DotStyle" />
<ImageView android:id="@id/blue" android:src="@drawable/ic_sysbar_opa_blue" android:importantForAccessibility="no" style="@style/DotStyle" />
<ImageView android:id="@id/green" android:src="@drawable/ic_sysbar_opa_green" android:importantForAccessibility="no" style="@style/DotStyle" />
<ImageView android:id="@id/yellow" android:src="@drawable/ic_sysbar_opa_yellow" android:importantForAccessibility="no" style="@style/DotStyle" />
</RelativeLayout>
<ImageView android:layout_gravity="center" android:id="@id/white" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_sysbar_home" android:importantForAccessibility="no" />
<com.android.systemui.statusbar.policy.KeyButtonView android:layout_gravity="center" android:id="@id/home_button" android:layout_width="@dimen/navigation_key_width" android:layout_height="fill_parent" android:scaleType="center" android:contentDescription="@string/accessibility_home" systemui:keyCode="3" />
<ImageView android:layout_gravity="center" android:id="@id/halo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/halo" android:importantForAccessibility="no" />
</com.google.android.systemui.OpaLayout>

PS. copy the sources code from SystemUIGoogle’ home.xml rather than from here! You can copy all codes from SystemUIGoogle’ home.xml.

Step 2.2. Open SystemUI\res\values\dimens.xml, Copy these code from SystemUIGoogle’s dimens.xml, add it to the end of the file before “</resources> ” label.Y

 <dimen name="halo_inner_radius">10.0dip</dimen>
<dimen name="halo_thickness">1.0dip</dimen>
<dimen name="halo_diameter">22.0dip</dimen>
<dimen name="opa_dot_diam">10.0dip</dimen>
<dimen name="opa_diamond_translation">16.0dip</dimen>
<dimen name="opa_line_y_translation">16.0dip</dimen>
<dimen name="opa_line_x_trans_ry">15.0dip</dimen>
<dimen name="opa_line_x_trans_bg">30.0dip</dimen>
<dimen name="opa_line_x_collapse_bg">46.0dip</dimen>
<dimen name="opa_line_x_collapse_ry">15.0dip</dimen>
<dimen name="opa_overshoot_translation">8.0dip</dimen>
<dimen name="opa_return_translation">-1.0dip</dimen>
<dimen name="opa_rest_to_collapse">7.0dip</dimen>

Step 2.3. Open SystemUI\res\values\id.xml, Copy these codes from SystemUIGoogle’s id.xml, add it to the end of the file before “</resources> ” label.

 <item type="id" name="red">false</item>
<item type="id" name="blue">false</item>
<item type="id" name="green">false</item>
<item type="id" name="yellow">false</item>
<item type="id" name="white">false</item>
<item type="id" name="home_button">false</item>
<item type="id" name="halo">false</item>

Step 2.4. Open SystemUI\res\values\styles.xml, Copy the codes from SystemUIGoogle’s styles .xml, add it to the end of the file before “</resources> ” label.

 <style name="DotStyle">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_centerHorizontal">true</item>
<item name="android:layout_centerVertical">true</item>
</style>

Step 2.5. Open SystemUI\res\xml\tuner_prefs.xml,

First, check your tuner_prefs.xml if it have a line contain fragment value: com.android.systemui.tuner.NavBarTuner, if so, this step should be bypass.

Or if your Rom already have a built-in navigation bar setting menu (like CM14, etc.), this Step 2.5 should be bypass.

If not, add this line of code:

<Preference android:title="@string/nav_bar" android:key="nav_bar" android:fragment="com.android.systemui.tuner.NavBarTuner" />

before this line (see below):

<Preference android:title="@string/other" android:key="other" android:fragment="com.android.systemui.tuner.OtherPrefs" />

If you can not find the line above, I mean the line contain “com.android.systemui.tuner.OtherPrefs” , then the step 2.5 should be bypass.

Double check there is no repeated lines in tuner_prefs.xml.

Step 2.6 Alright, we have do all the resources porting job, right now we are going to compile SystemUI.apk for the first time .
CMD window of Apktool, input command:

java -jar apktool.jar b SystemUI -c

Do Not forget to add the parameter -c as we need to keep the original signature, Why? because all the system file must have the same signature or the system will refuse to boot, and we must sign apk file after compilation but we didn’t have the original certification for signing, with -c parameter we can keep the signature unchanged.

The new SystemUI.apk will be present in “\dist” folder, copy the fresh SystemUI.apk to replace the one in \Apktool folder, then rename the “SystemUI” folder to “SystemUI-org” for backup. Then we will decompile the new SystemUI.apk one more time.

Step 3. The compilation will generate the public id for new resources we just added to “\res”, we need those specific ids to rebuild the connection between resources and the Pixel animation controller. We need to find those resources ids.

Step 3.1 Open \SystemUIGoogle\res\value\public.xml file in Sublime Text, Ctrl+F to open search box, find these lines, they are separated in 4 parts. There are:

Dimen

 <public type="dimen" name="halo_inner_radius" id="0x7f1002a1" />
<public type="dimen" name="halo_thickness" id="0x7f1002a2" />
<public type="dimen" name="halo_diameter" id="0x7f1002a3" />
<public type="dimen" name="opa_dot_diam" id="0x7f1002a4" />
<public type="dimen" name="opa_diamond_translation" id="0x7f1002a5" />
<public type="dimen" name="opa_line_y_translation" id="0x7f1002a6" />
<public type="dimen" name="opa_line_x_trans_ry" id="0x7f1002a7" />
<public type="dimen" name="opa_line_x_trans_bg" id="0x7f1002a8" />
<public type="dimen" name="opa_line_x_collapse_bg" id="0x7f1002a9" />
<public type="dimen" name="opa_line_x_collapse_ry" id="0x7f1002aa" />
<public type="dimen" name="opa_overshoot_translation" id="0x7f1002ab" />
<public type="dimen" name="opa_return_translation" id="0x7f1002ac" />
<public type="dimen" name="opa_rest_to_collapse" id="0x7f1002ad" />

ID

 <public type="id" name="red" id="0x7f1200c9" />
<public type="id" name="blue" id="0x7f1200ca" />
<public type="id" name="green" id="0x7f1200cb" />
<public type="id" name="yellow" id="0x7f1200cc" />
<public type="id" name="white" id="0x7f1200cd" />
<public type="id" name="home_button" id="0x7f1200ce" />
<public type="id" name="halo" id="0x7f1200cf" />

Drawable

 <public type="drawable" name="halo" id="0x7f020073" />
<public type="drawable" name="ic_sysbar_opa_blue" id="0x7f02012d" />
<public type="drawable" name="ic_sysbar_opa_green" id="0x7f02012e" />
<public type="drawable" name="ic_sysbar_opa_red" id="0x7f02012f" />
<public type="drawable" name="ic_sysbar_opa_yellow" id="0x7f020130" />

Style

<public type="style" name="DotStyle" id="0x7f13022b" />

Write all the lines down in a txt file “SystemUIGoogle.txt”, then, open the \SystemUI\res\value\public.xml, find the corresponding data, you should get the same number of lines, but they carried different id (the 0x7f****** value) , write all the lines down in another txt file “SystemUI.txt”.

At this point, we have got all the new resources’s ids, it is time to bring up the controller in \smali folder.

Step 3.2 Open \SystemUIGoogle\smali_classes2\com\google\android\systemui\ folder, I know that is a little deep… the smali files control the navigation bar animation display or not is among these files, those file is Pixel exclusive, I think it will not going to open sources. Which one is the key? You should have guessed, it’s the OpaLayout.smali, and all those sub-class files start with OpaLayout.

Select these files and copy them to SystemUI\smali\com\google\android\systemui\ folder, you need to create all the folders, then paste those files. File list:

Constants.smali
OpaLayout$-void_setOnLongClickListener_android_view_View$OnLongClickListener_l_LambdaImpl0.smali
OpaLayout$1.smali
OpaLayout$2.smali
OpaLayout$3.smali
OpaLayout$4.smali
OpaLayout$5.smali
OpaLayout$6.smali
OpaLayout.smali

Step 3.3 Ok, You are close to success. Now open the SystemUI\smali\com\google\android\systemui\OpaLayout.smali file with Sublime Text, Ctrl+Shift+F open search find in files box, use keyword “0x7f”, select “SystemUI\smali\com\google\android\systemui\OpaLayout.smali” file, Search result will be like:

Pixel-OPA-Animation-code-1

Normally you will get 25 matches, double click the match keyword can locate the value, the original value is the id of resources for Pixel, we need to modify them to the new ids for your Rom. Open the txt files you just recorded two groups of ids, put them on the screen side by side, it is easier to operate. Now change all the 25 matches to new value.

For example, the first match, “0x7f1002aa” , we can find “0x7f1002aa” in line

<public type="dimen" name="opa_line_x_collapse_ry" id="0x7f1002aa" />
in SystemUIGoogle.txt,  then in the SystemUI.txt we have “0x7f1002ab” with the same resources “opa_line_x_collapse_ry”,  
<public type="dimen" name="opa_line_x_collapse_ry" id="0x7f1002ab" />
, then we change the first match “0x7f1002aa” to “0x7f1002ab” in sublime (jump to current file by double click the matches), then go back to results check the next one,  and so on to modify all of the matches. If they have the same id then you don’t need to modify it. Ps, the new ids will be different with different Roms, you must compile SystemUI once to get the unique ids for your Rom.

Step 3.4 Change the ids will not enough, we need to break the control rule of the Pixel limitations, this is not easy to find, you have to track the whole process of display animation. But I already do it for you, the switch is located in line 2620:

Update 12/08 for Android 7.1.1 Final Version.

The OpaLayout.smali file has been changed in new version, well we need to adjust something, but just a little bit change, the new switch is located in line 2591:


const-string/jumbo v2, "systemui.google.opa_enabled"
invoke-static {}, Lcom/android/keyguard/KeyguardUpdateMonitor;->getCurrentUser()I
move-result v3
invoke-static {v0, v2, v1, v3}, Landroid/provider/Settings$Secure;->getIntForUser(Landroid/content/ContentResolver;Ljava/lang/String;II)I
move-result v0
if-eqz v0, :cond_0
const/4 v0, 0x1
:goto_0
invoke-virtual {p0, v0}, Lcom/google/android/systemui/OpaLayout;->setOpaEnabled(Z)V

The code is reading the global settings of “systemui.google.opa_enabled“, it will be false in all non-Pixel phones even you active the Google Assistant by modify build.prop, so we have to force it to return true to get the Pixel animation working by adding a line

const/4 v0, 0x1
before
if-eqz v0, :cond_0

Code will be look like this after you add the line:


const-string/jumbo v2, "systemui.google.opa_enabled"
invoke-static {}, Lcom/android/keyguard/KeyguardUpdateMonitor;->getCurrentUser()I
move-result v3
invoke-static {v0, v2, v1, v3}, Landroid/provider/Settings$Secure;->getIntForUser(Landroid/content/ContentResolver;Ljava/lang/String;II)I
move-result v0
const/4 v0, 0x1
if-eqz v0, :cond_0
const/4 v0, 0x1
:goto_0
invoke-virtual {p0, v0}, Lcom/google/android/systemui/OpaLayout;->setOpaEnabled(Z)V

 

Step 3.5 Ok, Our mission is about to finish. Last thing is compile SystemUI.apk again.

java -jar apktool.jar b SystemUI -c

if everything goes well, I mean no error appear while compiling files, congratulations, you have succeed in porting Pixel navigation bar animation, use any root file managers to replace the original SystemUI.apk with the new one. (Backup first) And remember to set the file permissions to rw-r-r.

Taggs: , , , , .
Posted in Android How to, Android Share

SHARE THIS

RELATED POSTS



DISCUSSION

  • Osama

    Just wanted to know, do you think it will work on Android O preview? Thanks and great job btw!

    • Can’t say anything yet as we can not decode Android O files with current tools…

  • Makel Sevilla

    Thank you @charleschow:disqus .
    How to fix the yellow dot?

    • Hi, you are using custom rom right?
      If your home button is not solid, the yellow dot can not hide behind home button, to solve this problem you need a solid home button icon.

  • 1. Don’t modify anything then compile it again, to avoid some configuration error.
    2. Modify one thing one time if you did not know much about coding, to see what things you did wrong.

  • Mike

    Thanks for the animation part of pixel navbar
    But could u help me get those pixel style navbar and that outer ring?

  • Tahir349

    how Fixed Switch Button Edge can you guide?

  • Renan Queiroz

    Ressurection Remix uses smartbar, which is incompatible with this tutorial.

  • Harshit Kumar Rajak

    not working in my MotoG3 (2015) LineageOS 14.1…CAN YOU PLEASE DO IT???

  • Timothy Langer

    Building my forked version of a custom ROM from source, how would I incorporate this into my version? Thanks!

  • Balthazar Loglia

    Spent most of yesterday trying to port to Lineage OS for Moto X Pure/Style with no success. System UI would crash on boot, and only a wipe + reflash would fix it. The only step I feel as if I could have screwed up on is 3.3 (the two example lines were different, “collapse” at first and then “trans”). Was this purposeful or a small mistake in the article? Has anyone ported to Lineage successfully? Please help 🙁

    • Thank you so much for pointing out my mistake.
      Btw, this guide still works for Android 7.1.2 beta.

  • Aman Khan

    Hey bro charles im using Aicp rom and there is no file lile “home.xml” plz tell me what i can do .what if ill create one like this

  • Jüri Pranstibel

    Not Working with AOSPA 7.1.1. No errors while compiling/recompiling. However, when the SystemUI is replaced with the new one and I boot PA, there is no lock screen, no statusbar and no navigation bar so I guess the new systemui crashed and when I switch back to the original systemui apk then reboot, systemui will rapidly force close. Clearing data & PA works as normal. Also it’s weird at step 3.1 all the dimen resource ids are the same across SystemUIGoogleresvaluepublic.xml & SystemUIresvaluepublic.xml. In fact, only the ids for id and drawable differ.

    • ginger_evil

      Contact me via telegram.(@ginger_evil)

    • I’m having the same problem. Did you figure it out?

      • Jüri Pranstibel

        Hey, no I didn’t. Just doesn’t work on some ROMs. However this guide works on most AOSP and CM/lineage based roms.

  • Avinash

    Can U Upload a video tutorial bro. Please 🙂 . Don’t know what to do after step 2.6 .

  • བསྟན་འཛིན་ འཇམ་དབྱངས།

    not work on crdroid android nougat rom opo bacon and rr 5.8.0 bacon.

    • ginger_evil

      On Nitrogen OS, RR and DU not work, because they have unique navbar animations, and this method unsuitable.(

      • བསྟན་འཛིན་ འཇམ་དབྱངས།

        How to get the pixel navbar animation on rr rom? Is there any way to do that?

        • ginger_evil

          Only if you a rom dev, or have contact with them. Read below.

  • ginger_evil

    Thanks a lot @charleschow:disqus . Do it on my Nexus 5 with CM 14.1 CAF.
    Fix yellow dot by replacing images from Pixel(same screen resolution).
    https://drive.google.com/open?id=0B5VIQ1igCMxhYkZHSWlYZWJScEk

  • Sankar A.R

    Its not working in RR 5.8.0… I used the guide properly but i cant make it success… RR 5.8.0 have some button animations already… I think thats the problem… Any hope to port pixel nav style..

    • I think you can ask the rom author, should be a way to do it.

      • Sankar A.R

        ok. In step 3.1 we got unique ids… and the drawable and style ids cant find in opalayout.smali

        • Yes the new id can not be found in original opalayout.smali, that’s why we need to find the old ids, change them to new one.

          • Sankar A.R

            No i told about old SystemUIgoogle. This is the id (0x7f130230) i got from google pixel ui for … i can’t find out these 0x7f130230 id from opalayout. actually in opalayout i see first matching id then second and again first id will come again… i can only find 20 different id other 5 are repeated…. i think u get…

          • I see, not all the ids is used, just change all the ids you found is enough. remember don’t save the opalayout file before you change all ids, as you will be confused which one is changed, sometime the new id also point to different elements in old id lists.
            My way is , you get the find result, double click the first one, it will switch to opalayout file, change that id, then go back to find result, double click the next id, till finish changeing all results, save the opalayout file.

  • subins mani

    Hai Sir when will we get android 7.1.1 SystemUI.apk

    • All has update to 7.1.1, include Pixel’s apk and code.

  • Jeremy Jones

    @Charles

    I’m getting the same thing KING ADDY got when he says, “my home button has a yellow color in the center idk why??”

    Do you know how to get rid of that yellow spot?

    • Hi, yellow dot is normal, if you have the Pixel solid white button it will be cover by home button.
      You can replace the image files which I reply to KING ADDY.

  • Pokemon1234

    In One Plus 3 Oxygen OS there is nothing like home.xml….should i create a new file with name?

    • It might not work with my guide…you can try.

  • Juhkimo

    I don’t have SystemUIsmalicomgoogleandroid folder.

    • Juhkimo

      Never mind, I didn’t saw the line to create the folders.
      Working now and it looks so cool 😛 Thanks alot!

      • KING ADDY

        What phone u r running?

        • Juhkimo

          Lg g3 d855

  • antonieta 22

    There was no error. I did not have “home.xml” so I pasted it from SystemUIGoogle.apk
    Replaced the apk but the animation did not appear, that still seemed equal

    PS: since the ROM is CM13(MotoGtitan) did not find this path “SystemUIsmalicomgoogleandroidsystemui”

    However, I pasted .smali files in this “SystemUIsmalicomandroidsystemui”

    Am I missing something??

    • KING ADDY

      U need to create androidsystemui inside google folder ok

      • antonieta 22

        I did it without animation success. Apk works normally

        • KING ADDY

          How??

        • KING ADDY

          Tell me too i am not able to port …i am running cm 14 titan

    • I think CM13 did not support the animation…as Android 7.0, or need some more coding job..

  • antonieta 22

    Hi
    In CM13 I did not find any “home.xml” so I copied all the file into /res/layout/ but when trying to recompile warning appears “2:error: Error:No resource found that matches the given name (at ‘paddingStart’ with value ‘@dimen/navigation_key_padding’).
    W: C:UsersbjhbhDesktopnavbar animationApktoolSystemUIreslayouthome.xml:2: error: Error: No resource found that matches the given name (at ‘paddingEnd’ with value ‘@dimen/navigation_key_padding’).”

    Am I missing something, like adding some resourses? or libs?

  • Aditya Gupta

    Some Issues,
    Rom:- NitrogenOS
    Device:- Nexud 6p

    Issue:- No idea, followed the exact steps.

    • I have no succeed with nitrogen OS either.

  • KING ADDY

    hey i am getting new problem SystemUIsmalicomgoogleandroidsystemui is not present
    after google there is a folder named protobuf then nano idk what now???

    • This warning is fine.

      • KING ADDY

        When i replaced system ui …phone stopped working and i restarted and there was a bootloop . I am using a moto g 2014 running cm 14 … Is there any other way?

        • With CM14, you should bypass the step 2.5, double check the code before compile, and don’t forget to add -c parameters when doing COMPILE.

          • KING ADDY

            see if my last code is correct

            imgur com / a / R0rd9

          • Congratulations. About the solid white buttons, you might need some image modification skill.
            check the /res/drawable/drawable-xhdpi-v4/ folder. find this files.
            ic_sysbar_back.png
            ic_sysbar_back_carmode.png
            ic_sysbar_back_ime.png
            ic_sysbar_back_ime_carmode.png
            ic_sysbar_docked.png
            ic_sysbar_home.png
            ic_sysbar_home_carmode.png
            ic_sysbar_recent.png

            you need to replace them with Pixel’s, you can find it in Pixel’s /res/drawable/drawable-xxhdpi folder.

            But you can see the images form Pixel, the size is different with yours. So you need to use any photo modification software resize them to your size, or you can find other mod which has already modified the buttons, extract them for yours. then re-compile the apk, don’r forget -c parameter.

          • KING ADDY

            finally my pixel project is complete ..i did a simple trick to resize the images as per my phone ….took my png’s put it in photoshop and overlaped the pixel ones and then deleted old layer . came out perfect sized when i applied .. Thanks mate for your detailed guide GR8 WRK!!!! ;))

            BUT ONE PROBLEM MORE: sometimes old now on tap animations appear so is there any way to remove it????

          • But it only show once after you reboot the phone, so let it be…

          • Jeremy Jones

            Did you ever figure out the yellow in the center? I’m getting the same thing.

          • KING ADDY

            Read charles reply ..thats how i fixed ..you just need to change your nav keys with the pixel one after resizing them to key size and done

          • Jeremy Jones

            I did that, and it’s fine if you have a solid home icon. But I’m designing different icons, and if the icon is not solid in the middle, then you can still see the yellow. Replacing the icons doesn’t fix it, it only covers it up.

          • Jeremy Jones

            Upon further investigation of the animation, it appears as though the dots are always there behind the icon and they just move out when the home button is pressed. They yellow dots appears to be on top of the rest when they’re “resting” which is why the yellow circle is the one we see. It doesn’t seem like this can be “fixed” without a significant change to the OpaLayout.smali code.

          • Yes, that is the default behaviors. To get what you want we need to set those dots transparent until user tap on the home button. It should be able to do with layout.smali, as it can change the status of the dots.

          • Jeremy Jones

            Do you have any idea where in the OpaLayout.smali that mod would be?

          • Hi, please check the post update info. I added the code.

          • Jeremy Jones

            I’m on a Nexus 6P build NMF26F, which I thought was the final version, but I don’t have these lines in my OpaLayout.smali:

            invoke-static {v0, v2, v1, v3}, Landroid/provider/Settings$Secure;->getIntForUser(Landroid/content/ContentResolver;Ljava/lang/String;II)I
            move-result v0
            if-eqz v0, :cond_0
            const/4 v0, 0x1
            :goto_0
            invoke-virtual {p0, v0}, Lcom/google/android/systemui/OpaLayout;->setOpaEnabled(Z)V

            Is this the part of the code that is supposed to make the dots disappear when not in motion?

          • Sorry I forget to update the Pixel’s apk link, delete your previous Pixel’s systemui apks, re-download it from the post, you will see the new code.

          • KING ADDY

            Ya i think it works like that only

  • Abhishek Singh

    Can we include this in substratum theme so that it can be applied to any rom which has OMS support??

    • substratum theme did not official support 7.1 yet, don’t know if it can work.

  • KING ADDY

    there is no smaliclasses folder inside SystemUIgoogle …..where do i get it??

    • Hey, It is smali_classes2 folder.

      • KING ADDY

        yeah that only … but its not in my SystemUIGoogle folder which i decompiled

        • Did you use the SystemUIGoogle.apk which I provided or other sources?

          • KING ADDY

            i did use the one from your link

            and how to bring the controller in smali??

          • I think something is wrong when you decompile the file, did any errors shows? And don’t forget to install the framework before decompile. See the apktool official documents.

          • KING ADDY

            i did not get any errors while decompiling and i did install the framework from my phone before decompiling

          • So that should not happened..
            Give me the cmd screenshot when you decompile the SystemUIGoogle.apk,
            Or you can download the file again to see if you get things mixed.

          • KING ADDY

            ok

          • KING ADDY

            imgur . com / a / QHZHB (remove spaces) see this pic plz

          • Ok, remove the -c parameter when you decompile something, it’s just need when compile something with original signature.

          • KING ADDY

            i did not put -c while decompile
            but i did put -c while recompiling SystemUI which was modified

          • Yeah, I saw the screen shot you post, d is for decompile, you have put the -c parameter in the command.

          • KING ADDY

            While decompiling?

          • KING ADDY

            Huh?

          • Hey, I saw your screenshot, http://imgur.com/a/QHZHB, you just use “-s” or “-c” parameter while decompiling apk(can’t see it clearly but I suppose is -s ), them apktool will not decode the dex file, so you did not find the smali folder…

            just decompile the apk without any parameter you will be fine.

            Apktool documents: https://ibotpeaches.github.io/Apktool/documentation/

          • KING ADDY

            I am getting confused ..can you please tell me the proper command so i get that folder?

  • subins mani

    Not able to port to Moto g 2015 official CM 14.1
    After replace SystemUI Stop working,,,,
    Dnt know what i do wrong anything….

    • Also, in step 3.4, the line you add was in wrong place. I have update the post, check it and you will see. we don’t modify the original code, just add a line.

      • subins mani

        Hai sir,,, Will u please give guide to ennable Google assistent tooo,, without editing buildprop,,, 🙂

  • Mandar Joshi

    hi thanks for the detailed guide. Im getting this (http://pastebin.com/JXCfahcC) error while recompiling apk (step 2.6)

    • Something is wrong with styles.xml, maybe incorrect label?

      • Mandar Joshi

        solved that I forget to install framework-res -,-‘ Im little bit noob with this stuff.
        I tried to add animation to the NitrogenOS but it didn’t worked(maybe because of Pulse?) will try with some other CM14 rom

        • NitrogenOS is a little special, I also failed with it.

      • Mandar Joshi

        and also as you said in step3.1 i got all the 26 ids from the OG file but while doing replacement of the ids the match for 0x7 were 25 only so the last (style id) is useless right?

        • Yes, not all the IDs was being used.