一、SDK开发的概念

Android SDK开发,指为第三方app开发提供功能性封装,提供文档(doc),实例(demo),封装包(jar/aar)等,目前互联网公司提供了许多功能性SDK接入,比如腾讯的QQ登录微信登录、广点通联盟、QQ地图接入,阿里的支付宝支付,百度的百度墙广告等等。

二、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的打包和接入就十分方便。

三、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.

sdk结果的出口,一般使用一个接口,在接口的回调函数返回结果。

/**

*@author张新锦

*/

public interfaceOnPayResultListener {

public voidOnSuccess(String platFormNo);

public voidOnFail();

}

ComPayPlatform.pay(MainActivity.this,”001″,fixPlatFormNo,”1000001″,”00101″,”222222″,

“测试111”, 0.01,getCurrentTimeFormatyyyyMMdd(),getCurrentTimeFormathhmmss(),”remark1″,””,

newOnPayResultListener() {

@Override

public voidOnSuccess(String platFormNo) {

textView.append(“支付成功 , 返回数据: platformNo :”+platFormNo+”\n”);

}

@Override

public voidOnFail() {

textView.append(“支付失败\n”);

}

});

五、发布前的工作

5.1     sdk的代码混淆

sdk代码混淆与app不同的地方,除了普通app的混淆机制外,sdk特别注意开放接口和内部引用包的不混淆。

5.2     sdk包内容的发布

编写sdk代码、并且测试通过后,sdk开发的工作才进行一半,另外一半的工作在写出demo程序和接入文档。sdk的*终目的是为了其他开发者接入,不止在编码是注意接入的代码要简洁、明了,更要在接入文档中详细写出方法、参数的意义,*好直接在文档中给出事例。文档*好也写清楚开发环境要求,jdk要求和引用aar文件的详解。demo程序也十分重要,demo程序简洁,注释详细,使用sdk接口的代码进行详细注释,让接入sdk的开发人员明白每段代码的含义。