Development Barn

Updated: 2022.04.18

Android

In case you want to learn about Android Development

Advice

Framework

AnDevCon: Android Internals Overview - Marko Gargenta.mov

RecyclerView

Drag and Swipe with RecyclerView

Enter animation and LayoutAnimation

RecyclerView — More Animations with Less Code using Support Library ListAdapter

SortedList

DiffUtil

SnapHelper

Multiple item types

Improving scrolling behavior of nested RecyclerViews - Part 1

Saving scroll state of nested RecyclerViews - Part 2

Optimizing Nested RecyclerView

Fixing RecyclerView nested scrolling in opposite direction

Paging Image Carousel with RecyclerView

Drag and Drop between two RecyclerView ‘s

Animation

Get Animated (Android Dev Summit ‘18)

Exploring Meaningful Motion on Android

Synchronously Animating Toolbar, TabLayout, FloatingActionButton and StatusBar Background Colors on Android

An Introduction to Icon Animation Techniques

Make a moving Gradient Background in Android

Beautiful animations using Android ConstraintLayout

Make your app shine #3: How to reveal an activity with circular revelation

Polishing UI: Android StateListAnimator

StateListAnimator — a Powerful Little Tool for Elevation Animation

Scroll your Bottom Navigation View away with 10 lines of code

TransitionDrawable — Small Gems of the Android Framework

Animating your keyboard (part 1)

Animating your keyboard (part 2): reacting to WindowInset animations

One still surprisingly valid reason to use the old Animation (API 1+)

Playing with Material Design Transitions ✨ - How to make material design transitions between two screens?

AnimatedIcons: Strikethru

Design and Style

Best Practices for Themes and Styles (Android Dev Summit ‘18)

Good to great UI animation tips

Spantastic text styling with Spans

Using gradient for styling text

Styling internationalized text in Android

Mastering Android Themes

Understanding how to declaratively style text on Android

AppCompat — Age of the vectors

Night Theme => AppCompat — DayNight

Vector illustration basics for Android developers - Part 1: Primitive Shapes

Material shadows on Android by Sebastiano Poggi, JetBrains EN

Android Styling: Common Theme Attributes

Motional Intelligence: Build smarter animations

Writing

Gesture Navigation: going edge-to-edge

Animating your keyboard using WindowInsets

Note 1: Hex color codes are not currently supported for android:colorBackground, hence why a color resource was used.

Custom View

Official Documentation

Mastering the Android Touch System

How to make a swipe button

Creating an Extendable Floating Action Button in Android

How I drew custom shapes in bottom bar

How we implemented 3D cards in Revolut

Creating Custom Views in Android

Android: Why your Canvas shapes aren’t smooth

Background Execution

Modern background execution in Android

Things to consider before running background tasks

Android Handler Internals

Exploring Android Processes

Exploring Android Thread Priority

Executor Framework- Understanding the basics

Understanding CPU and I/O bound for asynchronous operations

miui10 no kill list

Android-App-Chain-Wakeup

Access the clipboard from the background

Background Work on Chinese ROMs

Why your Push Notifications never see the light of day

Google’s reply to WorkManager on Chinese ROMs. Only applys to ForegroundService and other

Android Studio

50 Android Studio Tips, Tricks & Resources you should be familiar with, as an Android Developer

Android Studio Debugger

Deep dive into .idea folder in Android Studio

Gradle

Using Gradle build cache with Kotlin

Gradle Tips and Tricks for Android(includes kotlin-dsl, resolving dependencies conflicts, apk splits, buildConfigField, externalNativeBuild, buildTypes configuration, gradle properties, offline mode, product flavors, dependency graph)

How to Include an External .aar File Using Gradle?

How to manage dependencies in a multi module project?

Name your .apk & .aab files, archivesBaseName in build.gradle of app module

Android library development - Getting started

Build Time

Build your Android app Faster and Smaller than ever

How I reduced my Android build times by 89%

Faster Android Build Times

ADB

ADB Commands — Part III

Dagger2(Always read the newets posts)

Official Doc

Dagger 2 Generated Code.

Understanding Dagger 2 Multibindings + ViewModel

Injection into Android Component’s Constructors is real

Kotlin+Dagger best practices/documentation

Brave New Android World with AssistedInject

APK

Playing APK Golf - Reducing an Android APK’s size by 99.99%

Reducing APK size by using ABI Filters and APK split

android-keystore-password-recover

Proguard Hell

Troubleshooting ProGuard issues on Android

Reading ProGuard’s Outputs

Feeding ProGuard’s inputs: where are all of these rules coming from?

How Proguard Works

Practical ProGuard rules examples

Android’s Built-in ProGuard Rules: The Missing Guide

Security

How long will you go to protect your Android app from being tampered?

Secure data in Android

Secure data in Android — Encryption

How to pass large data between server and client (android) securely?

Securing Network Data Tutorial for Android

Bang! Bang! You have been hacked.

How to retrieve an Unique ID to identify Android devices ?

Performing OAuth on Android with Custom Tabs

Securing API Keys using Android NDK (Native Development Kit)

Android Unique Device ID: History and Updates

