浅谈Android SDK开发

   日期:2020-07-18     浏览:100    评论:0    
核心提示:概述最近接到一个需求,把现在开发的app,包装成一个SDK,对外提供接口,让第三方应用集成我们app的能力。简单描述一下项目的现状,一个壳工程module:app_shell,项目主要代码在app module,其它还有简称为:lib1,lib2,lib3,lib4,lib5,五个module,其中,app依赖lib1-lib5,lib1-lib5部分相互之间也有依赖。前前后后投入来大概五个工作日的时间,勉强实现封装app及其依赖的模块为一个aar。为什么要这么久?难道不是改app的build.grad

目录

  • 浅谈Android SDK开发
    • SDK开发的原则
    • SDK设计
      • 功能与职责边界设计
      • 接口设计
      • 兼容性设计
      • 发布输出设计
      • SDK文档设计
    • SDK项目架构
      • 组件化、模块化
      • 统一资源管理
      • 第三方依赖管理
      • 代码混淆
      • 多模块打包为一个aar
    • 参考列表

浅谈Android SDK开发

最近接到一个需求:把我们已经上线的app,封装一下,对外提供一个SDK,让第三方应用拥有我们app的能力,同时尽量不改变目前的构建发布流程。领导发话,那就开干吧,就按要求,在现有代码基础上做最小的改动封装一个SDK。我们的源码分为几个module,包括五个公共的module,一个业务的app module,还有一个壳module。app依赖于五个公共module,五个module之间也有一些依赖关系。封装SDK我经过了以下几个步骤:

  1. 解耦自定义的BaseApplication,封装组件初始化流程,提供SDK初始化入口;
  2. 封装功能入口,并设计对外提供的接口;
  3. 把多个module的代码打包进一个aar;
  4. 混淆配置;
  5. 编写demo;
  6. 编写sdk接入文档

前后用了大概5个工作日,初步实现了sdk,成功输出aar包,demo源码,接入文档。后面等客户和领导沟通再做进一步的开发和优化工作。趁这段时间,总结一下SDK开发的流程和经验。第一次做SDK的需求,总结的不好,望多指教。接下来我将从以下三个大方面简单聊一聊SDK开发:

  1. SDK开发的原则;
  2. SDK设计
  3. SDK项目架构

SDK开发的原则

SDK面向的是开发者,开发的SDK可能会被很多第三方app调用,所以SDK的关注点在于:可靠性,稳定性,易用性,兼容性,安全性。所以开发SDK要时刻谨记以下原则:

  1. 避免SDK导致的crash;
  2. 集成SDK尽可能简单,能一行代码接入就不要两行;
  3. 封闭实现,暴露接口尽可能少;
  4. 新旧版本接口兼容,记录每一个版本的修改记录;
  5. 包体积尽可能少,不做多余的事,不依赖多余的包,不打包多余的资源;
  6. 尽可能多兼容Android版本,如最低支持到5.0,甚至4.4;

SDK设计

在了解来SDK开发的一些原则之后,接下来聊聊SDK的设计。

功能与职责边界设计

首先,要明确需求,开发这个SDK对外提供什么能力?在需求列表范围外的事,尽可能不要去关注。举个栗子,现在要设计一个拍照的SDK,那么我只管拍照就好,不要把相册也写了。功能与职责边界设计就是要我们明确SDK的初衷,专注于SDK的用户体验,实现一个稳定、健壮的SDK,不做多余的事情。

接口设计

开发者调用SDK的能力,是通过我们开放的接口来实现调用。所以,接口就是SDK开发的中心,所有工作都是围绕接口开展。设计接口时,我们要谨记SDK的初衷,明确SDK的功能和边界,并且要适当考虑后序可能的扩展。所以接口设计应该:

  1. 使用门面模式减少接口的数量
  2. 暴露方法越少越好
  3. 充分考虑每个接口参数的必要性及其返回值,明确每个参数和返回值的意义,并通过设计合适参数实现未来的扩展
  4. 新老版本设计,新版本应该兼容旧版本,而不是直接删除覆盖。

