Android SDK开发技术分享

      最近在工作中负责统一支付平台的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 文档


阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页