上周看到一篇非常让人焦虑的文章,叫”废掉一个人最隐蔽的方式,是让他忙到没时间成长”...真可怕,很多时候咱们这一行,忙是不可避免的,索性决定周末写篇文章,如何在繁忙的工作环境下,有一定高效的学习能力。

当然了我是不会写鸡汤的,倒不是我反对鸡汤文。

由于我的文采问题,很难写出一篇让人产生冲动的文章,所以我写的文章一般都是我个人践行的总结,而且细致到大家也可以去实践。

今天我这篇文章要写给很多上班强度比较大的同学,当然也包括我。我面试过一些同学,其中很多工作经历比我多,遇到过很多问题,面试者都以:

不好意思,这块没了解过,上班太忙,都在做业务,没那么多时间去学习...

作为同行,我是可以理解的;作为一名面试官,这样的回答听多了,难免会扣分的。

场景

很多时候,上班特别忙,好不容易闲下来一会,一般都是下午,高强度工作之后,回头来看一些自己没有了解过的技术文章,大概是这样的情况:

恩,这个文章不错,我没了解过,来学习一下...

看了十分钟,还有这么长,快速拉一下滚动条吧...

拉完了,好。

想一下,刚才文章写的是什么?

忘了...算了,再看一遍...

鉴于自己的懵逼状态,越看越懵逼,随着时间流逝,可能还是没能消化掉一点内容。

找文章也是一种技术活

下面我要以具体的实例,来描述了,主人公:帅气的小张。

小张今天上班早早来到公司,嗷嗷干活,中午还遇到一些问题,忙得午觉都没睡,一直忙到下午4点,终于喘了口气,看了眼时间,距离周会5点,还有一个小时,此时处于半懵逼状态,但是还是决定这一个小时学点东西。

于是打开wanandroid.com,看到首页有篇讲解Android P hidden API的文章,想了下,这个我好像没有了解过,于是准备这一个小时学一波这个。

点开这篇文章:

另一种绕过 Android P以上非公开API限制的办法

http://weishu.me/2019/03/16/another-free-reflection-above-android-p/

恩...看了一遍,感觉有点屌...

大致了解下,是一种绕开 hidden API限制的问题,除了感觉有点屌,就没其他收获了。

ok,此时正视一下自己,自己没有了解过Android P hidden API约束的文章,这篇文章明显不适合用来入门。

换个姿势,拿出纸,笔,这个时候,就不要相信你的大脑了,拿出纸笔,写上对Android P hidden API 要了解到什么程度?

Android P是如何限制hidden API的?

如何突破Android P的限制?

然后快速的利用搜索引擎,快速浏览,找到几篇合理的文章,这里小张搜索完成后,留下了3篇文章,分别为:

  1. 突破 Android P 非公开 API 限制

https://infoq.cn/article/2018/04/Android-P-API

  1. 另一种绕过 Android P以上非公开API限制的办法

http://weishu.me/2019/03/16/another-free-reflection-above-android-p/

3.理解Android P内部API的限制调用机制

http://gityuan.com/2019/01/26/hidden_api/

第一篇较为科普;第二篇在一定知识储备条件下,可以看到也是一种比较深入的探索;第三篇为纯原理佐证。

可以看到,并不是说看到一篇文章就一定适合你:

1. 发掘到一个未知的技术

2. 列出自己对于该技术了解程度的预期

3. 找到几篇由浅入深的文章

别忘了,我们的小张还处于懵逼状态,现在对于他来说,就是3个链接,加上本子上的:

  1. Android P是如何限制hidden API的?

  2. 如何突破Android P的限制?
    嗷嗷加班,如何保持学习能力~

小张的笔记本上

两行字

不要仅仅是阅读

现在要打开第一篇文章了,上来说了限制的原理,大概200多个字,好了,不要再继续往下看了,记住你现在处于懵逼状态,200多个字已经很难记住了。

总结和用自己的话梳理这200个字,这200个是说的是限制的原理,这里小张非常喜欢造问题:

自己造一些疑问,利用目前看到的原理的解释来回答。

如何限制访问hidden api的?

先想想我们是怎么调用的呢?-> 反射

那么就是限制反射?

那反射有哪些方式?->Java 层的,和JNI层的。

那就是限制Java 层的,和JNI层类似反射的调用。

怎么 check 呢,你得分析出来是系统调用还是开发者调用,这个方法是不是 hidden API吧?

  1. 如何区分用户和系统?

  2. 如何确定该方法是否是hidden API?

