Friday, July 24, 2020

Google's silent treatment to Android app developers

Are you an android app developer, have you published an app on the Play store?
If so, continue reading, otherwise don't waste your time.

As you know, Google is a clusterfuck of a company when it comes to taking care of it's Android app developers and no I won't spare any harsh words, this is an honest post, if your stomach aches, again, don't waste your time.

So... you paid $25 one-time fee and you're an Android developer, hurray for you, now you can praise Google for delivering a safe ecosystem where every person with a laptop and $25 on their card can become a developer and contribute to this system.

Why's this wrong?
  1. One time fee of $25 won't bring stable ecosystem, instead you'll deal with Google's bots and their auto-replies that are annoying to every person who appealed.
  2. There's a clutter of applications on the store, take for example QR readers, shit ton of applications exist for that purpose and it drives no innovation at all, hence repetitive content where Google's policy should erase 99% of those apps, but does it? Of course no.
  3. Quantity > Quality, of course you have tons of applications on the store, most of them copied the code from Github/Gitlab or other git public alternative, changed the icon, some text, colors and boom, THEY'RE NOW aNdrOiD DeVeLoPerS.
  4. With $25 one time fee, Google can't hire(?) actual humans to review the apps and have them work on the problems with dev's account/apps/questions/concerns etc...
  5. There's no call support, since they have no actual human beings.
  6. You as a developer is fucked!
Now we come to the part where Google bans applications for no apparent reason.
Should I be scared that my app can get suspended and my account terminated?
Hell yea you should.

One day they created an AI bot to scan the play store, someone fucked up and if clause or the AI decided that it should make an action and your app was flagged, removed and maybe your account suspended, WELCOME TO THE BIGGEST TESTING IN PRODUCTION OF ALL TIME.

But my income is based on those applications, our company depends on this application, X and Y depend on this application.

Yes, GOOGLE doesn't give a single fuck about you, unless!!!!!
Unless you're a big company that brings them more of those sweet $$$$$$$
then of course they'll take care of you, make the support reply in one hour and reinstate the application/account without the need of an appeal.

Am I given a time window to fix an issue?
Sorry sir we here at Google do not speak this language.

Me: Can I make an appeal?
Google: yes
Me: [makes an appeal]
Google's bot: brrrrrrrrrrr automatic reply

Quoting from the Reddit's post

This post got quite popular, so there are chances that someone in Google might read it. What we're asking to Google is to stop this unfair practices by:

  • Being more transparent about the suspensions processes;

  • To stop this life-banning madness;

  • To stop banning associated accounts. This is just crazy and often lead to very unfair situations;

  • To let us communicate with real people, and not stupid bots. I'm sure most of us here are willing to pay a fee for this service.

Your account got banned?
Google: GOOD, that also means there's no alternative for you and you're screwed up till you die or make an account on someone else's behalf and we'll ban that too.

Is there a way out of this mess? Yes and no.
Yes: Go develop apps for iOS.
No: Cry for help.

What happened to me you might guess so I had to write this post?

I was striked with 3 consecutive DMCA claims that literally suspended my apps immediately and after a day my account as well.

And as you can see their bot replies with account removal automatic reply instead of a DMCA claim.

What did I do?
I reached out to the people that filed the claim, worked out on a solution, e-mailed Google the solution that we agreed on (forwarded the whole e-mail).

What does Google do in this situation?

Waiting 2 months already, my income isn't coming from the ADS and in-app purchases, I had no time to appeal the DMCA claims because at Google there's no such thing as time, they live under the proudly proclaimed "WE MADE AN IMMEDIATE ACTION AND TOOK OUT THE BAD GUY, YOU'RE SAFE NOW.", boom 1 day after the DMCA claims, because they're 3 at once, your account is down, PERMANENTLY.

But I worked out a solution with the complainant and we worked things out for all the 3 claims.

And the best things of all is, you can't even get your account reinstated even if you comply with all the rules/policies and try to fix them or already found a solution.... cause you're banned permanently.

