Awesome
Android-Tips
This is an awesome list of tips for android.
If you are a beginner, this list will be the first choice for you when you have a difficult time.
Welcome Star
and Fork
, your support is my greatest affirmation.
学习 Android 至今,大大小小的坑没少踩过,庆幸的是,在强大的搜索引擎与无私奉献的人们的帮助下,那些坑都顺利地被填平了。
为了日后在遇到同样的问题时,能免于再次搜索带来的麻烦,我养成了收藏书签的习惯,随着书签(Tips)的日积月累,我想,是时候该有这个项目了。
如果你是个 Android 新人,又不善于搜索或不知道从何开始,那么我相信这份列表,将会成为你的首选。
当然,这份列表并不完美,如果不幸,这里没有你所踩到的坑,或者对于某个问题你有更好的 Tips,欢迎与大家分享,让我们一起来维护这个项目!
你可以通过 Pull request 的形式进行提交,当然也欢迎 Star
与 Fork
:)
由于各种问题,给出的链接可能会无法正常访问。遇到这种情况欢迎大家提交 Issue,Contributers 也可以使用 Utils 里面的 URLChecker 来检测列表里链接的有效性,你可以选择更改为新的有效连接,或者把需要梯子的文章以 Markdown 的形式保存在 Utils/Content 目录下,并注明原文章链接和作者。
目录
A
Activity
ADB
- Installing ADB on Windows 7
- Android ADB常用命令
- Android开发调试工具ADB的使用
- Android通过Wifi来调试你的应用
- Adb connection Error:远程主机强迫关闭了一个现有的连接
Adapter
AIDL
- android进程间通信:使用AIDL
- Android AIDL使用详解
- android跨进程通信(IPC): 使用AIDL
- Android中的跨进程通信的实现(一)——远程调用过程和aidl
- Android Studio下如何配置AIDL文件
AlarmManager
Android-Async-Http
Android Studio
- Android Studio导入项目
- Android Studio 简单设置
- Android Studio 简介及导入 jar 包和第三方开源库方法
- Android Studio使用技巧系列教程(一)
- Android Studio中如何使用Git和Github来管理项目
- Android Studio 权威教程
- 倍数提高工作效率的Android Studio奇技
- Android Studio 快捷键(Windows)
- Android Studio详细教程汇总
- Android Studio有什么奇技淫巧
AQuery
AsyncTask
- Android AsyncTask完全解析,带你从源码的角度彻底理解
- Android中AsyncTask的简单用法
- Android开发者:你真的会用AsyncTask吗?
- 深入解析AsyncTask,多例子版
Annotations
Android 6.0
B
Bitmap
- 图片处理
- Android中自定义布局中加载图片BitmapFactory.options详解
- Android学习笔记进阶16之BitmapShader
- Android 优化Bitmap避免OutOfMemoryError
- Android 异步加载图片,使用LruCache和SD卡或手机缓存,效果非常的流畅
- Android 开发绕不过的坑:你的 Bitmap 究竟占多大内存?
Broadcast
C
Canvas
Callback
CardView
- Android5.0新控件CardView的介绍和使用
- Android CardView Example
- Android CardView Widget – Add Cards to a List using RecyclerView
- CardView在API 21以下的圆角效果处理
Configuration Change
Context
- android学习—— context 和 getApplicationContext()
- Android中Context详解 ---- 你所不知道的Context
- Difference between getContext() , getApplicationContext() , getBaseContext() and “this”
CoordinatorLayout
D
Download
- Download a file with Android, and showing the progress in a ProgressDialog 译文
- Java 服务器端支持断点续传的源代码【支持快车、迅雷】
- Java 多线程断点下载文件
- Android 后台Service下载 (一)
- Android网络编程 --断点续传下载文件
- android 多线程断点续传下载 一
DownloadManager
Dagger
E
EventBus
F
Fragment - 碎片
- Android Fragment完全解析,关于碎片你所需知道的一切
- Android Fragment 你应该知道的一切
- Android系列之Fragment(二)----Fragment的生命周期和返回栈
- 处女男学Android(九)---Fragment进阶篇之Fragment生命周期和回退栈
- Fragment笔记整理
- Android实战技巧:Fragment的那些坑
- android Fragments详解四:管理fragment
- Android Fragment 嵌套使用(Nested Fragments)
- Fragment MyFragment not attached to Activity
- Fragment全解析系列(一):那些年踩过的坑
- onActivityResult is not being called in Fragment
Fresco
- Fresco学习笔记
- why use fresco datasource to get bitmap is empty
- Always cannot show the images when loading lots of bitmaps on screen
- SimpleDraweeView did not recycled in RecyclerView
- Fresco-Facebook的图片加载框架的使用
- Resizing and Rotating
FlowLayout - 自定义流布局
G
Glide
Gradle
- 用Gradle 构建你的android程序
- Android Studio系列教程四--Gradle基础
- 使用Gradle构建Android项目
- 使用Gradle管理你的Android Studio工程
- 灵活强大的构建系统Gradle
- Gradle Android Could not find method testPackage()
- Android Studio 1.0 Gradle Error with getConfiguration()
- Android打包的那些事
- 深入理解Android之Gradle
- gradle build fails on lint task
- “Gradle Version 2.10 is required.” Error
greenDao
- ORM 框架之 greenDAO 使用心得
- SQLite数据库框架ORMLite与GreenDao的简单比较
- 在AndoridStudio中引入GreenDAO
- gradle脚本集成greendao-generator生成android端greendao
GridView
H
Hotfix
Handler
I
ImageView
Immersive Full-Screen Mode
Intent
- Android系列教程之十:Intents and Intent Filters(一)
- Android高手进阶教程(十七)之---Android中Intent传递对象的两种方法(Serializable,Parcelable)!
- Intent filter 关于Action、Category属性详解---附带实例源码
- startActivityForResult用法详解
- Android 开发笔记——通过 Intent 传递类对象
J
Java 8
JSON
JNI
K
Kotlin
- Using Kotlin for Android Development
- Kotlin: Java 6 废土中的一线希望
- Kotlin 语言高级安卓开发入门
- Kotlin的黑魔法
- Learn Kotlin with Keddit
- Coding Android Apps in Kotlin
- Kotlin 一门强大的语言
- kotlin 学习
- Kotlin从入门到『放弃』系列 视频教程
L
largeHeap
ListFragment
ListView
Log
M
MessageDigest
Material Design
- Google Material Design: Everything You Need to Know
- An exploration in Material Design
- 谢谷歌大神传我动画设计30年功力
- Codelab for Android Design Support Library used in I/O Rewind Bangkok session
MVP
N
NavigationView
Notification
O
ORMLite
OkHttp
P
Parcelable
PackageManager
- Android中获取应用程序(包)的信息-----PackageManager的使用(一)
- 【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等)
- Android获取已安装应用信息(图标,名称,版本号,包)
- 关于android 如何安装 assets文件下的apk
Palette
PopupWindow
Preference
Picasso
R
React Native
- React Native for Android 入门老虎
- React Native For Android初体验
- React Native for Android 实践 -- 实现知乎日报客户端
- React Native Android 踩坑之旅
Reference
RecyclerView
- RecyclerView使用详解(一)
- Android RecyclerView 使用完全解析 体验艺术般的控件
- A Guide to Android RecyclerView and CardView
- Android-RecyclerView-Item点击事件设置
- Why doesn't RecyclerView have onItemClickListener()? And how RecyclerView is different from Listview?
- Create RecyclerView with multiple view type
- Simple RecyclerView Divider
Retrofit
RxJava
RxAndroid
RandomAccessFile
S
SearchView
Serializable
Service
- Android Service完全解析,关于服务你所需知道的一切(上)
- ExecutorService 的理解与使用
- Android基本功:IntentService的使用
- Android基础笔记(十一)- Service基础和注意事项以及Activity与Service的通信
SharedPreference
- Android SharedPreferences使用以及原理详解
- Google为何这样设计OnSharedPreferenceChangeListener
- SharedPreferences在多进程中的使用及注意事项
- What's the difference between commit() and apply() in Shared Preference
SparseArray
- Android应用性能优化之使用SparseArray替代HashMap
- Android SparseArray
- Android性能优化之使用SparseArray代替HashMap
- HashMap的实现与优化
SQLite
Support Library
SwipeRefreshLayout
T
Textview
- Remove underline from links in TextView
- What is the default text size on Android?
- Which unit of measurement does the Paint.setTextSize(float) use?
- How to set unit for Paint.setTextSize()
- Android Center text on canvas
TouchEvent
- 两分钟彻底让你明白Android中onInterceptTouchEvent与onTouchEvent(图文)!
- MotionEvent事件在onInterceptTouchEvent()、onTouchEvent()中的传递顺序
- Android Deeper(00) - Touch事件分发响应机制
Thread
- ThreadPoolExecutor运转机制详解
- ThreadPoolExecutor使用和思考(上)-线程池大小设置与BlockingQueue的三种实现区别
- Java并发编程:Callable、Future和FutureTask
- Java 7之多线程线程池 - Callable和Future
- Java 7之多线程线程池 - 线程池原理(1)
- Android线程间交互(Java synchronized & Android Handler)
- Android--多线程之Handler
- Java(Android)中线程池的使用
- Java(Android)线程池
U
Unit Test
- Android单元测试
- Don’t Test Blindly: The Right Methods for Unit Testing Your Java Apps
- 在Android Studio中进行单元测试和UI测试
URL Routing - 路由协议
V
ViewPager
- Android ViewPager使用详解
- ViewPager + Fragment实现滑动标签页
- 【移动开发】Android中Fragment+ViewPager的配合使用
- Android 手把手教您自定义ViewGroup(一)本文出自:【张鸿洋的博客】
- Android的坑之ScrollView嵌套ViewPager
- IllegalStateException: The application's PagerAdapter changed the adapter's content without calling PagerAdapter#notifyDataSetChanged
View
- Android LayoutInflater原理分析,带你一步步深入了解View(一)
- Android中View绘制流程以及invalidate()等相关方法分析
- Android中measure过程、WRAP_CONTENT详解以及xml布局文件解析流程浅析(上)
- Android开发:LayoutParams的用法
- Saving Android View state correctly
ViewFlipper
VideoView
Volley
- Android Volley
- Android Volley完全解析(一),初识Volley的基本用法
- Android库Volley的使用介绍
- 网络请求库Volley详解
- Volley 源码解析
- 使用okHttp、Volley、Gson快速组装HttpClinet
W
WebView
- Java 与 JavaScript 如何进行交互
- Android与js交互实例
- Android中Java和JavaScript交互
- 顶部带进度条的Webview
- Android WebView播放视频问题
- 理解WebKit和Chromium: Android 4.4 上的Chromium WebView
- 在WebView中如何让JS与Java安全地互相调用
- Android WebView的Js对象注入漏洞解决方案
- Android WebView播放视频问题
Others
Code Style
Git
- Pro Git
- GitHub秘籍
- git - 简易指南
- 基于Github参与开源项目指南
- 使用git和github进行协同开发流程
- 如何高效利用GitHub
- 廖雪峰的GIT入门教程
- GitHub&Git入门基础
- git-flow 备忘清单
JCenter
JitPack
反编译
- android_smali语法学习
- apk的包名修改
- 为Sublime Text安装smali代码语法高亮插件
- Android APK反编译详解(附图)
- Android开发学习总结(六)—— APK反编译
- 我是如何使用Android反编译软件的?
- Android程序的反编译对抗研究
设计模式
- Java开发中的23种设计模式详解
- MVC,MVP 和 MVVM 的图示
- 如果让我重新设计一款Android App
- 一个人如何开发一款 App?
- Android应用架构 (Android Dev Summit 2015)
- Android源码设计模式分析项目
夜间模式
自定义控件
- Android 自定义View及其在布局文件中的使用示例
- 自定义控件进阶:declare-styleable重用attr
- android 自定义控件 使用declare-styleable进行配置属性(源码角度)
- Android使用AttributeSet自定义控件的方法
- 从源码中浅析Android中如何利用attrs和styles定义控件
- Android SDK: Creating Custom Views
- Creating custom and compound Views in Android - Tutorial
- Tutorial: Enhancing Android UI with Custom Views
- Android 自定义View (一)
- What does postInvalidate() do?
- When it's necessary to execute invalidate() on a View?
- Android笔记:invalidate()和postInvalidate() 的区别及使用
No category
- THE DEX 64K LIMIT IS NOT A PROBLEM ANYMORE, ALMOST
- Android 4.4从图库选择图片,获取图片路径并裁剪
- 浅析android应用增量升级
- Android四大基本组件介绍与生命周期
- Android代码优化——使用Android lint工具
- Android 插件化 动态升级
- Java String StringBuilder StringBuffer
- tools:context=".MainActivity的作用
- 关于APK瘦身值得分享的一些经验
- 性能优化之数据库优化
- How to check visibility of software keyboard in Android?
- android 4.4.4侧滑退出显示app启动界面
- How to get a Color from hexadecimal Color String
- 【译】Android应用架构
- Android静默安装实现方案,仿360手机助手秒装和智能安装功能
- How to convert a color integer to a hex String in Android?
- IllegalArgumentException: width and height must be > 0 while loading Bitmap from View
- Unable to instantiate application com.android.tools.fd.runtime.BootstrapApplication ?
- Unknown URL content://downloads/my_downloads
- Android开发之实现多次点击事件
- Android完美解决输入框EditText隐藏密码打勾显示密码问题
- Android获取手机型号,系统版本,App版本号等信息
- 你需要知道的Android拍照适配方案
- Can't create handler inside thread that has not called Looper.prepare()
Contributors
- troyliu0105
- whiskeyfei
- pingfanganwei
- whilu
- yy1300326388
- ichenkaihua
- wavever
- windog
- Henryzhugithub
- Dimon94
- nitta-honoka
Contact Me
If you have any questions or want to make friends with me, please feel free to contact me : imtangqi#gmail.com