阿里巴巴移动技术

其他

Swift 首次调试断点慢的问题解法 | 优酷 Swift 实践

(fastest).2use-swift-clangimporterSwift调试时是否重新构建所依赖的module,默认值为true。use-swift-clangimporter
其他

大量模块壳工程本地如何快速编译?优酷 iOS 工程插件化实践

随着优酷业务的快速发展,随之而来的是模块数量的爆发式增长,基本每年以大量新增模块的速度增加,到目前为止优酷已经有非常庞大的模块依赖。模块之间通信往往是相互直接依赖调用,以至于耦合十分严重且混乱,每一个库依赖都是一颗“树”,甚至于一张“网”,对日常研发造成很多困扰:插件化落地结果iOS模块插件化已经全面在优酷落地,沉淀出各业务线的轻量工程,大量的业务及架构插件,后续可根据不同业务需求,自由组装插件工程。以下是目前插件化工程落地后的一些收益:直接收益业务插件工程编译效率提升
2022年4月11日
其他

向工程腐化开炮 | 治理思路全解

辅助分析能力辅助分析能力,主要是站在apk完整构建角度,为开发同学提供模块及其依赖信息,用于解决各种日常问题,例如:“我更新了一个模块的版本号,为什么apk中的代码还是旧的?”
2022年3月14日
其他

向工程腐化开炮|动态链接库so治理

so加载过程分析接下来,我们看看一个so的基本加载过程,是什么样的。so加载过程分析当我们在代码中调用System.loadLibrary方法,加载一个so时,首先是在Java
其他

向工程腐化开炮|资源治理

[layout:layout_use_declare_styleable1:2131099652]attr:attr_integer:2130837505
2022年2月28日
其他

向工程腐化开炮:Java代码治理

com.ali.sty.ridentity:rpsdk:4.8.5这项检测能力,同样提供了选项,当检测结果不通过时,终止构建过程,用于形成卡口。优酷于21年7月上线对应卡口,至今未出现新增。2.4
2022年2月21日
其他

向工程腐化开炮 | manifest治理

工程腐化是app迭代过程中,一个非常棘手的问题,涉及到广泛而细碎的具体细节,对研发效能&体验、工程&产物质量、稳定性、包大小、性能,都有相对“隐蔽”而间接的影响。一般不会造成不可承受的障碍,却时常蹦出来导致“阵痛”,有点像蛀牙或智齿,到了一定程度不拔不行,但不同的是,工程的腐化很难通过一次性“拔除”来根治,任何一次“拔除”之后,需要有效的可持续治理方案,形成常态化的防腐体系。工程腐化拆解来看,是组成app的代码工程中,工程结构本身,以及各类“元素”(manifest、代码、资源、so、配置)的腐化。优酷架构团队近年来,持续在进行思考、实践与治理,并沉淀了一些技术、工具、方案。现逐一分类汇总,辅以相关领域知识讲解,整理成为《向工程腐化开炮》系列技术文章,分享给大家。希望更多同学,一起加入到与工程腐化的这场持久战中。系列文章第一篇《向工程腐化开炮
2022年2月14日
其他

向工程腐化开炮 | proguard治理

工程腐化是app迭代过程中,一个非常棘手的问题,涉及到广泛而细碎的具体细节,对研发效能&体验、工程&产物质量、稳定性、包大小、性能,都有相对“隐蔽”而间接的影响。一般不会造成不可承受的障碍,却时常蹦出来导致“阵痛”,有点像蛀牙或智齿,到了一定程度不拔不行,但不同的是,工程的腐化很难通过一次性“拔除”来根治,任何一次“拔除”之后,需要有效的可持续治理方案,形成常态化的防腐体系。工程腐化拆解来看,是组成app的代码工程中,工程结构本身,以及各类“元素”(manifest、代码、资源、so、配置)的腐化。优酷架构团队近年来,持续在进行思考、实践与治理,并沉淀了一些技术、工具、方案。现逐一分类汇总,辅以相关领域知识讲解,整理成为《向工程腐化开炮》系列技术文章,分享给大家。希望更多同学,一起加入到与工程腐化的这场持久战中。本文为系列文章首篇,将聚焦于java代码proguard,这一细分领域。对工程腐化,直接开炮!在Android(java)开发领域,一般提到“代码proguard”,是指利用Proguard工具对java代码进行裁剪、优化、混淆处理,从而实现无用代码删除(tree-shaking)、代码逻辑优化、符号(类、变量、方法)混淆。proguard处理过程,对apk构建耗时、产物可控性(运行时稳定性)、包大小、性能,都有重要影响。很多时候开发者会用“混淆”来代指整个Proguard处理,虽然不准确,但结合语境来理解,只要不产生歧义,也无伤大雅。值得注意的是,google官方已经在近几年的Android
其他

Swift 在手淘商品评价的技术重构与实践

系统库本身就采用了很多不需要引用计数的基础类型,无论是内存分配大小、引用计数损耗、方法派发静态分析等方面的问题都得到了一个有效的提升。具体细节这里就不展开分析,感兴趣的可以移步
其他