And that's all of it folks, Google's treating us Android developers like shit, of course some developers are to blame, in my situation I made a mistake I had to work out a solution with the DMCA complainant (and they haven't reached out to me first, they went to Google directly, because papa Google will take care of that), but I wasn't given enough time to even blink, as soon as I reached out for a solution with the complainants the next thing you know my account was banned.

Thanks Google for scaring us, thanks for not-caring about us, thanks for the chances we haven't had.

This doesn't apply to me only, it applies to every other Android developer who has been harmed by Google's monopoly.

Here we go boys, let the shitshow begin:

Edit #1: July 24, 2020

Another automated reply.

Monday, July 6, 2020

Optimize the build speed for your Android project

We've all came to a decision to go and do something else while waiting for the build.gradle to finish, something like: people get married or divorced, learn to fly a plane, build a rocket ship out of LEGO or take one hour poo.

You downloaded Android studio and you just created an empty project and you had it run for the first time right?

Well this should look familiar to you if you profile your build with

./gradlew --profile --offline --rerun-tasks assembleDebug

24 seconds, that's not good.

Alright here we go configuring gradle.

Our first step will be configuring on demand, what does this mean?

Configuration on demand mode attempts to configure only projects that are relevant for requested tasks, i.e. it only executes the build.gradle file of projects that are participating in the build. This way, the configuration time of a large multi-project build can be reduced. In the long term, this mode will become the default mode, possibly the only mode for Gradle build execution.
Inside your
In case you get some weird error that a task failed mainly using Kotlin DSL scripts or groovy, disable configureOnDemand, you can look at why, at this issue.

It's good to increase the Java heap memory, of course if your RAM allows it, better not develop apps with <16GB RAM
You're building Android projects using Kotlin right, well lemme reveal a dirty secret, if you've used KAPT, it's worker is not enabled, yep, to make it so add
kapt.use.worker.api = true
Get ready for more

Building a multi-module project?
Get leverage of caching mecnanism? Say no more, in newer versions of Gradle I it's enabled by default, so there goes another valuable lesson, ALWAYS KEEP your GRADLE up to date with the LATEST VERSION, if you're unaffected by these caps, just use:
Using room?
room.incremental = true
But wait, that's not all if you're using Room, inside your build.gradle find your
defaultConfig {
and add
                javaCompileOptions {
            annotationProcessorOptions {
                arguments = ["room.incremental":"true"]
Get ready for one more addition, ladies and gentleman, the new citizen, configuration cache and it's brother file watcher

If you decide not to use webP images and stick to PNGs
buildTypes {
        release {
            // Disables PNG crunching for the release build type or maybe debug too?
            crunchPngs false
        } }
Never in your life write dependency using the + format, it adds to the build time if you add just one dependency like this and imagine if you add more, your build won't even finish by the time you go to sleep, so avoid something like this
implementation 'androidx.appcompat:appcompat:1.+'

Many of us use Crashlytics or some form of crash reporting tool, I built my own called Crashy to avoid the slowdowns, leveraging AndroidX Startup and over-configuration of Crashyltics, how can you configure Crashlytics?
Well, no worries, there you go.
buildTypes {

  debug {
     manifestPlaceholders = [crashlytics: "false"]
     crunchPngs false //you can read about that a little bit above

     firebaseCrashlytics {
       mappingFileUploadEnabled false

   release {
      manifestPlaceholders = [crashlytics: "true"]

Alright, let's go step by step:
  1. manifestPlaceholders = [crashlytics: "false"] this just disables the crashyltics from the manifest, but how do you do that?

    android:name="firebase_crashlytics_collection_enabled" android:value="${crashlytics}" />

    Wherever your Crashyltics initialization is, just use

  2. mappingFileUploadEnabled

    If you don't need crash reporting for your debug build,you can speed up your build by disabling mapping file uploading.

And now let's see

We have 4secs build time, including Dagger's kapt, Nav's kapt etc..

Sunday, June 28, 2020

Otaku, an Android anime streaming app

Otaku started last year as a free anime streaming app, but again Google didn't allow it to live on the Play store so time for a new home.

This won't be a long post and the app isn't giant, it's rather a small app with a big punch.

You can find it here.

Enjoy streaming your favorite anime for free.

YTS (Berg) Android app

Berg is a not an official app that works under YTS and is aggregating data to present movies and TV shows on your Android device.

The app has a built-in torrent client and does all the job for you, all you have to do is click download, prepare the popcorn and get ready to watch the movie/TV-show.

The journey started 2 years ago and it has been pretty awesome, bumpy and full of movies and TV shows, due to the nature of the app it has been pulled from the Google play store and now it lives on this blog, it's new home.

The first half a year it had it's success allowing downloadable content to your mobile phone only, after that it expanded to tablets too.

There were a lot of bugs killed into the processes (don't worry, no insects were harmed).

This year the focus will be shifted to bring the application to Android TV boxes and Android TVs.

Stay tuned for more updates, you can find the application here.

Friday, June 19, 2020

Welcome to my blog!

Long story short i'm a native Android developer who's gonna be using this blog to share his journey picking up from the date of this post, no my dear reader (yes you, not BufferedReader), I do not use AsyncTask, you can thank me later for the mind-reading.

I go on the internet as CraZyLegenD, it's a nickname that I didn't pick but I kinda picked upon from the time I spent gaming in my childhood, specifically from a game called Lineage 2 where I mercilessly murdered a whole clan (now i'm just a cereal killer) and their leader said:
"That guy's a crazy legend", so here I am. 
Thanks to someone from Brazil (since I mostly played on Brazilian servers) I picked this name and never bothered to change it ever since, many ask themselves but why?

  1. It's childish.
  2. It's gonna give you nightmares and you'll have to think of what Eminem had said "I'm the nightmare you fell asleep in and woke up still in".
  3. It's gonna make you cringe all the time like the difference between this text.
  4. 1
  5. Be nice to each other and party on dudes.

But why didn't you go with Medium, it's kinda like what everyone uses?
I like to put an effort into creating something of this style and get far from paywall articles.

What kinda content you as a reader should expect?
Mainly Android development topics, tips and tricks & definitely open-source libraries written by me and/or some applications that are gonna be outside of the Play Store.
The topics are Kotlin only so for my Java colleagues, i'm sorry folks the moment I started loving Java my friend introduced me to Kotlin.

Can I expect memes inside the posts?
Most definitely.

Thank you for reading this introduction, stay tuned for more.