最近在工作中负责统一支付平台的SDK开发部分,就此总结下SDK开发的技术点、注意事项、与普通app开发的差别,作为自我总结,也作为公司内部互相学习的分享,希望有Android开发需求或者对Android有兴趣的同学(互相学习称为同学),多多关注,多多回复。
一、SDK开发的概念
Android SDK开发,指为第三方app开发提供功能性封装,提供文档(doc),实例(demo),封装包(jar/aar)等,目前互联网公司提供了许多功能性SDK接入,比如腾讯的QQ登录微信登录、广点通联盟、QQ地图接入,阿里的支付宝支付,百度的百度墙广告等等。
图1 发布包
二、jar包和aar包
SDK开发目标是为了提供开发包给第三方app的开发者,常见情况下,提供jar包或者aar包。jar包可以包括代码、资源文件(包括图片、xml文件、动态链接库等,需要二次打包),jar由于不能直接引用xml页面布局,难以实现界面布局,必须用java实现所有界面,实现起来麻烦,一个简单的界面要写很多的代码,维护起来也比较麻烦,但是通过aapt编译xml页面布局,使其成为另外一种Android的布局系统更容易解析的一种格式(Compiled xml),在代码中通过反射使用XmlPullParser,inflate出xml中的布局,也可以得到页面。aar包可以包括许多资源(代码、资源文件、配置文件等等,既包含class又包含了res资源下的所有内容),使用常用的app开发方式进行开发,自动会把所有的资源文件、配置文件(甚至是app整体配置文件AndroidManifest.xml)全部引入aar包中,不需要开发人员进行其他工作,相对jar,aar的使用方便许多,但是由于许多开发者依然使用的IDE是Eclipse,在aar接入方面不便,jar接入使用依然较多,在google推荐的IDE Android Studio中,aar的打包和接入就十分方便。
图2 jar包的引入
图3 aar包的引入
三、sdk开发的原则
sdk编写的原则,可以总结为几点:
1.内容封闭,只开放少数接口,最大程度减少sdk接入方需要了解的细节。
2.包尽可能小,尽可能压缩图片和动态链接库
3.统一接口调用方式,比如:ComPayPlatform.init(context,key); ComPayPlatform.pay(context,key,listener);
四、aar包开发
AS(Android Studio)中Module以库的形式使用,编译后自动生成aar文件,文件包括了Module库的所有有用内容(AndroidMenifest.xml,res文件夹中的所有资源文件,libs中引用的jar和.so的动态链接库,java代码等)。Module可以依次依赖,Module1引用Module2,Module2引用Module3,但是Module1无法直接使用Module3中的内容,Module也可以进行平行依赖,Module1即引用了Module2,也引用了Module3,在sdk开发中也需要注意,尽快不要使用Module依赖,多Module无法打包为一个aar,也要避免依次依赖造成的可能bug。
sdk开发中res文件夹中,资源和id的前缀问题。sdk开发中,res文件夹中的所有资源(图片名,xml视图名,values文件夹下的定义属性名等)建议都加上前缀(比如我加上公司的前缀 bs_***.png),是因为作为aar包被其他app引用后,资源名使用时可能与原程序冲突,原程序名为back.png的图片与sdk中back.png的图片冲突造成bug.
图4 前缀
sdk结果的出口,一般使用一个接口,在接口的回调函数返回结果。
/**
 * @author 张新锦
 */
public interface OnPayResultListener {
public void OnSuccess(String platFormNo);
public void OnFail();
}
ComPayPlatform.pay(MainActivity.this"001"fixPlatFormNo"1000001""00101""222222",
"测试111", 0.01, getCurrentTimeFormatyyyyMMdd(), getCurrentTimeFormathhmmss(), "remark1""",
new OnPayResultListener() {
@Override
public void OnSuccess(String platFormNo) {
textView.append("支付成功 , 返回数据: platformNo :"+platFormNo+"\n");
}
@Override
public void OnFail() {
textView.append("支付失败\n");
}
});
五、发布前的工作
5.1     sdk的代码混淆
sdk代码混淆与app不同的地方,除了普通app的混淆机制外,sdk特别注意开放接口和内部引用包的不混淆。
5.2     sdk包内容的发布
编写sdk代码、并且测试通过后,sdk开发的工作才进行一半,另外一半的工作在写出demo程序和接入文档。sdk的最终目的是为了其他开发者接入,不止在编码是注意接入的代码要简洁、明了,更要在接入文档中详细写出方法、参数的意义,最好直接在文档中给出事例。文档最好也写清楚开发环境要求,jdk要求和引用aar文件的详解。demo程序也十分重要,demo程序简洁,注释详细,使用sdk接口的代码进行详细注释,让接入sdk的开发人员明白每段代码的含义。
图5 文档

