Profile cover photo
Profile photo
Communities and Collections

Post is pinned.Post has attachment
Add a comment...

Post has attachment

Post has attachment
500 Firepaper v3.00 - 500px to /r/EarthPorn

As you have probably already heard, 500px is shutting down their API mid-June. 500 Firepaper was built around the 500px API, and this would thus spell the end for the app.

I had warned I would probably not have time to update 500 Firepaper before the API shutdown, but I found some spare hours and did it anyway. It is something I run on my daily driver phone so it had a little bit of priority :)

Instead of using images from 500px, the app now uses images posted to Reddit's /r/EarthPorn sub. It's the best I could do with my limited time. While undoubtedly some users used different image categories, the 500 Firepaper default with 500px was Natures and Landscapes, and I think most users just continued using that default, so this should be somewhat similar. (The category selection option itself is now removed)

During the development and life of this app my positive opinion of 500px has generally turned to a negative one, but one thing they did have was a community of talented photographers producing high quality imagery. While I do not mean to say anything negative about /r/EarthPorn, it is not a portfolio site, so the images are noticeably different in quality.

Everything seems to work for me, but I only did a quick walkthrough of the app's functionalities, so it's not inconceivable you will run into issues. At least this should provide a little bit of continuity for 500 Firepaper users, rather than the app instantly self-destructing come June 15th.

Note: I built this release with Eclipse, take that DroidCon UK '17 keynote speakers.
Add a comment...

EOL-ing all my root-related things

In practice this has already been the case for some time, but today I'm making it official: all my root-related things are now end-of-life.

About half a year ago I decided I needed a break from everything Android, and reflect on how I wanted to proceed with it, if at all. Right now, it does not seem likely I will pick up development of any of my root-related packages or apps again.

For some of these I had big plans, and while it leaves me somewhat sad to not implement them, I am also unwilling to commit the time and energy right now to make those plans a reality - or even keep the packages updated. You can't have it both ways, so it's all getting shelved, probably indefinitely.

I'm going to start doing some spring cleaning on my apps, sites and threads over the next few weeks. Some will disappear, others will start with having a notice about them no longer being updated (yes I know for some of them it's about time too!) for now.

There are some non-root apps that I do plan to update again, but some will be shelved as well.

I am currently working on a (non-Android-related) project that is taking up most of my time, so those that I do want to update will have to wait a bit longer still.

In case you have missed the news, 500 Firepaper will also stop functioning on June 15, as 500px is shutting down their API. It is unlikely I will have the time to implement a different image serving back-end to the app before that happens.

There have been a bunch of requests to open source specific apps, and indeed it is (and has been for a while) on my todo-list to look into just that - I'm not promising anything, though.

Again I would like to thank everyone who has supported me and my developments over the years! I've met great people and made good friends, some of which I'm now actively working with on other projects, even.

But at the moment I'm not using root on my main Android devices for anything other than development, which turns it into a circular reference for me. As for regular Android, I have not been particularly enamoured with the direction it has been going in either.

But just because I'm not enthusiastic about working on these things now doesn't mean a new idea or project can't come along to change that at any time.
Add a comment...

Post has shared content
Some more pictures (panoramas were posted earlier) of my trip to Patagonia and Easter Island in 2015.
Add a comment...

Post has attachment
Retirement from SuperSU

A little over two years ago I announced SuperSU's impending transfer to CCMT and my eventual leaving the project. Now, at the 10 year anniversary of my first mobile app release (see for a recap of those 10 years), just after SuperSU both turned 5-and-a-half and hit 100 million users on Google Play, the time has come for me to officially announce that retirement.

Formally my contract with CCMT runs until February 24, but from now on I will serve in an advisory capacity only, a few hours here and there. I might still wrap-up the release of a couple of features I have been working on and are close to finished, but I'm not making any promises.

Though it has spanned multiple platforms, I've done a lot of the same type of work these past 10 years, probably too much. Letting go of this will free up the time (and mental resources) to allow me to pursue some other interests again; learn some new skills, gain some new knowledge, find some new projects that excite again.

Future of SuperSU

CCMT will continue SuperSU's development, and I am confident that will turn out just fine; the people I have worked with over there have all had their hearts in the right place. I feel the two year transitional period (including full code review by yours truly) we have provided has been ample for the naysayers to find other solutions.

What's next?

This does not immediately affect any of my other apps, though as several are root-related in time it obviously might.

