原文地址:https://blog.csdn.net/zhangxinjin/article/details/51602577

最近在工作中负责统一支付平台的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 开发】Android SDK开发技术分享相关推荐

  1. android 人脸识别边框_【技术分享】虹软人脸识别 - Android Camera实时人脸追踪画框适配...

    在使用虹软人脸识别Android SDK的过程中 ,预览时一般都需要绘制人脸框,但是和PC平台相机应用不同,在Android平台相机进行应用开发还需要考虑前后置相机切换.设备横竖屏切换等情况,因此在人 ...

  2. 《ArcGIS Runtime SDK for Android开发笔记》——离在线一体化技术:概述

    1.前言 数据生产和数据展示是常见的两大专业级移动GIS应用场景,这里我们针对数据生产环节的ArcGIS的离在线一体化技术给大家做一个基本的介绍和梳理. 使用ArcGIS离在线一体化技术首先需要以下基 ...

  3. 《ArcGIS Runtime SDK for Android开发笔记》——离在线一体化技术:离线矢量数据同步...

    1.前言 上一篇文章中我们实现了离线要素的编辑操作,这一篇中主要介绍离在线一体化技术中最后一个环节离线数据的同步功能,通过对数据的上传,服务器端的版本化管理,实现数据生产管理的整个流程. 转载请注明出 ...

  4. 《ArcGIS Runtime SDK for Android开发笔记》——离在线一体化技术:离线矢量数据编辑...

    1.前言 在上一篇我们已经实现了离线地理数据库的下载,这一篇我们着重介绍离线数据库的加载与编辑. 由于ArcGIS Runtime SDK for Android 10.2.X版本并没提供要素绘制功能 ...

  5. 《ArcGIS Runtime SDK for Android开发笔记》——离在线一体化技术:离线矢量数据下载...

    1.前言 1.1.环境准备: ArcGIS for Desktop 10.4.1(10.2.1以上版本即可) ArcGIS for Server 10.4.1 (10.2.1以上版本即可) Postg ...

  6. 如何使用Android SDK开发Android应用?

    这是一个根源性问题,Android作为一个还是新兴的平台因为有Google罩着体现出强大的优势,加上现在的Java已经被手机商控制住了咽喉,所以相对而言,Sun对Java的控制力非常之弱,所以学Jav ...

  7. 《ArcGIS Runtime SDK for Android开发笔记》——(7)、示例代码arcgis-runtime-samples-android的使用...

    1.前言 学习ArcGIS Runtime SDK开发,其实最推荐的学习方式是直接看官方的教程.示例代码和帮助文档,因为官方的示例一般来说都是目前技术最新,也是最详尽的.对于ArcGIS Runtim ...

  8. 《ArcGIS Runtime SDK for Android开发笔记》——(3)、ArcGIS Runtime SDK概述

    1.前言 ArcGIS Runtime SDK是一整套用于构建原生及跨平台的地图应用程序的开发包,包括移动设备的Android.iOS.Windows Phone,针对桌面的.Net.Java.OSX ...

  9. 《ArcGIS Runtime SDK for Android开发笔记》

    开发笔记之基础教程 ArcGIS Runtime SDK for Android 各版本下载地址 <ArcGIS Runtime SDK for Android开发笔记>--(1).And ...

  10. Android:Eclipse+ADT+Android SDK 搭建安卓开发环境

    Eclipse+ADT+Android SDK 搭建安卓开发环境 要求 必备知识 windows 7 基本操作. 运行环境 windows 7(64位);  eclipse-jee-luna-SR2- ...

最新文章

  1. 通用类 RemoteUpload 远程上传从其他网站复制过来的图片
  2. 快速记忆python函数-python之格式化字符串速记整理
  3. 利用border制作三角形原理
  4. linux ubantu扩展空间,ubuntu 扩展存储空间
  5. php中intval函数用法,php intval函数用法总结
  6. java求最大公约数_10道java经典算法题,小白必备,每一题都能提升你的java能力...
  7. 高三了,一模距本科线还差22,英语才28,怎么办啊
  8. docker_3 docker 部署练习
  9. 创建hadoop 归档文件
  10. 数据库实现中文汉字排序终极指南
  11. 如何将视频设置为电脑动态壁纸?
  12. 电脑右下角没有看到小喇叭图标了该怎么办
  13. 中高级测试工程师面试题(不断补充中)
  14. WRF主程序与WPS的编译与安装
  15. C#预览(GOCAD)DWG文件方法
  16. Java:MouseListener、MouseMotionListener监听器与MouseEvent事件
  17. HTML 基础教程:HTML 编辑器
  18. 分享通过tensorflow证书考试的经验
  19. 合泰杯 | 合泰单片机入门 定时器详解(三)
  20. 分享一个H5使用JQ首字母排序的通讯录

热门文章

  1. Lombok你也许不知道的 @Builder 坑坑!
  2. 深度学习: smooth L1 loss 计算
  3. 云服务器搭建k8s集群的巨坑,node间网络不通问题
  4. 终于找到一个比较好的板材裁切的算法,预留学习中
  5. matlab10的阶层怎么输入,在Matlab中编写阶乘函数,并调用该函数来生成一个1!,......,10!的阶乘表...
  6. 你知道为什么不用XFP光模块了吗?
  7. 将yyyyMMdd、yyyy-MM-dd格式的字符转成日期DateTime格式
  8. UnityShader水面结冰面效果
  9. Camtasia Studio2023电脑屏幕视频录制软件使用教程
  10. 语义分割系列19-EMANet(pytorch实现)