'Coon Cave

A blog about software development, Google Play and Android in general. May contain traces of rambling. Feedback and subscriptions welcome!
Friday, November 6, 2020

In the light of recent events, I’d like to note that Raccoon is 100% vegan software.

A reader asks:

Can Google delete apps from my Android smartphone?

Eh, yes, of course! There’s a push message and a mechanism for that implemented in the Playstore app. In case you find that surprising: how did you think Play would handle a cancelled payment for paid content? Return the money and let you keep the item?

In case the question was if you could buy an app, use Raccoon to download the APK to your PC, then refund, the answer is: yes you can do that (shame on you), most paid apps safeguard against this by performing an online license check.

I’m currently looking at period tracker apps - don’t ask why (it’s an apk downloader thing).

Brilliant business model:

  • Once hooked, users slowly lock themselves in.
  • Automatically tuned to the perfect target audience (young adults;female;medical problem)
  • Users voluntarily disclose the perfect time to pitch them products and services.

Dear women: if you want/need/have to track this kind of thing, make sure to choose an app that a) doesn’t require an internet connection and b) allows you to export your collected data.

Wednesday, November 4, 2020

Getting more emails from Indians these days wanting to sell me 5 star app reviews on Google Play. Curiously they are all using Gmail addresses for contacting me.

If you are offering to cheat the system (in particular one that’s known for scanning your communication), shouldn’t you use a communication channel that’s outside of the system?


Tuesday, November 3, 2020

Got two support requests today concerning Google Play and app / device compatibility checking. Updated the docs for dummydroid as a result:

Thursday, October 29, 2020

…The Black Goat of the Woods with a Thousand Young lurks in gloomy darkness, on the edge of a dream, silently waiting for the hands to advance to the appointed hour. When the stars are right, the dreamer becomes the prey and in the fullness of time, the Thousand Young will scream!

(Do you also hate your alarm clock going off as much as I do?)

Wednesday, October 28, 2020

A test account just produced a HTTP 404 - Unauthorized while requesting an apk download from Google Play. Turns out, its session cookie had expired. The session in question was created May 30 01:15 (I need to stop pulling these all- nighters) and lasted till today(ish - pretty sure, it was in use yesterday). So, the session TTL for Google accounts seems to be around 150 days.

Not sure if there’s a renewal mechanism, other than running through the login process again (highly doubt it, though). Android users typically won’t notice when their session expires. The system’s account manager just automatically logs in again.

Friday, October 23, 2020

You know that things are getting serious when supermarkets run out of toilet paper.

You know that things are serious when when hardware stores run out of woodchip wallpaper.

Wednesday, October 21, 2020

Protocol buffers, Google’s own data exchange format, love em or hate em. They don’t work particularly well on Android because the proto compiler spits out enormous blobs of Java code. Even empty messages will already result in around 15Kb of source and declare more than four dozen methods. Raccoon needs to implement 75 message types in order to talk to the Playstore. That comes down to a bit more than 3 Mb of uncompressed bytecode, scattered across 310 class files with more than 70k methods.

When they came up with Dalvik and the DEX format, they pulled a Bill gates: 65k methods should be enough for everyone. Surprise! Who’d ever think that there would be apps including giant blobs of generated parser code.

So, I don’t want to build a multi DEX APK. Luckily, there’s a protobuf-javalite runtime, promising a smaller footprint (it’s actually what the Playstore APK uses as well). Surprise! I still exceed the 65k limit, plus the normal and the lite runtime don’t seem to be API compatible, so I can’t make a raccoon library that works out of the box on PC and Android. Thanks Google! You really put an effort into making Android a compatibility hell on every level!

Friday, October 16, 2020

Gradle is annoying me. I got an artefact that depends on another artefact which I got in three different variants (there might be more in the future):

  • coon-proto-full (2.4 Mb)
  • coon-proto-slim (555 kb)
  • coon-proto-nano (550 kb; lite runtime)

These artifacts provide protocol buffer parsers required for communicating with Google Play. Exactly one of them is required. Slim and Nano implement fewer message types (Full exceeds some resource limits on Android), but otherwise all three have the same API. The idea is that they are drop in replacements for each other. Pick and choose, the rest of the library is agnostic.

With Maven, there are optional dependencies, Gradle has this very elaborate “feature variant” concept. Really, by now, I’d be happy to simply omit those artifacts from the dependency graph, but then Gradle can’t build the APK downloader library itself.