While I do intend to shift my focus, this does not necessarily mean I will be leaving mobile app development. Who knows what projects will come my way, I have no shortage of app, feature and service ideas (some good and some undoubtedly bad), and there's always the quest for knowledge and experience. Just like was mostly a useful excuse for me to play around with Python, both Kotlin and Swift have been on my play-time wishlist for some time, and both are known to be used for app development.

Unfortunately I've had to pass up on a number of interesting projects over the past two years. Now my contract with CCMT is ending, this again allows me to take up other contract work, join new ventures, or even take a job somewhere. If you have a project I might find interesting on a technical level (does not have to be mobile related) or has a positive impact on the world (or smaller areas) don't hesitate to get in touch ( ).


Thanks again to everyone who has supported me (and SuperSU) over the years, it has meant a lot to me.
Add a comment...

10 year anniversary

Hard to believe it has been that long, but today marks the 10 year anniversary of my very first app release: KaiserTweak. An app that let you tweak 50-ish Windows Mobile settings, written specifically for the HTC TyTN II (aka HTC Kaiser) and later ported to a few other popular devices. I had released other tweaks before, but this was the first release that ran as an actual app. If I recall correctly it was written in C# with the .NET Compact Framework 2.0 - an endless source of headaches.

Time for a trip through memory lane, a chance to reminisce... this is going to be a long story.

Windows Mobile

I came from database information systems and web development background (oh the excitement!) originally, though I spent my spare time creating game-related tools such as Project Entropia Assistant (a sort of Steam Overlay before those existed) and [AAE]PBSS (an cheater-catching/monitoring tool for FPS server admins). Around KaiserTweak's time, smartphones were new and exciting, I was quickly hooked, and soon decided to switch all of my spare attention there.

It wasn't long before the first version of WMWifiRouter was released, which (quite unexpectedly) became a massive success, won several prizes, and ultimately became one of the best selling apps on the entire Windows Mobile platform. While this is something nearly every phone can do today, back then it was the very first utility to turn a mobile phone into a Wi-Fi hotspot and share the cellular data connection that way.

There were dozens of other Windows Mobile apps and tweaks. Patched 3D drivers (with NuShrike) to expose HTC's alternative facts about the Kaiser, FPU hacks (again with NuShrike), data connection management tools, battery saving utilities, ROM porting and customization utilities, cleanup utilities, various graphics-related utilities, and even a device unlock tool. The latter was banned from the Marketplace, but only after it became clear that it (hilariously) was not actually against Microsoft's policies and those policies would need to be adjusted.

While some of those were commercial in nature and helped pay the bills, a lot of them were free, and certainly the most fun to develop were the hacks and patches. Windows Mobile didn't come with sources, so many days were spent in IDA Pro trying to figure out what code did what exactly, and coming up with how to manipulate that code. Since we couldn't recompile things (and I was generally against modifying system files) most of these tools employed in-memory patching of specific processes and sometimes system-wide call rerouting. A similar technique was also used to (with mere hours of work) create a proof-of-concept Marketplace copy protection bypass. I had previously warned their design was flawed, but... :)

Those days the apps that were commercial were managed by a company me and a friend had set up. We had some employees and also did various contract work in desktop, mobile, and web development. I closed that shop shortly after I personally switched to Android, but we certainly had some great times there.


While I imported the HTC Dream (the first Android phone) as soon as it was released and played around with it a lot, I didn't fully move over personally until Microsoft announced they were killing off Windows Mobile and re-doing Windows Phone from scratch with nigh zero portability of existing code. Nobody really understood why Microsoft believed existing Windows Mobile developers (whose incomes had now vaporized) would follow them for another round of punishment rather than jump ship to iPhone or Android, both of which were now well established platforms. And surprise surprise, pretty much nobody did.

In those days XDA was a Windows Mobile only site and I (and several others) lobbied relentlessly for them to start adding Android forums. We were repeatedly told Android wasn't going anywhere, we should go away and start our own forums instead, and continued commentary would be earning us bans. Luckily eventually they came around, imagine what XDA would look like today if there were no Android forums :)

A lot of my early time in Android was spent porting CWM to various Samsung devices/firmwares, with built-in Superuser (together called CF-Root), and releasing root-using tools. Chainfire3D for example manipulated graphics drivers, provided the first evening/nightmode (CF.lumen) implementation available for stock+rooted Android, and through plugins allowed games built exclusively for one model of GPU to be played on other phones. This earned me interest from (and some trips to HQs of) some big corps in the tech world. Didn't take any offers, though.

