Android开发新技术又来了
Posted River_ly
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android开发新技术又来了相关的知识,希望对你有一定的参考价值。
一、Google官方一些新技术更新
Android 12L Beta1 发布
android 12系统已经发布了,陆续已经会有一批Android 12的设备了
Android 12 功能和变更列表
https://developer.android.google.cn/about/versions/12/summary
12L 为专为大屏幕设计的 Android 12 功能更新。可以稍微了解下就行:
https://developer.android.com/about/versions/12/12L
Flutter 2.8 发布
距离上次更新,Flutter 从 2.5->2.8
Gradle 与构建 API
近期 Gradle 插件并没有什么更新,不过 Android 开发者账号发布了几篇 「Gradle 与 AGP 构建 API」的相关教程,感兴趣可以学习下
其实对于 Gradle,大家关注这个网站更新就行了:
https://developer.android.google.cn/studio/releases/gradle-plugin
二、大厂对外文章分享
阿里技术
《Android项目架构设计深入浅出》
文章比我想象中内容要丰富很多,感觉不仅是工程架构,业务架构也有所涉及,从工程架构演进上:
单项目->抽象基础库->扩展核心能力->模块化->支撑跨端开发。
然后对整个架构每个核心层面做了比较细致的介绍和 case 展示,后面还会涉及到一些高频知识的原理进行了解析。
架构这一块,并没有一个非常统一的终点,甚至看上面的演进流程也不是一个一次性进化的过程,后面的阶段依旧要做好前一阶段的事情;以及在做选型时,充分考虑好为什么要做架构演进,是否真的遇到了一些瓶颈,通过推演能解决对应的问题,同时不要回避带来的问题。
百度 App 技术
《百度APP视频播放中的解码优化》
讲述了在兼顾首帧加载时长与整体解码性能上,如何灵活的选择硬件与软解。
搜狐产品技术
《Android与HEIF格式图片适配方法》
大家对于图片占用硬盘比较小的格式可能了解比较多的是 webp,其实还有个 heif 格式慢慢开始流行了,现在部分设备已经支持拍摄heif格式的图片了。
如果所在的 app 并没有对 heif 做好支持,那么可能上传的 heif 格式图在低版本设备上无法正常显示。
大家可以通过这篇文章做下简单了解,对于在 app 内用 heif 图这件事,还是要做好充分测试,和一些灵活的调整(例如应用展示的是 heif,但是用户下载时最好替他转成 png,因为他的手机可能无法识别 heif,或者他要将图片发送到的目标 app 不支持 heif)。
快手大前端技术
《快手 Android 内存分配器优化探索 (二)》
过于硬核,告辞。对于内存大家如果真想关注,在做好内存泄露的治理后,可以多关注虚拟内存占用。
淘系技术
《Java线程池面试要点》
这是个比较面试过程比较高频被问到问题了,一定要记得:
「当线程数量达到corePoolSize,且workQueue队列塞满任务了之后,继续创建线程」
但是这句话又不全对,例如 corePoolSize = 0、workQueue无界队列,线程池能创建线程运行吗?
字节跳动终端技术
《Android插件化中资源错乱的解决方案》
对于插件化,大家如果了解比较多,因为插件可能要用宿主中的资源,但是插件和宿主是可以独立发布的,而宿主的资源id 每引入一个资源就可能发生变化,那么如何保证插件中用到的宿主的资源 id 始终对应目标资源呢?
一般就是我们常说的资源固化机制了。
不过资源固化更多的是 1 个插件对应 1 个 app,如果 1 个插件对应 N 个 app,每个 app 资源都不同,很难保证固化规则保持一致,维护起来也比较麻烦,这篇文章还重点探索了「免资源固定方案」,非常值得一学!
《组件发布效率提升15倍是怎么做到的——基于Gradle调度机制深度研究与优化》
大多数同学可能不会接触到组件发布,不过文章中对 Gradle编译构建中的Task做了非常深入的分析,也让我们了解到「我们平时收集到的 Task 执行时间并䘺准确」。
得物技术
《得物App ANR监控平台设计》
ANR 算是各种指标比较难治理的一个了,这样就更依赖监控平台能够提供的信息了,可以通过得物这篇文章综合了解下,监控平台设计要考虑哪些因素。
京东技术
《Java内存模型(Java Memory Model,JMM)》
感觉写的挺好的。
vivo 互联网技术
《字节码引用检测原理与实战》
主要解决,当业务组件都变成远程依赖之后,底层组件 api 变更,上层没有感知到,因为编译期间并不会报错,造成最终运行时出现Method Not Found等相关问题。
探索了在编译期间,对每个类引用类,以及调用的方法做一下检测,确保用到的类和方法都能找到。
之前也做过类似的事情,不过三方库里面类似情况太多了,做好白名单机制。
三、综合来谈隐私合规治理
先看看大厂相关分享:
网易云音乐大前端团队
《Android 隐私合规静态检查》
《Android 隐私合规静态检查(二)》
这两篇文章说的还是比较清楚的,主要突出如何发现隐私合规问题,关注的是运行时、对产物进行扫描来发现调用隐私 API 的堆栈。
**运行时:**主要在编译期间提前对相关隐私 API 代码进行插桩,当然很多隐私 API 都是系统类相关 API,注入代码不太可能,就考虑中转代理的方式(中转到我们定义的一个方法,执行完成自定义方法,再执行原来的调用),有点类似之前说的 lancet 的 Insert 和 Proxy 模式
**产物扫描:**说了一个演进流程比较有意思,最开始是 apk->dex->class->java 然后进行扫描,后续改为 apk->dex->smali进行扫描,确实 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(大多数系统服务都可以被动态代理替换)。
治理:
-
未同意前不能调用,这个没的说。
-
降低频率一般 3 个思路:减少调用;缓存结果;部分 API 可以修改为回调的方式;
当然上面的描述,都是思路,实践起来可能还有困难
四、字节开源基于 Systrace 高性能 Trace 工具
https://github.com/bytedance/btrace/
简单来说,就是比 Systrace 用起来简单、性能好、稳定性高,结合 bhook 支持一些扩展特性。
最后
前段时间还收集整理了Android高工必备技能知识脑图和核心知识点笔记文档!既能够夯实底层原理核心技术点,又能够掌握普通开发者,难以触及的架构设计方法论。那你在工作中、团队里、面试时,也就拥有了同行难以复制的核心竞争力。
相关的一些知识点解析都已经做了收录整理上传至公号中:Android开发之家,大家可以自行访问查阅。
以上是关于Android开发新技术又来了的主要内容,如果未能解决你的问题,请参考以下文章
适配又来了,Android 12 十项新特性,紧跟潮流拥抱未来
新鲜出炉!苹果2017开发者大会中文字幕完整版:苹果新品又来了,你最想要哪一款?