Material Design 笔记
不保证全对、可能更新,这玩意儿主要是给自己看的
2018年5月27日更新:更新了一些无用的笔记
2018年5月23日更新:增加了Material Desgin 2字体的可能的可选值
不保证全对、可能更新,这玩意儿主要是给自己看的
2018年5月27日更新:更新了一些无用的笔记
2018年5月23日更新:增加了Material Desgin 2字体的可能的可选值
2019年11月22日 本文已过时 请查看Android官方的Dependency Injection教程和Codelab 谁能想到dagger-android要凉凉了呢?
2018年5月20日更新了测试的更多思路
2018年5月19日更新了Dagger2测试的思路
现在是2018年5月,Dagger2的版本是2.16,Kotlin版本是1.2,IDE是Android Studio。
过时的话就要话就要慎重地看。
Dagger2学起来是真心难受,现有的很多资料都已过世,误人子弟,而且和Kotlin结合在一起,会有很多很多坑和弯路。
Copy-pasting code makes it hard to refactor later on. As more and more developers copy-paste that block, fewer will know what it actually does.
本路线图指明的是:
从:对Dagger2只懂一点,不熟悉,只会到处复制粘贴。
到:熟悉Dagger2的使用方法,明白什么时候用interface,什么时候用abstract class,什么时候用@JvmStatic等等,能够看懂生成的代码,能分辨出Dagger2实现的好坏。
2018年5月18日更新:Moshi 1.6增加了Codegen的选项,可以取代Kotshi。原方案依旧可行。
之前用Gson序列化Kotlin的data class一直都没问题,但一天当data class中出现了默认参数时,问题就来了。
如果JSON中没有对应的Field,按道理Gson应该生成一个使用了默认参数的data class,但它没有,而且会无视Kotlin的不可null,直接生成一个null。
那换一个支持Kotlin的JSON库呗。这时Moshi就很厉害了,自带一个Kotlin的Adapter,用起来很舒服。但是在最后生成Release版本时,才发现安装包大了600+KB。原因是Moshi对Kotlin的支持使用了Kotlin的Reflection,这个就很占空间,虽然也有Kotlin Relection Lite这个轻量级版本,但目前并不支持。
所以,我在
把今年I/O的内容参加的差不多了,这里记录一些对我有用的东西。
虽然最终选择了GithubPages + Hexo,但之前使用Docker搭的Wordpress + HTTPS。搭完后才发现维护起来又累又贵,就把整个流程贴出来留给有缘人吧。
甩锅申明:出了问题我不知道怎么解决,请问万能的Stackoverflow吧😉
好处:
Updated: 2025.8.1
AnDevCon: Android Internals Overview - Marko Gargenta.mov
Drag and Swipe with RecyclerView
Enter animation and LayoutAnimation
RecyclerView — More Animations with Less Code using Support Library ListAdapter
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
Get Animated (Android Dev Summit ‘18)
Exploring Meaningful Motion 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+)
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
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
Gesture Navigation: going edge-to-edge
Animating your keyboard using WindowInsets
Mastering the Android Touch System
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
Missing Classes and Functions in Jetpack Compose Compiler Reports, and How to Fix
Gestures in Jetpack compose — All you need to know
The Do’s and Don’ts of Jetpack Compose
Scoped recomposition in Jetpack Compose — what happens when state changes?
Parallax Effect with SensorManager using Jetpack Compose
Ticker Board in Jetpack Compose
Neumorphism in Jetpack Compose
Modern background execution in Android
Things to consider before running background tasks
Exploring Android Thread Priority
Executor Framework- Understanding the basics
Understanding CPU and I/O bound for asynchronous operations
Access the clipboard from the background
Why your Push Notifications never see the light of day
Google’s reply to WorkManager on Chinese ROMs. Only applys to ForegroundService and other
50 Android Studio Tips, Tricks & Resources you should be familiar with, as an Android Developer
Deep dive into .idea folder in Android Studio
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
Unbreaking the changes in Compose 1.7
Mitigating soft verification issues in R8 and D8
Build your Android app Faster and Smaller than ever
How I reduced my Android build times by 89%
Practical ADB usage to enhance your life! - Benjamin Kadel
Understanding Dagger 2 Multibindings + ViewModel
Injection into Android Component’s Constructors is real
Kotlin+Dagger best practices/documentation
Brave New Android World with AssistedInject
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
Troubleshooting ProGuard issues on Android
Feeding ProGuard’s inputs: where are all of these rules coming from?
Practical ProGuard rules examples
Android’s Built-in ProGuard Rules: The Missing Guide
Strings, Please! Eliminating Data Leaks Caused by Kotlin Assertions
Hybrid Encryption in Android: Secure Communication Between Mobile and Backend Systems
Android Undercover: Native Code Translation for AV Stealth - DC615/DEF CON Nashville
How long will you go to protect your Android app from being tampered?
Securing Network Data Tutorial for Android
Bang! Bang! You have been hacked.
Performing OAuth on Android with Custom Tabs
Securing API Keys using Android NDK (Native Development Kit)
Android Unique Device ID: History and Updates
How open source licenses work and how to add them to your projects
Including Open Source Notices (Including an activity showing all libraries licenses. However, This official library doesn’t work very well)
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?
Did you get one of these Google Play Developer Policy Violation Emails?
Clean your status bar like a pro!
Enhance Your Google Play Store Description With Rich Formatting & Emojis
Best Languages for App Localization
Understanding and Mastering the World of Android Testing (Part 1)
Mocking Kotlin classes with Mockito — the fast way
Testing App Startup Performance
Yes, That’s MVI: The Pattern’s Full History, Misconceptions, and Modern Android Form
Android One-off Events: Approaches, evolution & anti-patterns
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
Modularization - Lessons learned
MVWTF: Demystifying Architecture Patterns
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
How OkCredit Android App boosted Network Performance by 30%
Using GitHub Actions for Android Continuous Integration and Delivery
Cloud Continuous Integration on Android with Kotlin Project
How to publish a Kotlin Multiplatform Android app on Play Store with GitHub Actions
5 common mistakes when using Architecture Components
Android ViewModel. How it works.
Understanding migrations with Room
Use Firebase without Google Services Gradle Plugin
Kotlin Sequences: An Illustrated Guide
An Illustrated Guide to Covariance and Contravariance in Kotlin
The Ins and Outs of Generic Variance in Kotlin
Seven recipes to understand flows and asynchrony in Kotlin
How I Fell in Kotlin’s RunBlocking Deadlock Trap, and How You Can Avoid It
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
The Silent Killer That’s Crashing Your Coroutines
Reminder: “allowBackup=true” is the devil if you are using Hilt or Dagger
This is why your subclassed Application isn’t always instantiated
Enumerating Resources in Android
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
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.
Android ImageView ScaleType: A Visual Guide
Scrolling Behavior for Appbars in Android
Discover the core Android API for Speech Recognition.
Making magic moments with picture in picture (Three more links at the end of the article)
Exploring the Play Billing Library for Android
A Simple Framework For Mobile System Design Interviews
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)
Deep Dive Into The Pubspec.yaml File
What’s the pubspec.lock file in a Flutter Project?(Some files are misplaced)
Why not GUI application terminate like console application?
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
Use Hexo and deploy to GitHub Pages
Using Git Submodules to Manage Your Custom Hexo Theme
From Zero to Game Designer: how to start building video games even if you don’t have any experience
Optimize Your Programming Decisions for the 95%, Not the 5%
😍
计时机器无法唤醒国产设备的临时解决方案。几乎所有国产手机都需要类似的设置,因为国内厂商的对Android应用后台的态度是,错杀一万也不能放走一个没跟自己打招呼的应用。