Android sdk开发基础

一:概述

最近涉及到Android SDK的相关开发,所以就从网上找了很多资料进行了解。APP 更倾向于用户体验、功能更偏于特定业务、讲究的是快速迭代、快速占领市场。而 SDK 是为 APP 服务的,提供的大多是公共基础服务,如网络请求、打点统计、帐号服务等。

SDK

Software Development Kit的缩写,译为”软件开发工具包”,通常是为辅助开发某类软件而编写的特定软件包,框架集合等,SDK一般包含相关文档,范例和工具.

SDK可以分为系统SDK和应用SDK.所谓的系统SDK是为特定的软件包,软件框架,硬件平台,操作系统等简历应用时所使用的开发工具集合.而应用SDK则是基于系统SDK开发的独立于具体业务而具有特定功能的集合.

比如在进行Android 应用开发时,我们使用Google提供的系统SDK(Android SDK),而我们经常使用的友盟SDK,极光SDK则是基于系统SDK开发的.

Library

Library即我们所说的库,通常是一组或者几组类的集合,通常是应用中某些功能的具体实现或者对系统已有功能的增强或补充.对Android开发者而言,最常见的莫过于是Support Library,另外就是我们经常使用各种网络请求库(OkHttp,Volley),数据库操作,图片加载库(Glide,ImageLoader)等.

什么是Framework

Framework即我们所说的框架,通常是系统或者应用的骨架,很多时候,它表现为一组抽象的构建及构件实例间交互的方法.因此,可以认为,Framework规定了应用的体系结构,阐明了整体设计,写作构件之间的依赖关系以及控制流程

什么是API

API是Application Programming Interface,又称为应用编程接口,是软件系统不同组成部分衔接的约定。更加通俗的说就API就是我们常见和编写的方法或函数.

 

二:SDK开发基础要求

体积:

小而精。小是指包的体积要尽可能的小,精就是 SDK 的功能了,一定要专注于特定功能,舍弃那些自以为是的需求。

  1. 去除无用资源(主要是图片和 so 库)和代码;
  2. 不要依赖第三方库,至少大体积的库是不可以的,可以考虑移植开源代码(只需移植关键代码,有必要的话根据 SDK 特性做适当修改);
  3. 优化代码结构,去除冗余的代码逻辑(考虑各种设计模式和分包策略);
  4. 打包混淆优化;

功能:

  1. SDK 讲究功能专一;
  2. 基本功能完善,适用于所有的业务线;
  3. 根据业务方的需求反馈,考虑优化或者丰富 SDK 功能;

兼容性

SDK 的兼容性主要考虑几个方面:

  1. 对外接口( API )的兼容性:每次版本更新后,对外接口要尽可能保持不变。对于更改较大的接口,可以使用 @Deprecated 注解对老接口进行标记,并且做新接口调用的兼容,而不是直接删除老接口;
  2. 功能的兼容性:在不影响整体功能和项目结构的基础上提供部分业务的需求定制化,可以形成配置项;
  3. SDK 支持的 Android 版本的兼容性:minSdkVersion 的值应该尽可能的小,当然现在市场上基本都是 4.4 以上的手机了。这也从侧面要求不要随便依赖第三方库。

稳定性

SDK 极其注重稳定性,要保证在不同 APP 环境下都能正常工作。

  1. 版本迭代要稳定:一般版本号都采用 x.y.z 模式,对于小功能或者是小的修复,增加 z 值即可,不能影响已经上线的服务。
  2. 对于大版本的改动,增加 y 值甚至 x 值后,需要让 PM 告知业务方下次发版时使用最新版本的 SDK
  3. SDK 上线前必须经过完整的测试流程,保证功能正确、性能达到要求、对不同机型进行适配、对不同 Android 版本进行适配。业务方接入后,可以让业务方也走一遍测试,提供反馈报告。
  4. SDK 的结构设计应该要有好的扩展性,比如接入一个新功能,就不能影响整体的代码框架,否则可能造成一些潜在的威胁,也会增加测试的工作量。

安全性

不光是 APP 需要一些安全措施,SDK 也是有必要保证安全性的。

  1. SDK 混淆、加固、安全审核,这个一般是公司级别的安全管控。针对安全报告做对应修复即可。
  2. 隐私数据的保护,必须进行加密或者掩码处理。比如:本地保存用户的登录态,手机号的掩码显示等。
  3. 网络请求时的数据加密保护,部门一般都有自己的加密机制,大部分都是模仿 ssl 握手协议,采用非对称加密和对称加密结合的方式。更严格的话,可以增加自定义证书校验,不过这个成本较高。
  4. 对于 SDK 中接入的部分第三方功能或者服务需要提供云控机制。因为第三方服务存在不稳定性和弱安全性。

文档规范

  1. SDK 的最终形态中一定要包含接入文档和演示 Demo 。虽然大部分业务方都不看文档,但一定要写。至于演示 Demo ,一定要考虑尽可能多的场景,把 SDK 的功能都展示出来。
  2. 文档要尽可能详细,但最好不要把所有内容都集中在一个文档里面,这样导致文档过长,业务方更加反感阅读。可以对文档做细划,
  3. 最好能有个 Web 页面的服务平台(类似开放平台),业务方可以直接在平台上进行应用的注册、管理、文档阅读等。服务平台也可以做一些数据统计的可视化,方便 SDK 的后续发展。

 

三:SDK基本开发流程

1.创建一个主project,用于SDK开发测试,新建一个module用于SDK的编写:

2.如果module要引入dependencies,利用compileOnly方式:

关于引用jar的方式:

implementation:它就会自动把这个包下载下来,并且引用它。节省git空间,而且修改版本也很方便。
implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation 'androidx.appcompat:appcompat:1.1.0'

compileOnly:仅仅在编译时使用,但最终不会被编译到apk或aar里

compileOnly files("libs/okhttp-4.2.0.jar")

3.引入project测试

观察app的build.gradle:

接下来在MainActivity中使用此Sdk中提供的功能:

import com.example.notificationlib.notifyAct;


btn_enter_notifyAct.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, notifyAct.class);
                startActivity(intent);
            }
        });

 

以下是我Github地址,关于Sdk的学习都会在Github与大家共享:https://github.com/ban-z/SdkLearn

至此完成了对于Android Sdk基本知识以及开发流程的学习,接下来就可以投入实战,更好的学习Sdk开发,希望与大家共勉

 


版权声明:本文为qq_40834350原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。