Somehow today my wifes’ phone had managed to upgrade to a new version of WhatsApp. When she opened it it just said that the applicaiton had crashed. This also started happening recently with ‘Google Play Services’ and some other apps on her phone.
(As an aside, this is why I turn off auto-update where at all possible because you never know when something will break)
However after much research and debugging I learnt that the problem is not so much with WhatsApp itself as with the Cyanogenmod (custom ROM) that we use on our phones and will happen increasingly. Fortunately there is a relatively easy way to fix this – skip to the bottom of this article if you want to just fix the issue.
The technical root cause is documented on the google issue tracker and is caused by a change in the way apps are being built when they are upgraded to using the gradle 3 build-chain. It seems to be fixed in the latest versions of google build-tools so hopefully in the next 6 months this problem will go away but for the moment it will only increase as teams upgrade their android build chains. Basically in my quick scanning of the bug ticket the problem is that the implementation of some low-level part of reading an apk package on cyanogenmod and many other derived custom ROMs is slightly faulty. That code-path is not normally used but the new appt2 build-process creates some outputs that trigger the condition in libandroidfw which then cause the apps to not load.
This means that we just need to patch the library and it fixes the problem:
Download fix for cyanogenmod 12.1.
Download fix for cyanogenmod 13 (untested)
To install this fix you can put it onto your SD card and install via TWRP or whichever bootloader you use. Alternatively you can do it by hand if you have rooted your phone by connecting to your phone’s shell with adb shell
and setting up the following:,
# Set the system partition read-write mount -o remount,rw /system # Create backup copy of the old library in case anything goes wrong cp /system/lib/libandroidfw.so /system/lib/libandroidfw.so.bkup
Then run the following from your computer to update (after having extracted the zip file):
adb push system/lib/libandroidfw.so /system/lib/libandroidfw.so
Then reboot your phone and it should all work again.