There were apps like live logcat and live dmesg (both reincarnated as LiveBoot for 4.3+), Triangle Away, Mobile ODIN (reincarnated as FlashFire for 4.2+), StickMount, Recently, and quite a few that never really made it beyond the 2.x days; Android was a very different beast in those days from what it is today. The look and feel, device capabilities, APIs, it's almost a different platform altogether.

DSLR Controller came along, which was the first app for any mobile phone that could remote control a DSLR. This one also became much more popular than I expected, and is still one of my personal favorites. Over the years I've done a lot of contract work alongside my public releases, but some of the most interesting ones were based around custom builds of this app. One example is a cell-growth monitoring system for medical use; another is the camera-controlling software for the SVII, which was used to capture the breathtaking imagery used in Google's Underwater Street View.

Somewhere along the line I wrote SuperSU as a work-around for some of the issues I kept running into with the existing Superuser. I could never have predicted just how big that would get. Just this past month Google reported it passed 100 million unique users! While several other apps I've made have had more than a million unique users over their lifetimes, this is something else entirely - I can still hardly believe that number.

Another one of my personal favorites is 500 Firepaper. Some features it debuted were quickly copied in other wallpaper apps, validating them as good ideas. Too bad that over the years it lost the support of 500px, and as a result I've had to dramatically reduce it's bandwidth usage and thus the amount of imagery it displays, but at least it's still around and prettying up my homescreen!

This should cover the bigger and better known apps, but there are still a bunch more. There's even a couple of apps I wrote but never got around to releasing...


