作者简介:德胜 现任阿里视频云团队资深开发工程师,多年移动端音视频经验,现在从事业务架构设计、客户技术支持等相关工作。
越来越多的开发者选择使用SDK来辅助开发,作为一种工具,它可以帮助你快速建立应用软件,而省去了编写硬件代码和基础代码架构的过程。我们团队一直致力于移动视频领域SDK的开发,踩过坑趟过河,遇到了很多问题也总结了一些经验,下面是我们总结的一个好的SDK应该具备的特质:
易用性,稳定性,轻量,灵活,优秀的支持.
因为工作的关系我接触了很多的开发者,其中有行业知名的公司的开发者,也有极小的个人开发者.有一个现象很有意思,不管是能力较强的开发者还是能力一般的开发者,他们都会不停的对你的SDK吐槽.因为他们对于好用的标准是不一样的,所以你必须要将你的SDK易用性考虑到极致,不然后续的技术支持将是一个十分痛苦的事情.
尽量多的默认参数,这里面有一些小的技巧,以下我提一个小的例子,比如我们的SDK,我们有一个跳转录制的接口,事实上就是将一堆的参数给到下一个SDK页面,让SDK接收参数,我们选择给一个结构体暴露给用户,如下:
AliyunVideoParam recordParam = new AliyunVideoParam.Builder()
.setResulutionMode(resolutionMode) //设置录制分辨率,目前支持360p,480p,540p,720p
.setRatioMode(ratioMode) //设置视频比例,目前支持1:1,3:4,9:16
.setRecordMode(RecorderDemo.RECORD_MODE_AUTO) //设置录制模式,目前支持按录,点录和混合模式
.setFilterList(eff_dirs) //设置滤镜地址列表
.setBeautyLevel(80) //设置美颜度
.setBeautyStatus(true) //设置美颜开关
.setCameraType(CameraType.FRONT) //设置前后置摄像头
.setFlashType(FlashType.ON) // 设置闪光灯模式
.setNeedClip(true) //设置是否需要支持片段录制
.setMaxDuration(max) //设置最大录制时长
.setMinDuration(min) //设置最小录制时长
.setVideQuality(videoQuality) //设置视频质量
.setGop(gop) //设置关键帧间隔
.build();
AliyunVideoRecorder.startRecordForResult(this,REQUEST_RECORD,recordParam);
这样有什么好处呢,我们事实上可以预制N个参数。这样用户调用一个录制功能只需要做什么呢?,如下:
AliyunVideoParam recordParam = new AliyunVideoParam.Builder().build();
AliyunVideoRecorder.startRecordForResult(this,REQUEST_RECORD,recordParam);
如何保证一个SDK的稳定性?自动化测试、适配测试、API的稳定、代码审查、内存检测、可测试性都缺一不可.
- 自动化测试:依赖系统的自动化测试工具就可以完成人工绝大多数的自动化UI测试.能够解放黑盒测试的双手,这个时候如果有使用Jenkins之类的持续集成的系统,你还能够让你的开发者及时的能够发现问题、解决问题。
- 适配测试:一个安卓永远的痛,现在基本没有很多好的方法,只有去找一些规律找机器适配,但是做多了就会发现还是有规律可循的,比如GPU的型号,系统版本,使用的硬件差异,甚至品牌.早期我们也是按CPU,GPU型号去买机器的.
- API的稳定: 一个好的SDK设计的API应该从一开始就需要考虑扩展性,尽量多的考虑将来可能的需求,尽量将这些需求包进来.我见过很多开发者懊恼如果让我再设计一次一定能够将这个接口设计的更好一些 :)
- 代码审查:一个好的团队在代码质量上会下很大的功夫,所以不让代码审查沦为形式是一个好leader应该考虑的事情.大团队会做一些交叉review,开启git的pull request,写单元测试等都是不错的方式
现如今手机App的大小直接决定用户买单不买单(16G的iPhone哭晕在厕所),在我接触客户中发现越是大公司越在乎对App的大小增加,因为他们的应用已经非常庞大了,像微信,手淘,支付宝这样的大体量他们都对大小有着极其严苛的态度,产品和技术团队会直接评估大小增加对用户的影响.所以你的SDK是否轻量直接决定用户是不是选择你的SDK.那如何做到轻量?
灵活包括几个点:API灵活可扩展,API的可测试性,API的健壮性性要强. 要做到以上任何一点都需要经验的支持,绝对不要想当然,尽量的从开发者的角度去设计,会让自己收获很多.
如果以上四点你已经做得非常好了,这个时候你的文档和技术支持直接就决定用户是否选择你的SDK.也直接决定用户对你的评级.所以好的支持就非常重要了.你需要建立开发者社区,apple文档,javadoc,readme.甚至集成文档,示例教程.
- 给对外暴露的代码尽可能多的注释,最好是相关联的说明使用示例,比如你的这个接口跟另外一个接口是配套使用的.
- 需要有demo代码,demo代码应该尽可能的简单.让使用的人可以遵循你的代码进行尝试.一定一定不要让你的示例代码写的过于复杂.不要在无关紧要的交互模式上纠结.不然没有用户会花大量的时间去学习你的示例代码.而且他们还会有很多疑问,或者bug. (解决方案除外)
- 如果有些接口需要废弃,你应该添加废弃的注解
- 一定要有一个更新list.清晰的版本更新日志.要相信不是所有的开发者会选择最新版本的,你需要保证你的每一个版本都是稳定可用的.
- 作为一个SDK,你的功能一定不能是自己臆想出来的.你应该常常跟开发者交流,了解用户的需求。每个功能都需要有客户反馈作为依据.
以上几个点肯定不是建设一个伟大的库的全部.只是我们在开发短视频SDK的时候的一些思考.如果觉得有一定意义, 欢迎交流.:)
SDK交流钉钉群号:11759425
原文来自:阿里云
声明:所有来源为“聚合数据”的内容信息,未经本网许可,不得转载!如对内容有异议或投诉,请与我们联系。邮箱:marketing@think-land.com
支持识别各类商场、超市及药店的购物小票,包括店名、单号、总金额、消费时间、明细商品名称、单价、数量、金额等信息,可用于商品售卖信息统计、购物中心用户积分兑换及企业内部报销等场景
涉农贷款地址识别,支持对私和对公两种方式。输入地址的行政区划越完整,识别准确度越高。
根据给定的手机号、姓名、身份证、人像图片核验是否一致
通过企业关键词查询企业涉讼详情,如裁判文书、开庭公告、执行公告、失信公告、案件流程等等。
IP反查域名是通过IP查询相关联的域名信息的功能,它提供IP地址历史上绑定过的域名信息。