优酷播放黑科技 | 基于WebRTC实现的直播"云多视角"技术解析

推荐标准。WebRTC默认使用UDP协议(实际上使用的是RTP/RTCP协议)进行音视频数据的传输,但是也可以通过TCP传输。目前主要应用于视频会议和连麦中。WebRTC内部结构Voice
2021年12月6日
其他

SIGCOMM 首篇 Multi-path QUIC 论文:阿里自研多路径传输技术XLINK

过去的多路径协议和调度算法在高速变化的场景下会发生明显的失速现象。在XLINK之前,多路径传输在音视频方面迟迟无法得到施展,学术界也为此奋斗了很多年,大家提出了很多基于MPTCP的优化方案,
2021年12月3日
其他

优酷播放黑科技 | 自由视角技术体验优化实践

“本文为《优酷播放黑科技》系列文章第一篇《自由视角技术体验优化实践》,之后我们会陆续上线《基于WebRTC实现的直播"云多视角"技术解析》《自由视角技术的全链路策略与落地实践》,欢迎点击左上角【阿里巴巴移动技术】关注我们,点关注不迷路
2021年11月29日
自由知乎 自由微博
其他

客户端稳定性异常检测:函数接口“扫雷”实践

背景在过去的财年中,支付宝客户端高可用团队持续保障着支付宝客户端线上的高可用稳定性,但只有线上的应急快反能力是不够的,还需要线下提前发现客户端的稳定性风险建设风险挖掘能力,完善整体的客户端高可用保障体系。通过总结过去1-2年的线上闪退问题可以发现其中NPE问题,RPC数据类型不匹配和config变更导致的闪退问题占比较大,完全可以在线下通过一定机制提前发现。基于此我们对影响稳定性的因素进行分类,按照优先级构建了客户端的稳定性“扫雷”体系,主要包括函数接口扫雷,rpc&config&jsapi扫雷,scheme&广播&通知扫雷,lottie&antmation&鸟巢模板变更扫雷等,通过这套扫雷能力建设我们希望可以完全避免线上出现以上稳定性故障,同时以issue的形式推动研发优化代码,不断提高客户端稳定性,从事前的角度去完善客户端高可用保障体系。技术方案根据经验分析在客户端的函数调用中由于对函数参数检查不够导致的各类闪退问题占比在20%左右。现阶段方案Android端针对public和private的static静态接口,iOS端针对所有public接口进行Fuzz测试,通过对安装包扫描获取到全量的接口函数信息,然后对函数入参Fuzz制造各类异常场景,测试客户端的稳定性。与传统的代码静态扫描相比,本方案在真实客户端上执行,贴近真实场景可制造真实的异常数据。整个技术实现方案包括以下几点:代码扫描给出详细接口文件客户端无侵入实现批量接口反射执行能力参数Fuzz异常构造能力自动化测试用例控制真机执行用例和客户端异常恢复issue上报分析处理1代码函数扫描基于开源框架https://github.com/androguard/androguard提供的apk扫描能力,可对某个支付宝版本apk生成全量的函数接口文件,目前Android和IOS端均可扫出大量函数接口数据进行测试。2客户端函数执行模块使用支付宝动态bundle能力,可在不侵入支付宝客户端的情况下进行函数接口稳定性测试,测试过程分为以下几个阶段:扫描执行方式由于全量的接口执行耗时过长,目前支持版本差异执行,通过计算大版本接口差异进行测试,可快速得到版本间差异接口的稳定性数据,同时支持特定bundle代码扫描,可针对某个业务方的代码执行扫描检测,将函数接口稳定性检测能力输出到业务方。参数fuzz异常构造参数异常构造是一个非常专业的课题,目前已经有大量基于机器学习的方案去构造异常数据覆盖更多代码逻辑,目前只是按照经验和业务语义构造了一组异常测试集,通过排列组合去遍历函数代码,目前1个接口根据参数个数可变异5-10个函数调用。从代码覆盖率结果看可以穿透60%接口的逻辑。被测函数调用被测函数调用过程主要解决的问题是执行效率,数据记录和断点续跑,执行效率依靠接口分组和多线程执行解决,函数执行过程严格分离保证结果可靠性。在接口扫雷测试过程中会出现大量的闪退和ANR卡死情况导致测试停止,为了自动完成整个测试过程,需要详细记录测试过程数据,捕获闪退时的关键数据保存并输出到客户端存储空间,为断点续跑提供关键数据。闪退数据回放执行完的测试用例有效保存到本地,程序支持直接回放异常用例验证代码修复后效果。3自动化脚本执行自动化脚本的目的是唤起客户端执行测试用例,并且能够检测到客户端的异常情况,拉取测试数据确定断点位置,重新拉起客户端执行,保证整个测试流程可以完全自动化的执行无需人工干预。总结与展望支付宝客户端函数接口扫雷已经执行10多个大版本,双端累计发现近千条有效问题,并且在工具的迭代中持续降低问题误报率,提高Fuzz变异能力覆盖更多风险问题。同时函数接口扫雷的问题已经加入到客户端攻防演练中,作为真实闪退场景去攻击业务方。目前函数接口扫雷还有很多不完善的地方,像参数fuzz的智能变异构造,业务语义参数构造等还有待提高。未来还会继续补充客户端稳定性检测能力,力争将问题都在发版前解决。关注我们,每周
2021年11月5日
其他

