学习福利
【Android 详细知识点思维脑图(技能树)】
其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。
虽然 Android 没有前几年火热了,已经过去了会四大组件就能找到高薪职位的时代了。这只能说明 Android 中级以下的岗位饱和了,现在高级工程师还是比较缺少的,很多高级职位给的薪资真的特别高(钱多也不一定能找到合适的),所以努力让自己成为高级工程师才是最重要的。
这里附上上述的面试题相关的几十套字节跳动,京东,小米,腾讯、头条、阿里、美团等公司19年的面试题。把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。
由于篇幅有限,这里以图片的形式给大家展示一小部分。
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
coreKtxVersion : “1.2.0”,
supportLibraryVersion : “28.0.0”,
androidTestVersion : “3.0.1”,
junitVersion : “4.12”,
glideVersion : “4.11.0”,
okhttpVersion : “3.11.0”,
retrofitVersion : “2.3.0”,
constraintLayoutVersion: “1.1.3”,
gsonVersion : “2.7”,
rxjavaVersion : “2.2.2”,
rxandroidVersion : “2.1.0”,
…省略…
]
dependencies = [
//base
“constraintLayout” : “androidx.constraintlayout:constraintlayout:${version[“constraintLayoutVersion”]}”,
“appcompat” : “androidx.appcompat:appcompat:${version[“appcompatVersion”]}”,
“coreKtx” : “androidx.core:core-ktx:${version[“coreKtxVersion”]}”,
“material” : “com.google.android.material:material:1.2.1”,
//multidex
“multidex” : “com.android.support:multidex:${version[“multidexVersion”]}”,
//okhttp
“okhttp” : “com.squareup.okhttp3:okhttp:${version[“okhttpVersion”]}”,
“logging-interceptor” : “com.squareup.okhttp3:logging-interceptor:${version[“okhttpVersion”]}”,
//retrofit
“retrofit” : “com.squareup.retrofit2:retrofit:${version[“retrofitVersion”]}”,
“converter-gson” : “com.squareup.retrofit2:converter-gson:${version[“retrofitVersion”]}”,
“adapter-rxjava2” : “com.squareup.retrofit2:adapter-rxjava2:${version[“retrofitVersion”]}”,
“converter-scalars” : “com.squareup.retrofit2:converter-scalars:${version[“retrofitVersion”]}”,
…省略…
]
}
依赖写完之后,在root路径下的build.gradle
添加apply from: "config.gradle"
然后在需要依赖的module下的build.gradle中
dependencies {
…
// Retrofit + okhttp 相关的依赖包
api rootProject.ext.dependencies[“retrofit”]
…
}
以上就是Groovy ext扩展函数的依赖管理方式,此方式可以做到版本依赖,但是最大的缺点就是无法跟踪代码,想要找到上面示例代码中的rootProject.ext.dependencies["retrofit"]
这个依赖,需要手动切到config.gradle去搜索查找,可读性很差。
buildSrc的方式,是最近几年特别流行的版本依赖管理方式。它有以下几个优点:
-
支持双向跟踪
-
buildSrc是Android默认插件,全局只有这一个地方可以修改
-
支持Android Studio的代码补全,以下演示示例图来自于网络
使用方式可参考:Kotlin + buildSrc for Better Gradle Dependency Management
缺点:buildSrc 依赖更新将重新构建整个项目,项目越大,重新构建的时间就越长,造成不必要的时间浪费。
Composing builds:A composite build is simply a build that includes other builds. In many ways a composite build is similar to a Gradle multi-project build, except that instead of including single projects, complete builds are included.(Composing builds只是包含其他构建的构建。 在许多方面,复合构建类似于Gradle多项目构建,不同之处在于,它包括完整的构建,而不是包括单个项目。)
使用这种方式的优点有:
1.支持单向跟踪
2.自动补全
3.依赖更新时,不会重新构建整个项目
使用方式
1.新建module,名为VersionPlugin(自起)
2.在新建的module下的build.gradle文件中,添加如下代码:
buildscript {
repositories {
jcenter()
}
dependencies {
// 因为使用的 Kotlin 需要需要添加 Kotlin 插件
classpath “org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.10”
}
}
apply plugin: ‘kotlin’
apply plugin: ‘java-gradle-plugin’
repositories {
// 需要添加 jcenter 否则会提示找不到 gradlePlugin
jcenter()
google()
}
dependencies {
implementation gradleApi()
implementation “org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.10”
}
compileKotlin {
kotlinOptions {
jvmTarget = “1.8”
}
}
compileTestKotlin {
kotlinOptions {
jvmTarget = “1.8”
}
}
gradlePlugin {
plugins {
version {
// 在 app 模块需要通过 id 引用这个插件
id = ‘com.controler.versionplugin’
// 实现这个插件的类的路径
implementationClass = ‘com.controler.versionplugin.VersionPlugin’
}
}
}
3.在 VersionPlugin/src/main/java/包名/
目录下新建 DependencyManager.kt 文件,添加你的依赖配置,如:
package com.controler.versionplugin
/**
- 配置和 build相关的
*/
object BuildVersion {
const val compileSdkVersion = 29
const val buildToolsVersion = “29.0.2”
const val minSdkVersion = 17
const val targetSdkVersion = 26
const val versionCode = 102
const val versionName = “1.0.2”
}
/**
- 项目相关配置
*/
object BuildConfig {
//AndroidX
最后说一下我的学习路线
其实很简单就下面这张图,含概了Android所有需要学的知识点,一共8大板块:
- 架构师筑基必备技能
- Android框架体系架构(高级UI+FrameWork源码)
- 360°Androidapp全方位性能调优
- 设计思想解读开源框架
- NDK模块开发
- 移动架构师专题项目实战环节
- 移动架构师不可不学习微信小程序
- 混合开发的flutter
Android学习的资料
我呢,把上面八大板块的分支都系统的做了一份学习系统的资料和视频,大概就下面这些,我就不全部写出来了,不然太长了影响大家的阅读。
330页PDF Android学习核心笔记(内含上面8大板块)
Android学习的系统对应视频
总结
我希望通过我自己的学习方法来帮助大家去提升技术:
-
1、多看书、看源码和做项目,平时多种总结
-
2、不能停留在一些基本api的使用上,应该往更深层次的方向去研究,比如activity、view的内部运行机制,比如Android内存优化,比如aidl,比如JNI等,并不仅仅停留在会用,而要通过阅读源码,理解其实现原理
-
3、同时对架构是有一定要求的,架构是抽象的,但是设计模式是具体的,所以一定要加强下设计模式的学习
-
4、android的方向也很多,高级UI,移动架构师,数据结构与算法和音视频FFMpeg解码,如果你对其中一项比较感兴趣,就大胆的进阶吧!
希望大家多多点赞,转发,评论加关注,你们的支持就是我继续下去的动力!加油!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
式是具体的,所以一定要加强下设计模式的学习
- 4、android的方向也很多,高级UI,移动架构师,数据结构与算法和音视频FFMpeg解码,如果你对其中一项比较感兴趣,就大胆的进阶吧!
希望大家多多点赞,转发,评论加关注,你们的支持就是我继续下去的动力!加油!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!