There was a short excursion into mobile VR as well. Development never went beyond prototypes, but when they worked right the image quality was amazing, and buttery smooth. We also had some interesting display manipulation code that let you run any app in the headset; lots of hours spent with GTA :) This never went anywhere (or hasn't yet?), but it was a fun project to work on, and it gave me the chance to visit several of the Silicon Valley giants' HQs.


It's hard to recap 10 years in a single post. There has been so much code. There have been so many apps, tweaks, and hacks. I've had the opportunity to go to a lot of great conferences and meet a lot of even greater people. I've had the luck to be able to work on fun and interesting projects with skilled people and great companies from all over the world. I've had the amazing good fortune of a large group of followers who have always supported me and the things I made. And of course I've also had some amazing luck in timing the right apps at the right time.

This has certainly been a good decade!

PS. While writing this I did Google a few things, and I was surprised to find that some of the older things are pretty much gone. Almost like they never existed, though I know they did. I guess not everything lives forever on the internet after all!
Add a comment...

SuperSU v2.82-SR5 and suhide v1.09 released

Two very minor bugfix releases.

A new TWRP was released for the Google Pixel series, now with proper Oreo support. Unfortunately, flashing both TWRP and SuperSU broke TWRP (booting TWRP and flashing SuperSU was fine). This has been corrected with this update.

Aside from that, Oreo devices using file-based encryption refuse to boot with an unencrypted data partition. This update adds a work-around for this. The Pixel is the only device I currently have with this requirement (though it will become the new normal in time), so I've only properly tested it on that. This will allow you to flash back unencrypted backups to previously encrypted devices on stock+rooted firmwares.

The update to suhide hides a few more left-overs than before, including those created by the above feature to bypass the FBE encryption requirement.

The downloads at have already been updated with the new versions.


SuperSU v2.82-SR5 flashable ZIP:

suhide v1.09 flashable ZIP:


- suinit: Fix (flashed) TWRP 3.1.1 compatibility on Pixel (XL)
- FBE: allow FBE devices to boot unencrypted (unless KEEPFORCEENCRYPT is set)

- Remove ODM and OEM mounts
- Setpropex: set multiple properties
- Cleanup: remove /boot

Add a comment...

FlashFire v0.73 released

This week's update to FlashFire brings a few bugfixes as well as feature improvements. The highlights:

Magisk support
Support for Magisk has been significantly improved with this release, especially for flashing incremental OTAs. This should now work mostly the same as when SuperSU is used: pretty much fire and forget.

Limitation: this requires Magisk v14 and its installation being done through TWRP or the Magisk app - it doesn't work with pre-patched boot images.

For now EverRoot still injects SuperSU to keep root though, so if you want to stick with Magisk you need to disable the EverRoot feature and add a ZIP flash action with Magisk's installer ZIP.

Backup excludes
You can add two text files in FlashFire's folder on the sdcard that list files and folders you do not want to include in backups. Examples are dalvik-cache, Chrome's browser cache, your tv shows and music collection, etc.

Users have requested a solution like adding a .nobackup file to folders they want to skip, but that wouldn't work for files in /data, and scanning the entire internal storage to collect those files can be an expensive operation. So I opted for this solution instead.

Read more here:

ZIP association
FlashFire can now be used to open ZIP files directly from some file managers and Chrome's download listing. An opened ZIP will appear as a ZIP action card in FlashFire's UI. As a lot of apps tend to open ZIPs themselves (such as Android's standard Downloads app) rather than find which apps can open it for them, so FlashFire has also become a recipient for Android's Share feature that you can use instead.

FlashFire will attempt to resolve the real location of the ZIP file to where it is stored in /data (including internal storage). If this does not succeed, FlashFire cannot use the file. This also means that ZIPs stored on real sdcards cannot be used this way.

File-based encryption
Some more issues with devices that use file-based encryption (such as the Pixel) have been found and corrected. These primarily related to restores and wipes.


Google Play:

Direct Download:

Discussion thread on XDA:

- A/B OTA: Support for yet another streaming variant
- Magisk support: Fix some black screen issues
- Magisk support: Much improved OTA flashing compatibility (excluding A/B devices)
- SuperSU: Updated embedded SuperSU version to v2.82-SR4
- Backup: Exclude paths from backup with /sdcard/FlashFire/userdata_excludes and ./internal_storage_excludes
- Restore: Fix issue where FBE keys sometimes weren't restored
- Wipe: Add option to not wipe files from internal storage that aren't backed up
- ZIP: Open ZIPs from file managers and (Chrome) downloads directly, or share to FlashFire (file must resolvable to reside on /data)
- Adjusted timebomb for non-Pro users to 2018-04-01
Add a comment...

Post has attachment

Stock boot and recovery images
For years I've thought it would be useful to have a place where you can grab stock boot and recovery images. Planned to build it long ago, but you know how plans go. This site now hosts my entire stock boot/recovery collection (some 250-ish GiB right now), so that's at least a start.

This (and auto-updating root images, auto-grabbing latest OTAs, etc) was supposed to become a feature in FlashFire, but with Google's recent ban on Play store apps downloading binaries (which I expect would cover this) I'm not really sure what's going to happen there. Perhaps a sideloaded add-on, perhaps nothing.

Of course, my own collection is mostly comprised of Samsung and Google firmwares, and the scrapers are currently focused on those. If someone knows reliable sources of stock firmwares for other brands, let me know in the XDA thread.

Users can add stock boot and recovery images manually, after logging in with a Google account. As this is a possible avenue for abuse, I'm keeping a close eye on it, and should it be abused I'm shutting it down.

Image information
Aside from the images itself, the site also keeps track of quite a few properties of the firmware themselves, including the properties from the images, so developers can review them without having to download them all.

Useless to most, but to devs like me it comes in handy now and again.

The CF-Auto-Root repository ( ) is very old and very static. It was manually updated (though of course based on scripts) every once in a while.

I've wanted to further automate it for years, and I finally got around to it earlier this year. This is now incorporated into this site, and you can generate a CF-Auto-Root package from most firmwares listed.

When generating a CF-Auto-Root packages, you are now also able to configure all sorts of SuperSU-related options in the process, such as install type, encryption options, SELinux modifications, and including suhide.

Other packages
CF-Auto-Root is really just an automated ZIP installer, that currently installs SuperSU. In theory it can be adapted to install other packages as well. This might become a thing in the future, but it is not implemented right now.

I thought this was as good an excuse as any to finally do something in Python and gain some more experience there, and thus most of the site is indeed built in Python3 (thank or blame Jeff Corcoran). It's not a particularly fast site though...

There is some Java intermingled with the Python. The firmware parsing is code is an adapted version of the code written for FlashFire.

The Python parts are built from scratch and job-based, I'm fully expecting some things to break down a couple of times over the next few days, so keep that in mind.

Completely unsure. Maybe it'll grow. Maybe an OEM will have it shut down. Maybe I'll get tired of paying for the bandwidth. Right now this is striking through one of the items on my bucketlist of code.

Mobile version and app
There is currently no mobile version and app for the site. As stated above, that was originally intended to be part of FlashFire. It makes for a somewhat awkward landing page right now if you don't include the desktop subdomain, but the .mobi TLD has rules :)


Discussion thread on XDA:
Add a comment...
Wait while more posts are being loaded