- 第一行代码: Android (第2版) java语言
- 第一行代码: Android (第3版) kotlin语言
- Android Studio开发实战 从零基础到App上线(第2版)
- 面向物联网的Android应用开发与实践
- Android 进阶解密
- Android 开发艺术
- 深入理解Android: Java虚拟机ART
- Kotlin从入门到进阶实战
- kotlin开发教程(全2册)
- kotlin核心编程---很棒的书
- 基于kotlin的SpringBoot微服务实战
Google官方 Andriod 开发教程 |
---|
Google开发者训练营 |
---|
Google开发官方网站 | 阿里巴巴 知行动手实验室 | Andriod Studio |
---|
Android SDK上手指南 | Android屏幕适配全攻略(最权威的官方适配指导) | Android性能专项测试 | Android NDK开发学习 |
---|
Android 例子高仿篇 | Android基础与异常处理 | android技术分享与探讨 |
---|
极客教程 Android 教程篇 | 极客教程 Flutter教程篇 | 极客教程 Kotlin教程篇 |
---|
App开发新手入门攻略 | 一个优秀的Android应用从建项目开始---创建项目的一些规范 |
---|
Android学习项目入行必备 | 老罗的Android之旅(总结) | android源码解析---主要用于解析android framework层源码,干货满满 |
---|
Android知识点总结 |
---|
flutter | Android开发人员不得不收集的工具类集合 | GitHub上最火的Android开源项目 | RxJava-Android-Samples---Learning RxJava for Android by example |
---|
Android MaterialDrawer---the flexible, easy to use, all in one drawer library for your Android project |
---|
Android基础入门教程 | Android Training官方培训课程 | 解析 Android 架构设计原则 | Android知识点总结 | Android SDK上手指南 |
---|
Android实战技巧---应用开发中积累的实战经验和技巧 | Android 开发规范与应用---从Futurice公司Android开发者中学到的经验。 |
---|
深入理解Android Java 虚拟机ART | Android产品研发实录 |
---|
深入理解Android(卷1)---以情景方式对Android的源代码进行深入分析的书 | 深入理解Android(卷2)---以情景方式对Android的源代码进行深入分析的书 |
---|
深入理解Android(卷3)Wi-Fi、NFC和GPS卷(完整版) |
---|
AndroidUI开发 | Android热门三方库源码面试宝典 |
---|
Android(OpenCV)开发---掌纹识别 人脸识别 火灾检测 | Android屏幕适配全攻略(最权威的官方适配指导) |
---|
Android 中流行的开源框架解读 | Android设备和PC端通过USB线通信 |
---|
android通过web与后台数据库交互 | 后端spring boot+前端Android交互+mysql增删查改 |
---|
Android 最佳实践 之 单元测试 | android WebSocket详细实现步骤 |
---|
2019初中级Android开发社招面试 |
---|
- 【边做项目边学Android---手机卫士】
- 安卓实战音心APP开发
- GSYGithubApp项目系列的优势:目前已经拥有Flutter、Weex、ReactNative、Kotlin四个版本, 超完整的Android 项目,功能丰富,项目框架内技术涉及面广,完成度高。开源Github客户端App
- 如何运行Kotlin代码
- 第一种方法是使用IntelliJ IDEA
- 第二种方法是在线运行Kotlin代码---JetBrains专门提供了一个可以在线运行Kotlin代码的网站,地址是:https://try.kotlinlang.org
- 第三种方法是使用Android Studio
- Kotlin特色
- Kotlin语法
- 注意,Kotlin每一行代码的结尾是不用加分号的
- 变量---而Kotlin中定义一个变量,只允许在变量前声明两种关键字:val和var
- val(value的简写)---用来声明一个不可变的变量,这种变量在初始赋值之后就再也不能重新赋值,对应Java中的final变量
- var(variable的简写)---用来声明一个可变的变量,这种变量在初始赋值之后仍然可以再被重新赋值,对应Java中的非final变量。
- 显式地声明变量类型: Val a : int = 10
- Kotlin对象数据类型---Kotlin完全抛弃了Java中的基本数据类型,全部使用了对象数据类型,在Java中int是关键字,而在Kotlin中Int变成了一个类,它拥有自己的方法和继承结构
- 函数
- Kotlin标准函数和静态方法
- 标准函数---Kotlin的标准函数指的是Standard.kt文件中定义的函数,任何Kotlin代码都可以自由地调用所有的标准函数
- 静态方法---静态方法在某些编程语言里面又叫作类方法,指的就是那种不需要创建实例就能调用的方法,因而静态方法非常适合用于编写一些工具类的功能,因为工具类通常没有创建实例的必要,基本是全局通用的, Kotlin却极度弱化了静态方法这个概念,那么Kotlin为什么要这样设计呢?因为Kotlin提供了比静态方法更好用的语法特性,并且我们在上一节中已经学习过了,那就是单例类
- 顶层方法
- @JvmStatic注解
- 单例类
- companion object
- Kotlin标准函数和静态方法
- 程序的逻辑控制
- 顺序语句
- 条件语句
- 循环语句
- While
- For
- 区间
- 双端闭区间: 0..10 , ..是创建两端闭区间的关键字,在..的两边指定区间的左右端点就可以创建一个区间了
- 左闭右开的区间 : Kotlin中可以使用until关键字来创建一个左闭右开的区间, 0 until 10
- step(跳过指定的区间)
- downTo(降序)
- 面向对象编程
- 继承
- 主构造函数---主构造函数将会是你最常用的构造函数,每个类默认都会有一个不带参数的主构造函数,当然你也可以显式地给它指明参数。主构造函数的特点是没有函数体,直接定义在类名的后面即可
- 次构造函数
- 类中只有次构造函数,没有主构造函数
- 多态
- 函数的可见性修饰符
- public---public修饰符的作用虽然也是一致的,表示对所有类都可见,但是在Kotlin中public修饰符是默认项,而在Java中default才是默认项
- private---首先private修饰符在两种语言中的作用是一模一样的,都表示只对当前类内部可见
- protected---protected关键字在Java中表示对当前类、子类和同一包路径下的类可见,在Kotlin中则表示只对当前类和子类可见
- internal---只对同一模块中的类可见,使用的是internal修饰符。比如我们开发了一个模块给别人使用,但是有一些函数只允许在模块内部调用,不想暴露给外部,就可以将这些函数声明成internal
- 数据类与单例类
- 单例类
- 数据类
- Lambda编程
- 集合的创建与遍历
- list
- listOf()函数创建的是一个不可变的集合。
- 那如果我们确实需要创建一个可变的集合呢?也很简单,使用mutableListOf()函数就可以了
- set
- setOf()函数创建的是一个不可变的集合
- mutableSetOf()函数创建一个可变的集合
- Map
- mapOf()函数创建的是一个不可变的集合
- mutableMapOf()函数创建一个可变的集合
- 集合的函数式API
- 学习函数式API的语法结构
- list
- 集合的创建与遍历
- 空指针检查
- 字符串内嵌表达式
- 继承
- Android系统架构
- 应用层---所有安装在手机上的应用程序都是属于这一层的,比如系统自带的联系人、短信等程序,或者是你从Google Play上下载的小游戏,当然还包括你自己开发的程序
- 应用框架层---这一层主要提供了构建应用程序时可能用到的各种API,Android自带的一些核心应用就是使用这些API完成的,开发者可以使用这些API来构建自己的应用程序
- 系统运行库层---这一层通过一些C/C++库为Android系统提供了主要的特性支持。如SQLite库提供了数据库的支持,OpenGL|ES库提供了3D绘图的支持,Webkit库提供了浏览器内核的支持等,在这一层还有 Android运行时库,它主要提供了一些核心库,允许开发者使用Java语言来编写Android应用。另外,Android运行时库中还包含了Dalvik虚拟机(5.0系统之后改为ART运行环境),它使得 每一个Android应用都能运行在独立的进程中,并且拥有一个自己的虚拟机实例
- Linux内核层---这一层为Android设备的各种硬件提供了底层的驱动
- 显示驱动
- 音频驱动
- 照相机驱动
- 蓝牙驱动
- Wi-Fi驱动
- 电源管理
- Android开发
- Android应用开发特色
- 四大组件
- Activity---其中Activity是所有Android应用程序的门面,凡是在应用中你看得到的东西,都是放在Activity中的
- Service---而Service就比较低调了,你无法看到它,但它会在后台默默地运行,即使用户退出了应用,Service仍然是可以继续运行的
- BroadcastReceiver---BroadcastReceiver允许你的应用接收来自各处的广播消息,比如电话、短信等,当然,你的应用也可以向外发出广播消息
- ContentProvider--- ContentProvider则为应用程序之间共享数据提供了可能,比如你想要读取系统通讯录中的联系人,就需要通过ContentProvider来实现
- 丰富的系统控件
- SQLite数据库---Android系统还自带了这种轻量级、运算速度极快的嵌入式关系型数据库。它不仅支持标准的SQL语法,还可以通过Android封装好的API进行操作,让存储和读取数据变得非常方便
- 强大的多媒体
- 四大组件
- Android开发环境
- 所需要的工具
- JDK---JDK是Java语言的软件开发工具包,它包含了Java的运行环境、工具集合、基础类库等内容。
- Android SDK---Android SDK是Google提供的Android开发工具包,在开发Android程序时,我们需要通过引入该工具包来使用Android相关的API。
- Android Studio
- Android模拟器设备
- Android Studio源程序项目结构
- 项目的外层目录结构
- 项目的内层目录结构--APP目录结构
- 项目中的资源
- 所有以“drawable”开头的目录都是用来放图片的
- 所有以“mipmap”开头的目录都是用来放应用图标的
- 所有以“values”开头的目录都是用来放字符串、样式、颜色等配置的
- 所有以“layout”开头的目录都是用来放布局文件的。
- 详解build.gradle文件---项目中有两个build.gradle文件,一个是在最外层目录下的,一个是在app目录下的。这两个文件对构建Android Studio项目都起到了至关重要的作用
- 外层目录的 build.gradle文件
- 内层APP目录的 build.gradle文件
- 日志工具的使用
- 程序中的日志输出
- Log.v()---用于打印那些最为琐碎的、意义最小的日志信息。对应级别verbose,是Android日志里面级别最低的一种。
- Log.d()---用于打印一些调试信息,这些信息对你调试程序和分析问题应该是有帮助的。对应级别debug,比verbose高一级。
- Log.i()---用于打印一些比较重要的数据,这些数据应该是你非常想看到的、可以帮你分析用户行为的数据。对应级别info,比debug高一级。
- Log.w()---用于打印一些警告信息,提示程序在这个地方可能会有潜在的风险,最好去修复一下这些出现警告的地方。对应级别warn,比info高一级。
- Log.e()---用于打印程序中的错误信息,比如程序进入了catch语句中。当有错误信息打印出来的时候,一般代表你的程序出现严重问题了,必须尽快修复。对应级别error,比warn高一级
- Logcat中可以很轻松地添加过滤器
- Logcat中的日志级别控制
- 日志关键字过滤---如果使用过滤器加日志级别控制还是不能锁定到你想查看的日志内容的话,那么还可以通过关键字进行进一步的过滤
- 程序中的日志输出
- 所需要的工具
- 创建首个主页面 Activity
- 创建Activity
- 注册为主Activity
- Toast
- 不用再调用findViewById()方法了
- 在Activity中使用Menu
- 销毁一个Activity
- 在不同的Activity之间跳转
- Intent---Intent是Android程序中各组件之间进行交互的一种重要方式,它不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据。Intent一般可用于启动Activity、启动Service以及发送广播等场景
- 显式Intent---
- 隐式Intent---隐式Intent则含蓄了许多,它并不明确指出想要启动哪一个Activity,而是指定了一系列更为抽象的action和category等信息,然后交由系统去分析这个Intent,并帮我们找出合适的Activity去启动
- Intent---Intent是Android程序中各组件之间进行交互的一种重要方式,它不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据。Intent一般可用于启动Activity、启动Service以及发送广播等场景
- Activity的生命周期---每个Activity在其生命周期中最多可能会有4种状态
- 运行状态
- 暂停状态
- 停止状态
- 销毁状态
- Activity的生存期
- Activity类中定义了7个回调方法,覆盖了Activity生命周期的每一个环节
- onCreate()。这个方法你已经看到过很多次了,我们在每个Activity中都重写了这个方法,它会在Activity第一次被创建的时候调用。你应该在这个方法中完成Activity的初始化操作,比如加载布局、绑定事件等。
- onStart()。这个方法在Activity由不可见变为可见的时候调用。
- onResume()。这个方法在Activity准备好和用户进行交互的时候调用。此时的Activity一定位于返回栈的栈顶,并且处于运行状态。
- onPause()。这个方法在系统准备去启动或者恢复另一个Activity的时候调用。我们通常会在这个方法中将一些消耗CPU的资源释放掉,以及保存一些关键数据,但这个方法的执行速度一定要快,不然会影响到新的栈顶Activity的使用。
- onStop()。这个方法在Activity完全不可见的时候调用。它和onPause()方法的主要区别在于,如果启动的新Activity是一个对话框式的Activity,那么onPause()方法会得到执行,而onStop()方法并不会执行。
- onDestroy()。这个方法在Activity被销毁之前调用,之后Activity的状态将变为销毁状态。
- onRestart()。这个方法在Activity由停止状态变为运行状态之前调用,也就是Activity被重新启动了。
- Activity类中定义了7个回调方法,覆盖了Activity生命周期的每一个环节
- Activity的启动模式---启动模式一共有4种,分别是standard、singleTop、singleTask和singleInstance
- standard启动模式---在standard模式下,每当启动一个新的Activity,它就会在返回栈中入栈,并处于栈顶的位置。对于使用standard模式的Activity,系统不会在乎这个Activity是否已经在返回栈中存在,每次启动都会创建一个该Activity的新实例
- singleTop启动模式---当Activity的启动模式指定为singleTop,在启动Activity时如果发现返回栈的栈顶已经是该Activity,则认为可以直接使用它,不会再创建新的Activity实例
- singleTask启动模式---当Activity的启动模式指定为singleTask,每次启动该Activity时,系统首先会在返回栈中检查是否存在该Activity的实例,如果发现已经存在则直接使用该实例,并把在这个Activity之上的所有其他Activity统统出栈,如果没有发现就会创建一个新的Activity实例
- singleInstance启动模式---指定为singleInstance模式的Activity会启用一个新的返回栈来管理这个Activity
- Activity的最佳实践
- UI界面开发
- ConstraintLayout方式---Google官方更加推荐使用ConstraintLayout来开发程序界面
- 通过编写XML的方式来实现界面开发
- TextView控件
- EditText控件
- ImageView控件
- ProgressBar控件
- AlertDialog控件
- ListView控件
- Button控件
- 创建自定义控件
- 3种基本布局
- LinearLayout又称作线性布局---LinearLayout又称作线性布局,是一种非常常用的布局。正如它的名字所描述的一样,这个布局会将它所包含的控件在线性方向上依次排列
- RelativeLayout又称作相对布局--- RelativeLayout显得更加随意,它可以通过相对定位的方式让控件出现在布局的任何位置
- FrameLayout又称作帧布局---这种布局没有丰富的定位方式,所有的控件都会默认摆放在布局的左上角
- Android应用开发特色
[
Flutter 项目工程化---付费](https://www.kancloud.cn/tiaohuaren/luoxun) |
---|
- APP的开发途径
- 原生开发途径---使用Android or IOS 的原生资源
- Android
- IOS
- Progressive Web Apps(PWA)开发途径
- Blazor
- Native Script
- AngularJS
- React
- Ionic
- CrossPlatform Native开发途径
- microsoft
- Xamarin
- facebook
- React Native
- google
- Flutter
- Kotlin Native
- microsoft
- 原生开发途径---使用Android or IOS 的原生资源
Andriod Studio工具 | 软件框架搭建 | choose the best mobile framework |
---|
跨平台开发工具框架演变历史 |
---|
Android基础知识 | 用户界面 | 数据存储 | 消息机制与异步任务 | 事件机制 | 动画 | 图像处理 | 碎片 |
---|
安装 Genymotion及其破解版(转) | 7个最佳的Android模拟器 | 远程调试 Android 设备网页 |
---|
自定义控件 | JNI/NDK | Android与H5互调 | 第三方框架源码分析 | 多渠道打包 |
---|
OKHttp | JSON解析 | xUtils3 | Afinal | Volley | Butterknife |
---|
EventBus | ImageLoader | Picasso | RecyclerView | Glide | Fresco |
---|
Pulltorefresh | UniversalVideoView | JieCaoVideoPlayer | Banner | CountdownView秒杀 |
---|
OpenDanmaku弹幕 | TabLayout&ViewPager |
---|
- Choosing the best mobile app framework
- 尚硅谷】Android视频《硅谷商城[新]》
- 尚硅谷Android视频教程《Android项目_硅谷p2p金融-上》
- 尚硅谷Android视频教程《Android项目_硅谷p2p金融-下》
- 【尚硅谷】Android视频教程《手机影音_项目实战》
- 【尚硅谷】Android视频教程《硅谷社交_项目实战》
- 尚硅谷_硅谷商城项目实战
- 响应式图像教程
- Termux 入门教程:架设手机 Server 下载文件
- WebRTC开发者社区---为开发者提供最新最全的WebRTC资料
- Android中如何切换:开发/线上环境&更改app名
- 邓凡平
- 精致化页面重构
- Android完整知识体系路线(菜鸟-资深-大牛必进之路)
- 安卓入门到进阶推荐书籍整理
- 程序员一般喜欢浏览哪些网站呢?
- 大量 Material Design 学习资源
- Material Design 中文版
- Material Design 指南中文版
- 基于MaterialDesign设计风格的妹纸app的简单实现
- Android 开源框架 EventBus Android
- Android-Universal-Image-Loader
- Android/Java内存泄露检测框架 LeakCanary
- Android 图片加载和缓存库 Glide
- Android 图表库 MPAndroidChart
- Android 开发需要掌握的技术知识点全面总结
- 国内Android开发技术大牛推介
- Android 相机功能模块相关库
- 音视频开发进阶指南
- Android App架构, 技术选型,技术堆栈,工程架构分层设计,项目重构(!!!)
- 一个互联网app的开发设计(技术选型和架构)
- 史上最全App开发知识分享---如何从零开始成为app开发专家?
- 目前主流的app开发方式
- 安卓APP设计规范之1080*1920设计稿对应开发尺寸
- 移动端IM开发者必读(二):史上最全移动弱网络优化方法总结
- 移动端IM开发者必读(一):通俗易懂,理解移动网络的“弱”和“慢”
- 为什么说开发app商城用react native将会是未来主流
- Weex基于Android Studio从开发环境搭建到运行