Today I Learned - TIL
Things I learned so far in my three years of a professional career and in day to day and research related to Android, API's, Jetpack Components, Architecture, Design Patterns, Kotlin and, Java Concepts.
- S.O.L.I.D: The First 5 Principles of Object Oriented Design
- GOF / Gang of Four Design Patterns in Java
- Pass-By-Value as a Parameter Passing Mechanism in Java
- Java Heap Space vs. Stack Memory
- The dilemma of abstraction vs. encapsulation in an object oriented software design
- MVP for Android
- #31DaysOfKotlin — Week 1 Recap
- #31DaysOfKotlin — Week 2 Recap
- #31DaysOfKotlin — Week 3 Recap
- #31DaysOfKotlin — Week 4 Recap
- Mastering Design Patterns in Android with Kotlin
- Structured concurrency
- Delegating Delegates to Kotlin
- Common Design Patterns for Android with Kotlin
- Design Patterns In Kotlin
- Android Performance Patterns
- Multi-module Android project codebase
- Memory Leaks in Android
- Everything you need to know about Memory Leaks in Android
- Finally understanding how references work in Android and Java
- Processes and Threads overview
- Processes and Application Lifecycle
- Exploring Android Processes
- Android - How to decide whether to run a Service in a separate Process?
- Keep the device awake
- Optimize for Doze and App Standby
- Android M startActivity battery optimization
- Background optimizations
- Android vitals
- Excessive wakeups
- Stuck partial wake locks
- Introduction to Doze mode and App Standby
- Doze mode - do foreground services continue to run?
- Android doze mode and foreground service
- How to know if doze mode is running?
- How does doze mode affect background/foreground services, with/without partial/full wakelocks?
- Purpose of WakeLock in modern Android?
- Android: When is WakeLock needed?
- Android background service and wake lock
- Using proximity sensor in android
- Android Proximity Sensor Example App
- Understanding Android Core: Looper, Handler, and HandlerThread
- Understanding Touch Control and Events in Android
- Instant Run: How Does it Work?
- Set up Android Emulator networking
- Understanding the Android Application Class
- Save image into gallery
- Encrypted SharedPreferences
- Using the OkHttp library for HTTP requests - Tutorial - Tutorial
- OkHttp Interceptors with Retrofit
- Retrofit Tutorial — Manage Request Headers in OkHttp Interceptor
- Retrofit - Change BaseUrl
- Set dynamic base url using Retrofit 2.0 and Dagger 2
- Retrofit 2 — How to Change API Base Url at Runtime
- Swankjesse/HostSelectionInterceptor.java
- Turn on GPS automatically on Android (Programmatically)
- FCM
- Android Push Notifications using Firebase Cloud Messaging FCM
- How to handle background services in ANDROID O?
- Building an Android service that never stops running
- Effective foreground services on Android
- Check-if-battery-optimization-is-enabled-or-not-for-an-app
- Building an Android service that never stops running
- Oreo (8.1) cannot start activity on lock screen
- Creating a never ending background service in Android
- Creating a never ending background service in Android > 7
- Seven simple Android fixes that will ensure privacy on your phone
- Easy Runtime Permissions on Android with Kotlin DSL
- Take Picture with Camera - Android - Kotlin
- Android Custom Alert Dialogs + Kotlin extension functions + Kotlin Higher Order functions = Life become Easier! — Kotlin DSL
- Google Play In-App Review API
- App startup time
- Handling Lifecycle with View Binding in Fragments
- Create PDF
- Canvas Drawtext Direction
- Canvas center-text-vertically-and-horizontally
- RequestLayout & Invalidate
- ConstraintLayout in the LIMELIGHT
- Android ConstraintLayout - Part 1 - Everything you need to know
- Android ConstraintLayout - Part 2 - Guideline, Barrier and Group
- TextInputLayout styling
- TextInputLayout with loading indicator
- Why I love Text Field from Material Design?
- Material Design TextInputEditText Border Color When Not Activated
- EditText with TextInputlayout layout With hint and Border
- Android BottomSheet Example in Kotlin (Mind Orks)
- Bottom Sheet Android Kotlin (Android4Dev)
- Create a Bottom Sheet in Android with Kotlin (Medium)
- Hands-on with Material Components for Android: Bottom Sheets (Advance)
- Drag and drop items in RecyclerView with GridLayoutManager
- Android Recyclerview With Single And Multiple Selection
- Implementing a multi-select RecyclerView with a dynamic ActionBar in Android
- Restore RecyclerView scroll position
- How can I display a list view in an Android Alert Dialog?
- Android Alert Dialog with one, two, and three buttons
- How to implement a custom AlertDialog View
- Popup Menu (with Icons!)
- Android and Kotlin: RecyclerView with multiple view types
- Navigation Component for Android Transition and Navigation
- Show and hide a View with a slide up/down animation
- Show and hide action bar with animation
- AdMob Native Advanced Ads in an Android Feed
- When to use MVC or MVP or MVVM or Nothing
- Guide to app architecture
- MVVM Architecture - Android Tutorial for Beginners
- Model-View-ViewModel by Florina Muntenescu
- Android Unidirectional Data Flow — Kotlin Flow vs. RxJava
- MVP/MVVM
- Getting started with MVI Architecture on Android
- MVI Architecture for Android Tutorial: Getting Started
- 7 Pro-tips for Room By Florina Muntenescu
- Accessing data using Room DAOs
- Database relations with Room
- Android Architecture Components: Room — Relationships
- Relation
- ForeignKey
- Room Guide
- Understand why Room doesn't allow object references & TypeConverter
- Define relationships between objects
- What is the difference between @ForeignKey and @Relation annotations in Room database?
- Room database INNER JOIN results
- Return type for Android Room joins
- Android left join query with room
- Android Room Persistence Library: Relations
- Migrating Room databases
- Migrate Room database with Autoincrement Primary Key
- Migration room database, alter table, android?
- Understanding migrations with Room
- What’s New in Navigation 2020
- Exploring Android Jetpack: Preferences
- Android Jetpack Security
- Room Insert Sealed class as a variable - Moshi & Kotlin's sealed classes
- Room Insert Sealed class as a variable - How to parse polymorphic objects in Kotlin using Moshi
- Room add Moshi TypeConvertor
- Coroutines on Android (part I): Getting the background
- Coroutines on Android (part II): Getting started
- Coroutines On Android (part III): Real work
- Structured Concurrency Anniversary
- Kotlin flows
- StateFlow and SharedFlow
- HOW TO USE KOTLIN FLOW IN AN ANDROID APP
- Making Android unidirectional data flow with Kotlin coroutines
- Cold flows & hot channels
- Kotlin Flow for Android: Getting Started
- Asynchronous Data Streams with Kotlin Flow by Roman Elizarov
- Coroutines with Lifecycle and LiveData Builders
- Learn By Doing — Live Data Builder : Bridging Coroutines and Live Data in Android
- Easy Coroutines in Android: liveData() builder, withContext(), and Dispatchers
- Going deep on Flows & Channels — Part 1: Streams
- Preparing for Scoped Storage in Android 11 Best
- Android Simple Image Gallery
- Handling Media Files With MediaFacer Library For Android
- MediaFacer
- Android-Simple-Image-Gallery!
- What is the Difference Between External Storage and Internal Storage?
- Android: Internal and External Storage - Terminology Clarification
- Storing Files in Internal & External Storage
- Android File IO Tutorial with Internal and External Storage
- Best: Taming File Storage on Android — Part 2
- How to Correctly Store App-Specific Files in Android
- FileUtils Operations java
- Fundamentals of Testing
- Test-Driven Development on Android with the Android Testing Support Library (Google I/O '17)
- Frictionless Android testing: write once, run everywhere (Google I/O '18)
- Testing Rebooted (with AndroidX Test) (Android Dev Summit '18)
- Build Testable Apps for Android (Google I/O'19)
- Automate Android App Testing with Robo
- TDD on Android (DevFest 2019)
- KotlinConf 2018 - Best Practices for Unit Testing in Kotlin by Philipp Hauer
- KotlinConf 2019: Testing: Testing by Christina Lee
- Unit Testing in MVVM+Kotlin+DataBinding
- Testing in Android with AndroidX update
- Android Unit Testing with Mockito
- Using Mockito in Android Unit Testing as a Pro
- Mockito cannot mock because : final class in Kotlin
- Android Testing part 2: Better unit testing with MVVM + Data-binding
- Unit Tests -FCM-Notification-Test-Cases
- Dependency injection in Android
- Dagger android The Missing Deep Dive
- Using Dagger 2 with MVVM SIMPLIFIED!
- Android MVVM with Dagger 2, Retrofit, RxJava, Architecture Components
- Improving testability in Android MVVM with Dagger 2
- MVVM with Kotlin?—?Android Architecture Components, Dagger 2, Retrofit and RxAndroid
- Using Dagger in a multi-module project
- Dagger 2 @Inject Workmanager
- Dagger 2 for Dummies in Kotlin
- Huawei device killing my foreground service, even with dontkillmyapp.com's solution
- How to turn off battery optimization on Huawei devices
- Don't kill my app! - Huawei
- How to turn off battery optimization on Huawei devices 1
- How to turn off battery optimization on Huawei devices 2
- “Protected Apps” setting on Huawei phones, and how to handle it
- How can I fix a notification issue on my Honor/Huawei/Sony/Oppo?
- Battery optimizations (wakelocks) on Huawei EMUI 4.0+
- Service killed when app close just in huawei device
- Push Notifications Not Coming Through To Your Huawei Phone? Here's How To Fix It
- What to do if alarms or sleep tracking don’t work?
- How to Extract an API Key from a Mobile App by Static Binary Analysis
- Android Security: SSL Pinning
- SSL Pinning in Android
- SSL Pinning in Android Part 1
- Securing the network traffic in Android using Certificate Pinning
- Hide API keys in native libraries using NDK Best
- Securing API Keys using Android NDK
- A follow-up on how to store tokens securely in Android
- Add C/C++ Code To existing Android Project
- Securing API Keys in Android App using NDK (Native Development Kit)
- Tampering and Reverse Engineering on Android
- Quick tip: Hide your API Keys on Android - Geocasts
- Is Your Kotlin Code Really Obfuscated?
- How to make Proguard keep Kotlin data class
- The Root of Things: Detecting if an android device is rooted
- How can I detect when an Android application is running in the emulator?
- Android App Reverse Engineering 101
- Bytecode Viewer
- JADX
- Ghidra Software Reverse Engineering Framework
- Bypassing Android’s RootBeer Library
- Comparison of Different Android Root-Detection Bypass Tools
- How to Implement Root Detection in Android Applications
- Root Beer Github
- The Jiu-Jitsu of Detecting Frida
- DetectFrida Github
- meat-grinder
- Determine if running on a rooted device Best
- Security hardening of Android native code
The following are the references from where I mostly Learning.
- Florina Muntenescu
- Coding With Mitch
- Coding In Flow
- MindOrks
- Chet Haase
- Sean McQuillan
- Ian Lake
- Lyla Fujiwara
- Wajahat Karim
- Himanshu Singh
- Awesome Android Learning Resources
- Android Dev Notes
The best quality courses I loved personally and preferred are:
- Software Development Process
- Advanced Android App Development
- Advanced Android with Kotlin
- Android Performance
- Developing Android Apps with Kotlin
- Gradle for Android and Java
- Java Programming Basics
- Object Oriented Programming in Java
- 97 Things Every Programmer Should Know
- Programming Kotlin
- Kotlin_in_Action_(2017)
- Kotlin Main Concept
- Kotlin Cheatsheet
Inspired by Wajahat Karim - TIL
The best way you can contribute is to support the idea of keeping track of things you learned. Just create a public repo and start writing and sharing notes. This is way better than keeping them to yourself.