就我目前来说,我还有很多东西不太会,不管是Android还是其他技术。对于Android来说,源码我还需要更深入地看下去,同时我还需要去进一步学习Linux shell脚本以及Linux的内部实现,这样可以进一步地理解Android的实现,IOS我也需要稍微了解下,这样能够扩宽我的知识面,毕竟IOS也属于移动开发,但是我不会发很多精力去研究IOS,事实证明,“什么都擅长就等于什么都不擅长”,一个人要成为全栈工程师真的非常非常难,而且国内的招聘很多不需要全栈工程师,而且所谓的全栈工程师很可能在面试中就被淘汰(由于深度不够的原因)。我还会学习一些编译环境的搭建,比如Gradle、Gerrit等。
按照这种规划去学习,我在Android就会达到一定深度并且有了Linux内核知识的支撑,然后了解IOS开发,同时还能搭建环境啥的,至于C、C++、Web开发之类的知识点,我在学校时就有初步的了解,这样一来,知识的广度和深度我都有,我认为应该是不错的规划。
当然,有些安卓代码为了避免被他人反编译,所以进行了代码混淆。因为很多不法分子盗版一款安卓应用就是从反编译开始。所以从移动应用安全角度讲,为了避免他人了解自己的安卓应用的布局和逻辑,的确应该做一些反编译的保护措施,尤其是避免被竞争对手看到。如果开发者不想被他人反编译,提高APK的安全性,可以使用爱加密进行加密保护。我也做过测试,使用爱加密后,原有的代码程序都被隐藏了,没法再看到源代码。
计划实现(如果你是小白)
Android的基本知识(1-6个月)
四大组件、Fragment、自定义控件、动画、组件之间的消息传递等等,这些都是基本知识也是开发过程中所必须掌握的,同时也是为今后的发展所打的基础,在这个基础上我们还要掌握组建的生命周期呀,activity启动模式的区别和场景应用、scheme跳转协议、 组件之间消息传递的机制、动画的种类和区别、属性动画的特点和作用等。
Android的技术难点(1年-3年)
AIDL、Binder、多进程、View的绘制流程、事件分发、消息队列等。这类知识对于定位自己为高级Android工程师的人来说是必须掌握的,同时他也是能鉴别高级和初中级工程师的一块试金石,其中binder是Android系统进程间通信最重要的手段之一,现阶段app的发展离不开多进程的运用,经常会启动例如定位、推送等需要在后台开启动的进程来来保证主进程的内存运行;所以合理的使用多进程也是十分必要的;
view的绘制是我们自定义控件的理论基础,只有掌握了view是如何绘制的才能个性化的自定义控件;事件分发一直是Android开发的难点之一,也是必须掌握的,后期我也会在博客上推出这个系列;关于handler机制也是android的一块难点,因为包括Asynctask、系统启动、Intentservice等底层都是通过handler来实现的,所以掌握后handler机制不仅能提高你的实战开发能力,更能让你系统的了解整个android系统运作的情况。
网络框架的理解(3-5年)
现如今Android的网络框架可谓纷繁杂乱,但不外乎这三类:网络请求框架、图片加载框架、事件处理框架、IOC框架,其中的代表分别是Retrofit/volley/Okhttp,fresco/glide/picasso,eventbus/rxjava,butterknife/dagger/dagger2,平时应该多看下这些的源码的设计理念,不仅可以纠正我们的一些代码漏洞,我们要知道这些成熟的开源框架在github上已经经过了无数次的检验,所以学习这些框架能快速提高我们的代码能力,毕竟在大家还没有转型前写代码的能力是我们工程师的根本。
Android系统的一些核心机制的运作
在Android源码中最重要的三个类:ActivityManagerService/PackageManagerService/View,推荐大家周末的时候可以去阅读下这部分的源码,阅读源码能提高我们今后设计架构自己代码的能力,同时也能从底层了解整个android系统的运行原理,其他一些比如主线程的消息循环、主线程如何和AMS如何跨进程交互、SystemServer进程中的各种Service的工作方式、AsyncTask的工作原理等。这些知识也是作为一个Android高级开发工程师必须掌握的,不能整天沉溺于ui和四大组件的交互,要站在更高的角度去考虑Android的有些问题。
android编译构建
构建编译打包是我们开发过程中的最后一环,但是也是最容易被很多人忽视的一个知识点,现在的大型app开发团队都有自己的自动化构建工具,比如常用的jenkins,在这个基础上大家要对一些常用的工具有深入的了解:比如git的使用和它的内部原理,gradle如何加快我们编译apk的时间以及它的一些基本语法,proguard的作用和混淆的内部原理,lint是如何来检测我们代码中的问题的和如何自定义lint配置等。
尾声
当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。
- 无论你现在水平怎么样一定要 持续学习 没有鸡汤,别人看起来的毫不费力,其实费了很大力,这四个字就是我的建议!!
- 我希望每一个努力生活的IT工程师,都会得到自己想要的,因为我们很辛苦,我们应得的。
无论你现在水平怎么样一定要 持续学习 没有鸡汤,别人看起来的毫不费力,其实费了很大力,没有人能随随便便成功。
这些年被很多人面试过,也面试过很多人。深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长,而且极易碰到天花板技术停滞不前!
而我也收集整理了几十套阿里 、字节跳动、腾讯、华为、美团等公司19年的面试题
把技术点整理成了PDF和思维脑图,包含知识脉络 + 诸多细节没有详细展开;
如何获得这份优质的资料呢?
如有需要获取资料文档的朋友,可以点击我的GitHub免费获取!