# Coding

Work in progress
Sunday, November 17, 2019

Gnarg! I had android.clients.google.com hardcoded in my 🖿 /etc/hosts file the whole time! No idea why. Best case scenario: it didn’t matter at all. Worst case scenario: it raised alerts on my test accounts and/or IP address. Stupid problem: no way of finding out which.

This calls half of last weeks work into question.

In other news: I got an email about a CAPTCHA affected Raccoon instance recovering automatically. Appears as if you can sit this out. Not that you’d want to or that this is practible a solution.

Sunday, November 10, 2019

Time for a progress report:

  • As mentioned in my last post, I lost considerable time due to a parser bug. This put me behind schedule.
  • I have the framework of the new setup wizard largely ready. The CAPTCHA support makes it an obnoxious beast with a rather complicated state transition diagram. Once it is fully functional, there will be some major work integrating it into Raccoon (I’m developing it seperately from Raccoon since firing up the database for every testrun and clicking through the menu for each test run would take too much time).
  • Getting the CAPTCHA image and sending it back works. But I still seem to be missing a piece as I only get another CAPTCHA request.
  • I absolutely hate CAPTCHAs!!! Especially the ones Google throws at you where “i”, “r”, “n”, “m” and “l” blend so perfectly into each other that you can’t really tell them apart. I have to solve each CAPTCHA at least twice to be reasonably sure that I’m not getting a new CAPTCHA bescause I mistyped. That’s costing a tremendous amount of time.
Thursday, November 7, 2019

Update on the Captcha problem: It looks like this is not actually a captcha issue at all. Just the error code for it. The image you are suppose to solve contains a message instead.

Sorry, we are unable to handle your request at this time. Please try again later.
Seems like we are dealing with a protocol change (again).

Tuesday, November 5, 2019

Progress report: adding CAPTCHA support to the setup wizard

Some of you might have found yourself being asked to solve a captcha when adding a new profile, with Raccoon providing no means to show the image nor accepting an answer.

Friday, October 25, 2019

Ok, just wanted to add a nice feature for the custom ROM community: automatically build an 🖿 update.zip from tagged apps in a Raccoon repository. It looked easy, but of course:

  • the documentation of the file format is, as always, shit.
  • remounting the 🖿 /system partition in read/write mode seems to be device dependent.
  • it probably won’t work with split APK files, anyway.

Thanks again, Google…

Monday, October 14, 2019

Is it possible to merge split APK apps?

I get it, you guys hate split APKs as much as I do. So why doesn't Raccoon simply merge them into a traditional APK? Is that even possible?

Tuesday, October 8, 2019

Now, that was a waste of time! Tried to rewrite Raccoon’s protocol buffer definitions from proto2 to proto3. Turns out that in their infinite wisdom, Google retired the optional and required keywords. As a result, hazzer functions are no longer supported. In other words, it is impossible to tell the difference between a field that has not been set and a field that has been set to its default value. Needless to say that the DFE API (“Google Play”) makes heavy use messages with unset fields.

Why Google? Why?!

Wednesday, July 10, 2019

How to implement a single class Java parser for semantic versioning with correct precedence ordering

I have this love/hate relationship with semantic versioning. It’s great for libraries, but not so great for apps as it tends to confuse users. The really annoying thing, though, is the rattail of pre release and meta tags that may be appended and the insanely complex rules that must be followed when you do.

Monday, December 28, 2015

How to get the Google Play User Agent for a given device

The Finsky useragent (not the same as the Chrome useragent) is used to determine app/device compatibility.

Tuesday, May 5, 2015

What exactly is a GSF ID? Where do I get it from and why should I care?

Let's dive deep into the Android OS and talk a bit about how app compatibility is determined and how big G keeps track of your device.