兼容性设计

因为SDK是提供给别人开发app用的,所以,只能让SDK去兼容别人的app,所以我们要尽可能低的兼容Android版本,如最低适配到5.0,甚至4.4,同时要在新系统更新后尽快的升级支持。如果使用来jni,还要考虑不同的cpu架构,提供armeabi-v7a,armeabi-v8a等的支持。兼容性设计考虑的内容如下:

  1. compileSdkVersion
  2. buildToolsVersion
  3. minSdkVersion
  4. targetSdkVersion
  5. sourceCompatibility
  6. ndk

发布输出设计

设计,编码,完成SDK开发后,接下来就是发布SDK,SDK发布有多种方式:

  1. 源文件发布
  2. aar文件发布
  3. maven仓库发布

直接发布源码,一般只有公司内部才可能使用,如果是对外发布的,最起码需要打包为aar放到官网上让别人下载。如果可以发布到开放的maven仓库,那是最好的,免除来别人下载aar,同时可以通过脚本自动发布。

SDK文档设计

因为SDK是给别人调用的,别人可能不知道怎么集成SDK,如何调用SDK的接口。所以,SDK必须提供详细的文档。文档的内容应该包括:

  1. SDK基本信息:最低兼容版本,java版本,so适配的cup架构等;
  2. 如何集成SDK,按照步骤,能成功集成SDK;
  3. 第三方依赖信息:okhttp,retrofit等;
  4. 混淆配置;
  5. 每个接口方法的文档介绍;
  6. demo代码和apk。

SDK项目架构

我们项目是先开发完成了,然后才提需求打包成SDK给别人用的。那么我们是不是可以反过来想,在项目开始的时候,我们就核心功能封装为SDK,然后围绕SDK开发我们的app呢?根据个人经验,完全可以这么做!特别是定制化需求较多的项目,如果项目开始之初就考虑到要先设计SDK,做好解耦的工作,那么后面定制化的需求将会很舒服。SDK项目架构,首先要考虑组件化模块化,从底层的能力基础组件,到上层的业务模块,可以提供不同维度的接口,封装不同层次的SDK。然后是一些细节的考虑,如统一资源管理,统一各个module的string,color,drawable,layout,xml,style等资源的命名规则,如加上module名称前缀。最后就是第三方依赖管理,和代码混淆的配置,以及打包多个module。

组件化、模块化

组件化、模块化的目的是解耦,从基础组件到业务组件,把各个功能独立封装起来,可以按需提供不同维度的接口。

统一资源管理

为什么要统一资源管理?防止打包时报资源冲突!

第三方依赖管理

  1. 尽量不依赖第三方;
  2. support支持包版本管理(建议使用compileOnly)
  3. 依赖的第三方不要打包进sdk(compileOnly),而是在文档中说明,让用户去添加依赖,避免冲突;

代码混淆

  1. activity、fragment、service等组件不能混淆;
  2. 用于序列化的bean不能混淆;
  3. 第三方依赖不能混淆(在接入时,先配置好混淆规则);
  4. SDK提供的接口不能混淆;
  5. 其它能混淆就混淆;

多模块打包为一个aar

当我们的住模块如:mainLib依赖lib1,lib2,lib3…或者其它aar时,打包mainLib不会把lib1,lib2,lib3…的代码打包进去!而google也没有一个方案可以打包多个module!不过有人已经实现来一套方案,可以把多个module和第三方aar包打包成一个aar,亲测有效,最后附上该项目的地址:
fat-aar-android

参考列表

Android SDK开发技术分享
【Android SDK 开发】sdk开发项目心得
Android SDK 开发纪要
Android SDK开发艺术探索系列(一)开篇与概设brucevanfdm

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服