SDK开发十大常见问题与解决方案是什么?

一个好的SDK应该具备易用性、稳定性、轻量、灵活的特点,而个推作为国内第三方推送市场的早期进入者,一直致力于为开发者提供高效稳定的推送SDK。

经过十年的深耕与创新,个推夯实了行业地位。截止2019年6月,个推SDK累计安装量超440亿,日活独立设备数达4.3 亿,并成功服务了人民日报、新华社、微博、马蜂窝、酷我音乐等一系列明星APP。辉煌数据的背后是强大的技术支撑。

这期文章,我们特地采访了个推Android 资深开发敬瑜,以个推推送SDK为例,来聊聊打造大型SDK的关键技术点。

作者 个推Android 资深开发 敬瑜

01 开发 SDK 和 开发APP 有什么联系?

APP 和 SDK两者关系密切,APP是SDK的主要载体, SDK 则是 APP开发所需的重要工具。从研发者的角度来看,SDK开发和 APP开发均属于 Android 顶层应用开发,并无本质区别,两者的目的均是要提供产品给客户使用;但从商业角度来讲,APP 是to C 的产品,用户是广大群众;而 SDK 则是to B 的产品,用户为广大开发者,两者在运营模式上有所不同。

02 SDK 开发最关键的点是什么?

SDK没有UI交互,用户使用 APP 时并不会感知到SDK 的存在。但是作为APP的重要部分,SDK的性能直接影响着APP的性能,也间接影响着用户在使用APP时的体验和感受。总结个推推送SDK的开发经验,我们认为SDK开发最需要注意的是其稳定性。

作为一款第三方 SDK,稳定性是第一要素,我们要保证推送SDK在不同环境下(APP、终端设备等)都能正常运行。要想保障稳定性,复杂环境的兼容是关键。减少使用非 SDK 接口也有助于提升稳定性。

除了稳定性外,以下几个问题对于打造优质SDK也很重要。

03 SDK 版本适配以及厂商兼容情况如何?

个推 SDK 支持 Android 端和 iOS 端,以下文章均使用 Android 端来举例。

截止目前,Android 系统从07年发布第一版至今,经历了多次迭代,Android Q为其最新版本。个推Android SDK 支持 Android 2.3及以上版本,几乎可以在市面上现存的所有Android 版本上运行。

** 1)版本适配**
APP 主要在手机上运行,若想 APP 在 Pad、电视之类的智能设备上运行,则基本需要单独适配,也就是说,APP 会根据其使用环境调试相应的版本。而 SDK 的运行环境相对复杂,我们根本不知道自己开发的 SDK 会在什么样的环境下运行,可能是手机、Pad、电视,也可能是车载设备,甚至是冰箱等智能家居设备。这类设备的 Android 系统版本从 2.3至10.0 不等。我们在开发SDK 的时候需要尽量地向下兼容。为此,个推推送 SDK 依旧保留着对 Android 2.3 系统的兼容。

** 2)厂商兼容**
一个成熟的 SDK 势必要保证在不同的厂商设备上正常运行,尤其是当SDK 内部涉及到Android 四大组件时需要特别注意厂商的兼容性,注意其是否会限制固定 action 的广播使用及限制固定类名 service 的启动。而如果 SDK 开发涉及到 Android framewrok 的引用,某些功能可能会失效。比如AndFix 的底层实现依托于 Art/Dalvik 虚拟机的架构,但是大部分厂商会对虚拟机进行定制,修改底层 ArtMethod 结构,这时,AndFix将无法在修改过虚拟机的设备上生效。

所以在 SDK 开发过程中我们要尽量避免Android Framework 的引用。个推在使用Android 四大组件的时候,会要求开发者提供自定义 Service,其Service 只需要继承个推默认的即可,这样可以保证 SDK 在不同厂商上均能正常运行。

04 怎么看待现在市面上的 SDK广泛支持多混合开发这一现象?

大前端开发是必然的趋势,现在新推出的产品会优先使用混合开发,保证一套代码可以在多个终端上运行。因此,一个成熟的 SDK 有必要对不同的语言框架进行适配。目前,个推 SDK 不仅支持 Android、iOS系统,还支持混合开发,如unity3d cocos2dx react-native flutter cordova apicloud等。具体见个推实验室