Android SDK开发技术分享相关推荐

  1. 【Android SDK 开发】Android SDK开发技术分享

    原文地址:https://blog.csdn.net/zhangxinjin/article/details/51602577 最近在工作中负责统一支付平台的SDK开发部分,就此总结下SDK开发的技术 ...

  2. 浅谈Android SDK开发

    目录 浅谈Android SDK开发 SDK开发的原则 SDK设计 功能与职责边界设计 接口设计 兼容性设计 发布输出设计 SDK文档设计 SDK项目架构 组件化.模块化 统一资源管理 第三方依赖管理 ...

  3. Android App 开发技术图谱

    Android App 开发技术图谱 转载请注明出处:www.leoyanblog.com 本文出自 LeoYan 的博客 本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 LeoYa ...

  4. 实际开发的存储过程_实际生产中的 Android SDK开发总结| 完结

    本文作者 作者:brucevanfdm 链接: https://zhuanlan.zhihu.com/p/163899902 本文由作者授权发布. 上一篇我们介绍了 SDK 开发的: 开篇与设计 Ex ...

  5. Android网络开发技术实战详解

    <Android网络开发技术实战详解> 基本信息 作者: 朱桂英 丛书名: Android移动开发技术丛书 出版社:电子工业出版社 ISBN:9787121173493 上架时间:2012 ...

  6. Android多媒体开发技术

    周末参加了线下安卓巴士论坛组织的"安卓开发者的修炼之道",几位嘉宾分享的内容都很赞.没时间整理文字版,直接分享嘉宾的PPT了. 第二位嘉宾何俊林,前爱奇艺多媒体开发,据说活动现场很 ...

  7. Google Android SDK开发范例大全(第2版)

    内容简介 <Google Android SDK开发范例大全(第2版)>在上一版的基础上,以Android手机应用程序开发(采用AndroidSDK2.1)为主题,通过160多个范例全面且 ...

  8. Android SDK开发4之心得体会

    目录 一. 前言 二.SDK分类 1.SDK简介 2.SDK 分类 三.SDK 设计 1 .核心原则 2.SDK 设计原则 3.接口易用性 4.命名规范要统一 5.跨端接口尽量保持一致 6.尽量不依赖 ...

  9. Android好书推荐:《Google Android SDK开发范例》

    http://www.jizhuomi.com/android/book/51.html <Google Android SDK开发范例大全(第3版)>采用范例集的形式,由浅入深地带领Go ...

最新文章

  1. 通过OKR 进行项目过程管理
  2. RCC—使用 HSE/HIS 配置时钟
  3. 关于 \8 为56问题解答
  4. 迪拜的经济支柱是什么?
  5. linux 双机直连设置
  6. 技术问答集锦(17)JVM垃圾回收
  7. java微信小程序解密AES/CBC/PKCS7Padding
  8. python subprocess 非阻塞_python中subprocess.PIPE上的非阻塞读取
  9. c语言课后题答案83,C语言练习试题和答案
  10. SPSS24.0输了授权码还不能用怎么破?
  11. Office | Office365 离线安装包选择安装word、ppt、excel
  12. oracle sql 正则表达式
  13. 物联网(lot)特定场景最佳实践
  14. 做跨境如何去降低成本?
  15. 纠正英语语法错误---Grammarly安装
  16. Flyme 6将于30日公测 魅蓝Note5有望率先尝鲜
  17. 清华NLP组论文清单:全方位覆盖自然语言处理12大领域
  18. 轻松解决 “Error creating bean with name 'indentDao' defined in file”的错误(一)
  19. 电脑计算机u盘启动不了桌面图标,开机桌面图标不显示怎么办【解决方法】
  20. pythonocc安装_PythonOCC开发-如何搭建开发环境和一个创建圆台例子

热门文章

  1. 3DMax坐标系转换为Unity坐标系
  2. Spring+Quartz定时任务调度
  3. java urlencoder_Java中的URLEncoder和URLDecoder类
  4. 【开发教程6】AI语音人脸识别(会议记录仪/人脸打卡机)-串口
  5. vue前端弹出新增页面testAdd,弹出页面中进行数据编辑,table编辑,行编辑等。包含JS中使用Map进行数据处理。
  6. Golang开发工具
  7. FFmpeg5.0源码阅读——av_interleaved_write_frame
  8. 冯.诺依曼计算机硬件部分是由五大功能部件组成,计算机硬件由哪五大功能部件组成,每一个部件的作用是什么?...
  9. 使用UltraEdit比较文件的异同
  10. Intel® Xeon® Scalable Processors(前称 Skylake-SP)技术概观