I wanted to show the Gmail app in my partial SlidingPaneLayout article. However, I do not want to show my actual emails. Normally I would just blur out the sensitive data, but I want to show the cross-fade animation in a video, so that doesn't really work.
The easy way to get around this is to create a throw-away email account and show the fake data, but I came up with something more fun: replace the system font to show squiggly lines instead of words! I will be using Redacted, a beautiful squiggly font. I don't want to muck with my actual device, so I went with modifying an emulator.
yaff2 vs ext4
At first I followed this tutorial: How to pack and unpack system.img and userdata.img from an Android factory image.
The first step should be a giveaway that it may not work:
git clone https://android.googlesource.com/platform/system/extras cd extras git checkout android-4.1.1_r1
The tools described in the tutorial has been removed in the recent releases, so you have to check out an older tag.
In any case, I proceeded to mount system.img
, replace Roboto-Regular.ttf
with redacted-script-regular.ttf
, and repackage the image with make_ext4fs
. To compile make_ext4fs
I needed to checkout platforms/system/core as well, and add its includes:
gcc -o make_ext4fs -I../../core/include -DANDROID \ make_ext4fs_main.c make_ext4fs.c ext4fixup.c \ ext4_utils.c allocate.c backed_block.c output_file.c \ contents.c extent.c indirect.c uuid.c sha1.c \ sparse_crc32.c wipe.c -lz
Next I created a new AVD, and copied the modified system.img
into its folder. Alas, it did not work.
ko:Invalid cache partition image type: ext4 (expected yaffs2)
Turns out the Android 5.0 filesystem its in ext4
, but the tutorial produces a yaff2
image.
Mount and sync
This tutorial has steps to make an ext4 image: How to create EXT4 images
But instead of creating a new image, I modified a copy of system.img
like this:
cp ${ANDROID_HOME}/system-images/android-21/google_apis/\ armeabi-v7a/system.img . mkdir my_system sudo mount -t ext4 -o loop system.img my_system cp redacted-script-regular.ttf my_system/fonts/Roboto-Regular.ttf sync
I copied the modified system.img
into the AVD folder and booted. Yes, squiggly!
Squiggly
However I had two problems:
- How do I add a Gmail account in squiggly?
- Some strings were in squiggly but others were still in English
To solve the first problem, I moved the modified system.img
out of the AVD folder and rebooted the emulator to configure Gmail in English. This works because the changes are stored in user data, which will not be overridden when I swap back in the modified system.img
.
To solve the second problem, I overwrote more fonts.
Roboto-BlackItalic.ttf Roboto-Black.ttf Roboto-BoldItalic.ttf Roboto-Bold.ttf Roboto-Italic.ttf Roboto-LightItalic.ttf Roboto-Light.ttf Roboto-MediumItalic.ttf Roboto-Medium.ttf Roboto-Regular.ttf Roboto-ThinItalic.ttf Roboto-Thin.ttf
Everything with Black
or Bold
got redacted-script-bold.ttf
.
Everything with Light
or Thin
got redacted-script-light.ttf
.
The rest got redacted-script-regular.ttf
.
Ubuntu
In case you are wondering, I did everything on my ubuntu machine. To record the video, I used SimpleScreenRecord. I chose "Select window..." to pick the emulator window, and adjusted top and height to crop out the window title. The height is the height of my emulated device, and I add the delta from height to top to compensate.
With all that, I have Gmail in squiggly, recorded to share!
Inline coding questions will not be answsered. Instead, ask on StackOverflow and put the link in the comment.
Wow! This cane be a really good Genymotion feature.
ReplyDelete