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 目录下,并注明原文章链接和作者。
- Installing ADB on Windows 7
 - Android ADB常用命令
 - Android开发调试工具ADB的使用
 - Android通过Wifi来调试你的应用
 - Adb connection Error:远程主机强迫关闭了一个现有的连接
 
- android进程间通信:使用AIDL
 - Android AIDL使用详解
 - android跨进程通信(IPC): 使用AIDL
 - Android中的跨进程通信的实现(一)——远程调用过程和aidl
 - Android Studio下如何配置AIDL文件
 
- Android Studio导入项目
 - Android Studio 简单设置
 - Android Studio 简介及导入 jar 包和第三方开源库方法
 - Android Studio使用技巧系列教程(一)
 - Android Studio中如何使用Git和Github来管理项目
 - Android Studio 权威教程
 - 倍数提高工作效率的Android Studio奇技
 - Android Studio 快捷键(Windows)
 - Android Studio详细教程汇总
 - Android Studio有什么奇技淫巧
 
- Android AsyncTask完全解析,带你从源码的角度彻底理解
 - Android中AsyncTask的简单用法
 - Android开发者:你真的会用AsyncTask吗?
 - 深入解析AsyncTask,多例子版
 
- 图片处理
 - Android中自定义布局中加载图片BitmapFactory.options详解
 - Android学习笔记进阶16之BitmapShader
 - Android 优化Bitmap避免OutOfMemoryError
 - Android 异步加载图片,使用LruCache和SD卡或手机缓存,效果非常的流畅
 - Android 开发绕不过的坑:你的 Bitmap 究竟占多大内存?
 
- Android5.0新控件CardView的介绍和使用
 - Android CardView Example
 - Android CardView Widget – Add Cards to a List using RecyclerView
 - CardView在API 21以下的圆角效果处理
 
- android学习—— context 和 getApplicationContext()
 - Android中Context详解 ---- 你所不知道的Context
 - Difference between getContext() , getApplicationContext() , getBaseContext() and “this”
 
- Download a file with Android, and showing the progress in a ProgressDialog 译文
 - Java 服务器端支持断点续传的源代码【支持快车、迅雷】
 - Java 多线程断点下载文件
 - Android 后台Service下载 (一)
 - Android网络编程 --断点续传下载文件
 - android 多线程断点续传下载 一
 
- 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学习笔记
 - 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
 
- 用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
 
- ORM 框架之 greenDAO 使用心得
 - SQLite数据库框架ORMLite与GreenDao的简单比较
 - 在AndoridStudio中引入GreenDAO
 - gradle脚本集成greendao-generator生成android端greendao
 
- Android系列教程之十:Intents and Intent Filters(一)
 - Android高手进阶教程(十七)之---Android中Intent传递对象的两种方法(Serializable,Parcelable)!
 - Intent filter 关于Action、Category属性详解---附带实例源码
 - startActivityForResult用法详解
 - Android 开发笔记——通过 Intent 传递类对象
 
- Using Kotlin for Android Development
 - Kotlin: Java 6 废土中的一线希望
 - Kotlin 语言高级安卓开发入门
 - Kotlin的黑魔法
 - Learn Kotlin with Keddit
 - Coding Android Apps in Kotlin
 - Kotlin 一门强大的语言
 - kotlin 学习
 - Kotlin从入门到『放弃』系列 视频教程
 
- 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
 
- Android中获取应用程序(包)的信息-----PackageManager的使用(一)
 - 【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等)
 - Android获取已安装应用信息(图标,名称,版本号,包)
 - 关于android 如何安装 assets文件下的apk
 
- React Native for Android 入门老虎
 - React Native For Android初体验
 - React Native for Android 实践 -- 实现知乎日报客户端
 - React Native Android 踩坑之旅
 
- 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
 
- Android Service完全解析,关于服务你所需知道的一切(上)
 - ExecutorService 的理解与使用
 - Android基本功:IntentService的使用
 - Android基础笔记(十一)- Service基础和注意事项以及Activity与Service的通信
 
- Android SharedPreferences使用以及原理详解
 - Google为何这样设计OnSharedPreferenceChangeListener
 - SharedPreferences在多进程中的使用及注意事项
 - What's the difference between commit() and apply() in Shared Preference
 
- Android应用性能优化之使用SparseArray替代HashMap
 - Android SparseArray
 - Android性能优化之使用SparseArray代替HashMap
 - HashMap的实现与优化
 
- 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
 
- 两分钟彻底让你明白Android中onInterceptTouchEvent与onTouchEvent(图文)!
 - MotionEvent事件在onInterceptTouchEvent()、onTouchEvent()中的传递顺序
 - Android Deeper(00) - Touch事件分发响应机制
 
- 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)线程池
 
- Android单元测试
 - Don’t Test Blindly: The Right Methods for Unit Testing Your Java Apps
 - 在Android Studio中进行单元测试和UI测试
 
- 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
 
- Android LayoutInflater原理分析,带你一步步深入了解View(一)
 - Android中View绘制流程以及invalidate()等相关方法分析
 - Android中measure过程、WRAP_CONTENT详解以及xml布局文件解析流程浅析(上)
 - Android开发:LayoutParams的用法
 - Saving Android View state correctly
 
- Android Volley
 - Android Volley完全解析(一),初识Volley的基本用法
 - Android库Volley的使用介绍
 - 网络请求库Volley详解
 - Volley 源码解析
 - 使用okHttp、Volley、Gson快速组装HttpClinet
 
- 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播放视频问题
 
- Pro Git
 - GitHub秘籍
 - git - 简易指南
 - 基于Github参与开源项目指南
 - 使用git和github进行协同开发流程
 - 如何高效利用GitHub
 - 廖雪峰的GIT入门教程
 - GitHub&Git入门基础
 - git-flow 备忘清单
 
- 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() 的区别及使用
 
- 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()
 
- troyliu0105
 - whiskeyfei
 - pingfanganwei
 - whilu
 - yy1300326388
 - ichenkaihua
 - wavever
 - windog
 - Henryzhugithub
 - Dimon94
 - nitta-honoka
 
If you have any questions or want to make friends with me, please feel free to contact me : imtangqi#gmail.com