一连串在纸上写了一堆问题,并且利用已经读到的文字自问自答。

现在小张的纸上已经是这样了:

嗷嗷加班,如何保持学习能力~

如何限制的基本上搞清楚了。

继续往下看,下面的内容就是如何突破系统限制限制访问hidden API了。

说了三个方法,大致可以分为:

  1. 不用反射;

  2. 利用上文的怎么 check?把自己伪装成系统类;

  3. 利用上文的怎么 check?去掉字段上的hidden标识;

根据文章内容,完善我们在纸上的记录:

嗷嗷加班,如何保持学习能力~
ok,第一篇文章看完了。

虽然处于懵逼状态,但是利用我们记录和不断问自己的方式,加强我们的认知,有条理的将一篇文章梳理下来。

如果你是强忍着一定要用大脑不动手,去把这个篇文章消化了,很困难,利用纸笔就会快很多。

接下来,我们再看第二篇:

另一种绕过 Android P以上非公开API限制的办法

http://weishu.me/2019/03/16/another-free-reflection-above-android-p/

从标题就知道这是个突破的方式,看完也很好记录:

大致阅读完成文章,发现文章中提出了一种“元反射”的方式,利用系统方法去反射,非常精髓,也属于伪装成系统调用,记录下来。

嗷嗷加班,如何保持学习能力~
开心,又补充了一点知识,学到了。

最后第三篇:

理解Android P内部API的限制调用机制

http://gityuan.com/2019/01/26/hidden_api/

这篇是纯源码解析的,你可以看一些比较关键的地方,看看系统如何在源码层的调用流程,主要是用来 让已经记录下来的笔记 更加精确的...

最后,别忘了,你这些都在纸上,并不像文中的贴图。

好好看看自己纸上的内容,觉得差不多搞明白了,重新进行排版,然后记录到自己喜欢的笔记中去(电子):

我这里比较喜欢脑图,所以最终,就是这样的:

嗷嗷加班,如何保持学习能力~
微信限制看不清,如有需要:可以wanandroid.com上搜索 公众号配图

电子笔记的好处是,可以贴链接和截图,而且可以手机端,PC端同步,下班路上还可以拿出手机再巩固下,最主要是:可以一直扩展和纠错

千万不要忘了,贴上你这些知识主要是学了那几篇博客的参考。

有了这份笔记,正常情况下,和别人聊到Android P hidden API,你已经不吃亏了,你知道是系统是如何限制的,针对这些限制,你还可以列出1,2,3,分别如何突破...很稳。

根据自己的能力把握好了解的尺度

以上三篇文章,还有非常多的jni的代码,以及非常细节的处理方式。

这个时候有个疑问,我们一定要完全了解吗?

哪个方法一定要了解清楚吗?

不一定,根据自己对于知识的接受程度,比如说你不了解JNI,你就抛开JNI的代码,就一句话:这里利用JNI去修改XXX。

等你需要的时候我来查和验证好了。

但是对于Java的方式,你就要去跑一下代码,根据敲出来的代码,仔细推敲作者的描述,比如上文中的“元反射”就够你理解好一会了。

还有时候会有疑问,我们的知识都是来源于这些博客,假如他写的有错误怎么办?

有什么关系呢?你是一点不了解,人家都可以写博客了,肯定理解在你的前面,你先达到作者这个层次,以后看到其他文章,或者能力见长,或者需要实践的时候,发现有部分内容不准确,再完善你的笔记和记录就好了。

总结一下

在你注意力难以集中的时候,不要对于自己的大脑过于自信,不妨拿出纸笔,辅助自己的大脑,完成一个知识点的阅读。

即使你处于非常清晰的状态,读完一篇文章,脉络都在自己大脑中,其实你也该立刻梳理成一份笔记,记录下来。

一次的记录只是开始,说不定哪天你在鸿洋公众号又看到一篇类似的知识点,发现又补充了一些内容。你可以不断的改动以及优化这份记录。

最后

很多时候,有些事情是很难改变的,你感觉到忙,你因为一篇焦虑文章就要换工作,那么你下一份工作还忙怎么办?接着换么?

只有不断的调整自己去适应当下的环境,除非真的太过于压抑、压力...那时候保命要紧。

以上仅是我个人觉得在高强度工作之后的学习一个知识点的方法,文中的记录不一定严谨,也不一定适用于每个人。但是如果对一小部分人有所启发,有所帮助,何乐而不为呢。

以前的一些类似文章:

我平时学习的一个方法

就如何高效学习的一点建议

坚持写技术博客