Licenses

How open source licenses work and how to add them to your projects

How to Choose Licnese

Including Open Source Notices (Including an activity showing all libraries licenses. However, This official library doesn’t work very well)

OSS

Things I wish I knew when I started building Android SDK/Libraries

The beginner’s guide to contributing to a GitHub project

Removing sensitive data from a repository

Publish Your Android Library on JitPack for Better Reachability

What legal documents should your app have?

Release

Did you get one of these Google Play Developer Policy Violation Emails?

Clean your status bar like a pro!

Demo mode doc

Enhance Your Google Play Store Description With Rich Formatting & Emojis

Best Languages for App Localization

Signing Android Apps

Test

Understanding and Mastering the World of Android Testing (Part 1)

Mocking Kotlin classes with Mockito — the fast way

Testing App Startup Performance

Architecture

Google I/O 2018 app — Architecture and Testing

A Guided Tour inside a clean architecture code base.

Building a Shazam Clone Part 1 (Design) — Building Android Apps Series

Kotlin Clean Architecture

Modularization - Lessons learned

MVWTF: Demystifying Architecture Patterns

Performance

Performance Improvements for Search on The Yelp Android App

Advanced JSON parsing techniques using Moshi and Kotlin

How to use responsive images to speed up your apps — with android glide example

Resources for Learning OpenGL  -  An Android Developers Guide

CI, Continuous Integration

Using GitHub Actions for Android Continuous Integration and Delivery

Cloud Continuous Integration on Android with Kotlin Project

Android GitHub Actions Setup

Archiecture Components

5 common mistakes when using Architecture Components

Android ViewModel. How it works.

Room

7 Pro-tips for Room

Understanding migrations with Room

Room 🔗 RxJava

Firebase

Use Firebase without Google Services Gradle Plugin

Java

Modern DateTimes on Android

Kotlin

Kotlin Sequences: An Illustrated Guide

An Illustrated Guide to Covariance and Contravariance in Kotlin

The Ins and Outs of Generic Variance in Kotlin

Coroutines

KotlinConf 2017 - Deep Dive into Coroutines on JVM by Roman Elizarov

KotlinConf 2017 - Deep Dive into Coroutines on JVM by Roman Elizarov

Kotlin Coroutines patterns & anti-patterns

Easy Coroutines in Android: viewModelScope

KotlinConf 2019: Coroutines! Gotta catch ‘em all! by Florina Muntenescu & Manuel Vivo

Create an application CoroutineScope using Hilt

Framework Classes

Application

Reminder: “allowBackup=true” is the devil if you are using Hilt or Dagger

This is why your subclassed Application isn’t always instantiated

You basically need to duplicate it into your app’s manifest with the same name and add the exported=”true/false” as the only tag.

Fixed support for Configuration override use cases, including custom locales and font scales. See here for an example of how to correctly implement overrides using appcompat:1.2.0.

Context

Mastering Android context

Enumerating Resources in Android

Activity

Android “launchMode” (Visualized)

The Android Launch Mode Animated CheatSheet

Finally understanding how references work in Android and Java

The (Complete) Android Splash Screen Guide

The Android Lifecycle cheat sheet — part I: Single Activities

The Journey Of Launching An Android Activity

Seamless Android app launch animations using Intent Source Bounds

Fragment Transactions & Activity State Loss

Storage

DevBytes: Android 4.4 Storage Access Framework: Client

When you access an existing media file, you can use the value of the DATA column in your logic.

Views

Android ImageView ScaleType: A Visual Guide

Scrolling Behavior for Appbars in Android

AppCompat View Inflation

Media

Audio Focus

Discover the core Android API for Speech Recognition.

PIP

Making magic moments with picture in picture (Three more links at the end of the article)

Vibrate

The Correct Way to Vibrate

Google Play In-App Purchase

Exploring the Play Billing Library for Android

Programming

Best of Fluent 2012: /Reg(exp){2}lained/: Demystifying Regular Expressions

A Programmer’s Introduction to Unicode

Leetcode Pattern 1 BFS + DFS == 25% of the problems — part 1

Understanding SOLID Principles: Open Closed Principle

Demystifying Dynamic Programming

My favorite examples of functional programming in Kotlin(powerset in the middle of the article)

Flutter

Deep Dive Into The Pubspec.yaml File

What’s the pubspec.lock file in a Flutter Project?(Some files are misplaced)

Other

Generic

Why not GUI application terminate like console application?

Why is Python so slow?

Server

Capture all passwords trying to ssh into my server!

Create your first safe server that’s ready for production

Configure SSH Keys Authentication With PuTTY And Linux Server In 5 Quick Steps

Disable a user’s login without disabling the account

A fast and easy Docker tutorial for beginners (video series)

Getting Started with Docker on Your VPS

Hexo

Use Hexo and deploy to GitHub Pages

Using Git Submodules to Manage Your Custom Hexo Theme

Encryption

PGP Guide

Game

From Zero to Game Designer: how to start building video games even if you don’t have any experience

magictools

Thoughts

Optimize Your Programming Decisions for the 95%, Not the 5%

😍