积跬步至千里:QUIC 协议在蚂蚁集团落地之综述

在多进程编程模型上存在诸多挑战,典型的像无损升级等。为了设计一套完备的框架,我们在落地前充分考虑了服务端在云上部署上的方便性、扩展性、以及性能问题,设计了如下的落地框架以支撑不同的落地场景:
2021年11月3日
其他

优酷鸿蒙开发实践|多屏互动开发实践

优酷与华为长期保持着良好的战略合作关系,旨在为消费者带来优质的影音娱乐体验。鸿蒙操作系统的流转特性为多屏互动带来了全新的玩法,本文以优酷播放中心的技术储备为切入点,结合鸿蒙系统的镜像和流转特性,详细介绍了普通流转、自由视角和zoom
2021年10月27日
其他

阿里亿级长连网关的云原生演进之路

动态编排能力不足:随着接入业务的增多,所支持的业务场景扩宽,业务对路由策略的灵活性、实时性要求越来越高,静态配置不论生效的实时性还是策略灵活性都难以满足业务发展需求,需要支持路由策略的动态编排能力;
2021年10月25日
其他

优酷鸿蒙开发实践|优酷 Android 与HarmonyOS Hap 混合打包

在《优酷鸿蒙开发实践|鸿蒙卡片开发》一文中已经提到,要实现“在优酷主客ICON向上滑动,呼出优酷鸿蒙卡片”,需要卡片的实现代码与优酷主客做混合打包。下面的小节简单介绍了如何实现Android/鸿蒙混合打包的流程。当前,将大型Android应用(下图图1)全部使用鸿蒙API改写是不现实的,所以华为设计了上述的演进路线。希望将App中的功能由Android模块逐步替换为鸿蒙FA/PA,
2021年10月20日
其他

优酷鸿蒙开发实践 | 鸿蒙卡片开发

Ability)。FA/PA是应用的基本组成单元,能够实现特定的业务功能。FA有UI界面,而PA无UI界面。每种类型为开发者提供了不同的模板,以便实现不同的业务功能。鸿蒙OS的应用软件包以APP
2021年10月13日
其他

【ANR】Android SIGQUIT(3) 信号拦截与处理

sigwait使用了串行的方式处理信号的到来,为避免信号的处理存在滞后,或是非实时信号被丢失的情况,处理每个信号的代码应尽量简洁、快速,避免调用会产生阻塞的库函数。注:Android的“Signal
2021年10月11日
其他

5G NR 网络类型移动开发小记

group中针对NETWORK_TYPE_NR在网络类型分类接口中的未适配给Google提了issue。Android-10的中间版本针对这个问题修复适配上了:
2021年10月8日
其他

1688 商家基于 HarmonyOS 的多屏协同直播技术方案

直播互动在多设备上迁移流转主要三个功能:直播实时数据迁移大屏;主播、协播互动迁移大屏;主播中台控制操作大屏。2技术方案主播端App改造原有Android项目,增加HarmonyOS
2021年9月29日
其他

Alibaba iOS 工程架构腐化治理实践

Modules”规范,不允许循环依赖、外部依赖要显示声明、头文件引用要采用尖括号,否则就会出现“could
2021年9月17日
其他

Cube 技术解读 | 支付宝新一代动态化技术架构与选型综述

https://github.com/bytecodealliance/wasm-micro-runtime
2021年9月13日
其他

淘宝客户端诊断体系升级实战

淘宝作为一个航母级的应用,每天都有数亿的用户在使用。保证客户端的稳定性是我们的首要目标。为此,我们也提出了5-15-60的目标。即问题告警时,5分钟响应,15分钟定位,60分钟恢复。但是现有的排查体系并不能很好的达到这个目标,分析下来主要原因是:监控阶段通过Crash堆栈、异常信息进行聚合统计,不够精细准确,不够灵敏;监控到异常后,端侧行为比较单一,只上报异常信息,无法提供更多有用数据;手淘大部分问题都和线上变更有关,但是缺少对变更质量的监控。排查阶段监控上报的异常信息不足,依赖日志进行问题排查;Crash或异常时不会主动上传日志,需要手动捞取,
2021年9月10日
其他

渲染引擎分析 - 鸿蒙(OpenHarmony) JS UI 源码阅读笔记

框架的架构图[7]:这套架构主体分为应用、框架、引擎以及跨平台适配这几部分,应用层就是透出给开发者的语法,有好几种模式,下文详解。框架层实现了前端框架常见的组件化、MVVM