Android开发新技术又来了
一、Google官方一些新技术更新
Android12LBeta1发布
Android12系统已经发布了,陆续已经会有一批Android12的设备了
Android12功能和变更列表
https:developer。android。google。cnaboutversions12summary
12L为专为大屏幕设计的Android12功能更新。可以稍微了解下就行:
https:developer。android。comaboutversions1212L
Flutter2。8发布
距离上次更新,Flutter从2。52。8
Gradle与构建API
近期Gradle插件并没有什么更新,不过Android开发者账号发布了几篇Gradle与AGP构建API的相关教程,感兴趣可以学习下
其实对于Gradle,大家关注这个网站更新就行了:
https:developer。android。google。cnstudioreleasesgradleplugin
二、大厂对外文章分享
阿里技术
《Android项目架构设计深入浅出》
文章比我想象中内容要丰富很多,感觉不仅是工程架构,业务架构也有所涉及,从工程架构演进上:
单项目抽象基础库扩展核心能力模块化支撑跨端开发。
然后对整个架构每个核心层面做了比较细致的介绍和case展示,后面还会涉及到一些高频知识的原理进行了解析。
架构这一块,并没有一个非常统一的终点,甚至看上面的演进流程也不是一个一次性进化的过程,后面的阶段依旧要做好前一阶段的事情;以及在做选型时,充分考虑好为什么要做架构演进,是否真的遇到了一些瓶颈,通过推演能解决对应的问题,同时不要回避带来的问题。
百度App技术
《百度APP视频播放中的解码优化》
讲述了在兼顾首帧加载时长与整体解码性能上,如何灵活的选择硬件与软解。
搜狐产品技术
《Android与HEIF格式图片适配方法》
大家对于图片占用硬盘比较小的格式可能了解比较多的是webp,其实还有个heif格式慢慢开始流行了,现在部分设备已经支持拍摄heif格式的图片了。
如果所在的app并没有对heif做好支持,那么可能上传的heif格式图在低版本设备上无法正常显示。
大家可以通过这篇文章做下简单了解,对于在app内用heif图这件事,还是要做好充分测试,和一些灵活的调整(例如应用展示的是heif,但是用户下载时最好替他转成png,因为他的手机可能无法识别heif,或者他要将图片发送到的目标app不支持heif)。
快手大前端技术
《快手Android内存分配器优化探索(二)》
过于硬核,告辞。对于内存大家如果真想关注,在做好内存泄露的治理后,可以多关注虚拟内存占用。
淘系技术
《Java线程池面试要点》
这是个比较面试过程比较高频被问到问题了,一定要记得:
当线程数量达到corePoolSize,且workQueue队列塞满任务了之后,继续创建线程
但是这句话又不全对,例如corePoolSize0、workQueue无界队列,线程池能创建线程运行吗?
字节跳动终端技术
《Android插件化中资源错乱的解决方案》
对于插件化,大家如果了解比较多,因为插件可能要用宿主中的资源,但是插件和宿主是可以独立发布的,而宿主的资源id每引入一个资源就可能发生变化,那么如何保证插件中用到的宿主的资源id始终对应目标资源呢?
一般就是我们常说的资源固化机制了。
不过资源固化更多的是1个插件对应1个app,如果1个插件对应N个app,每个app资源都不同,很难保证固化规则保持一致,维护起来也比较麻烦,这篇文章还重点探索了免资源固定方案,非常值得一学!
《组件发布效率提升15倍是怎么做到的基于Gradle调度机制深度研究与优化》
大多数同学可能不会接触到组件发布,不过文章中对Gradle编译构建中的Task做了非常深入的分析,也让我们了解到我们平时收集到的Task执行时间并准确。
得物技术
《得物AppANR监控平台设计》
ANR算是各种指标比较难治理的一个了,这样就更依赖监控平台能够提供的信息了,可以通过得物这篇文章综合了解下,监控平台设计要考虑哪些因素。
京东技术
《Java内存模型(JavaMemoryModel,JMM)》
感觉写的挺好的。
vivo互联网技术
《字节码引用检测原理与实战》
主要解决,当业务组件都变成远程依赖之后,底层组件api变更,上层没有感知到,因为编译期间并不会报错,造成最终运行时出现MethodNotFound等相关问题。
探索了在编译期间,对每个类引用类,以及调用的方法做一下检测,确保用到的类和方法都能找到。
之前也做过类似的事情,不过三方库里面类似情况太多了,做好白名单机制。
三、综合来谈隐私合规治理
先看看大厂相关分享:
网易云音乐大前端团队
《Android隐私合规静态检查》
《Android隐私合规静态检查(二)》
这两篇文章说的还是比较清楚的,主要突出如何发现隐私合规问题,关注的是运行时、对产物进行扫描来发现调用隐私API的堆栈。
运行时:主要在编译期间提前对相关隐私API代码进行插桩,当然很多隐私API都是系统类相关API,注入代码不太可能,就考虑中转代理的方式(中转到我们定义的一个方法,执行完成自定义方法,再执行原来的调用),有点类似之前说的lancet的Insert和Proxy模式
产物扫描:说了一个演进流程比较有意思,最开始是apkdexclassjava然后进行扫描,后续改为apkdexsmali进行扫描,确实smali因为是文本结构很适合做类似静态分析的工作。
文章提到的分析smali来还原调用栈,让我眼前一亮。
京东零售技术
《ASM在隐私合规扫描中的应用实战》
京东这个主要在讲如何在编译期间修改字节码了,有点偏Transform教程。
其实我个人也做了比较长时间的隐私合规治理,简单做一些分享,隐私合规主要就是两点:隐私相关API,在用户授权之前,不可以调用;即使用户授权了,调用频率不能过高,一般现在厂商都有App行为记录;Android隐私相关权限相关不能随便使用,如果使用,需要明确给出解释;
大概说下我们做了哪些事:
产物扫描:一般打完包,都会做产物包的隐私合规扫描,可以基于smali去分析,不过说实话,扫描的结果意义不是太大,一般数量比较多,很多都是三方SDK内部调用,并不清楚调用时机以及频率,因为并不是完全不可以用,所以一般仅针对新增做下简单的review。
运行时:和网易云分享的一样,字节码修改是必要的,因为没有办法保证所有相关api都能做运行时hook,但是字节码hook都是可以的,将相关API的调用,都中转到我们自定义的方法,在这个方法内部判断:
a。当前用户是否已经用意?未同意,直接崩溃
b。调用频率分析用于分析后续合理性,频率不正常,告警
然后再调用原方法(对于字节码hook感觉比较困难,也可以尝试epic去做运行时hook,唯一注意就是做好代码隔离,别带上线了)。
合码:既然产物扫描增量的review意义最大,于是我们在合码阶段也简单做一下分析,发现有新增的隐私API调用会触发更严格的审核。
权限变更:打包期间我们还会做一次权限整体检测,防止同学不注意引入隐私相关API,如果发现新增权限为危险权限,会立即告警:新增了哪个权限,哪个库引入等(合码阶段如果有构建流程,也可以放合码流程)。
另外对于一些厂商的用户行为记录,尝试不会告诉你明确的规则,只能去单点分析了,先确定哪些方法会触发行为记录,大多数都是基于AppOps或者是系统服务API调用,确认API后,可以通过字节码hook或者运行时hook(大多数系统服务都可以被动态代理替换)。
治理:
1。未同意前不能调用,这个没的说。
2。降低频率一般3个思路:减少调用;缓存结果;部分API可以修改为回调的方式;
当然上面的描述,都是思路,实践起来可能还有困难
四、字节开源基于Systrace高性能Trace工具
https:github。combytedancebtrace
简单来说,就是比Systrace用起来简单、性能好、稳定性高,结合bhook支持一些扩展特性。最后
在这里还分享一份由大佬亲自收录整理的学习PDF架构视频面试文档源码笔记,高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料
这些都是我现在闲暇时还会反复翻阅的精品资料。里面对近几年的大厂面试高频知识点都有详细的讲解。相信可以有效地帮助大家掌握知识、理解原理,帮助大家在未来取得一份不错的答卷。
当然,你也可以拿去查漏补缺,提升自身的竞争力。
真心希望可以帮助到大家,Android路漫漫,共勉!
如果你有需要的话,只需私信我【进阶】即可获取