05 Android SDK 是否会使用开源项目?

不会使用。
有以下几点考虑:

  • 使用开源项目会增加包的体积;
  • 不能保证开源项目支持复杂的终端环境;
    -客户的 APP可能已使用开源项目,将导致编译失败;

06 如何适配海外市场环境?

开拓Google Play 市场是各大互联网公司的长远规划之一。个推Android SDK Google Play版本自发布以来,积极适配复杂的海外环境,为海外App消息的稳定下发提供强大的支撑和保障。为了有更好的用户体验,个推推送 SDK 还在国外众多地方布置了机房,以保证推送的到达率。另外,个推推送SDK还需要对 Google Play 制定的各种规则进行适配,以及还要考虑不同国家不同版本机型的适配问题。这要求我们在开发过程中尽量使用 Google 生产的手机进行调试与测试。

07 SDK 如何降低手机电量、流量的消耗?

为了给用户更好的使用体验,我们会尽可能地降低SDK对电量以及流量所造成的消耗。为此,我们不会使用蓝牙这类电量消耗较高的工具。此外,我们还会采用多链路合并技术来节约流量。

为了准确地了解所耗电量、流量的降低情况,我们还会做一个全面的测试。每次发版之前,我们都会采用严格的测试标准,使用特定的 APP 进行电量压测。为了尽可能地排除外来因素的干扰,保证测试的准确性,我们往往会使用集成了个推推送 SDK 的 APP来测量。常见测量 APP 的方式有Batterystats & bugreport和Battery Historian。具体细节可以自行查阅 PowerProfile.java 和 power_profile.xml 的使用与原理。

08 如何自主检测 SDK 的异常?

经过近 10 年的优化与升级,个推推送 SDK 的异常情况已经控制在一个非常非常低的水平,但因为 Android 市场碎片化非常严重,SDK 在如此碎片化的环境下运行难免会出现各种意想不到的突发情况,为此我们专门开发了SDK运行自查系统,类似于精简版的 bugly。该内部产品与 SDK 相辅相成,可以自主检测 SDK 的异常情况,并在发现异常后主动上报。其次,在代码层面,我们也做了一些防控,避免 SDK 因为异常而导致无法正常使用。另外,我们还成立了技术支持团队,服务广大的开发者,定期回访客户,帮助解决客户遇到的问题。

09 开发SDK还有什么是需要注意的么?

SDK开发过程中,我们还需要注意安全性。安全性不仅仅代表网络数据交互的安全、本地数据存储的安全,也涉及到 SDK 的加固、混淆、第三方安全软件审核。举例来说,个推 Android SDK 提供了四大组件的对接,SDK 内部会特别注意,避免这些组件被反序列化攻击。为了让开发者更加放心地使用我们的SDK,我们公司内部建立了严格的安全管理机制,来保障SDK的安全性。

10 对 SDK 开发者有何建议?

其实从 Android APP 诞生开始,SDK 的开发就从未中断过。SDK 开发者与 APP 开发者的工作内容基本相同,但是开发 SDK 更注重对 Java 语言以及 Android 底层的理解。如果大家想从事Android SDK 开发,建议多研究 Java 的相关知识,深入理解 ![在这里插入图片描述]( https://img-blog.csdnimg.cn/2020032523553787.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FuZHJvaWxseQ==,size_16,color_FFFFFF,t_70)Android framework 层。

开发SDK并不难,难的是如何让自己开发的 SDK 在复杂的环境下稳定运行。这需要我们对 SDK 的架构有一个比较清晰的认知,并对前文所提到的问题进行认真思考。

多年来,个推 SDK始终以服务开发者为己任,持续为用户提供优质的体验。为了进一步提升推送后台的保活能力,个推已发布 2.13.3.0版本,并对 Android Q 进行了适配,请前往个推文档中心下载 http://docs.getui.com/download.html ,即刻体验。

posted @ 2020-03-26 19:38  个推  阅读(3208)  评论(0)    收藏  举报