最近有朋友在我的博客私信我,向我咨询一些关于Android SDK开发的相关知识,借此机会,将我自己在开发SDK过程中的一些心得分享给大家,谢谢。

1. 什么是SDK?

     SDK(Software Development Kit 即 软件开发工具包),而我们自己开发的Android sdk本质上与Google提供的Android SDK是一样的,都是用于Android 应用程序的开发,你可以想象为是一个工具袋,当别人要用的时候,只需要知道这个工具袋有什么作用以及怎么使用就OK,而无需知道怎么制作这个工具袋。

2. SDK有哪几种表现形式?

     就目前而言,Android 端sdk的表现形式有很多种,我大致列举一下常见的几种表现形式:     1、jar包形式     2、aar形式     3、module形式     4、远程依赖库形式

3. 各种形式的开发需要注意什么?

1.Jar包形式
jar包形式是最常见的一种sdk表现形式,优点在于:体积小、编译速度快,缺点是:不能含有xml布局文件,以及直接使用图片等资源文件,但是,如果我们的sdk需要提供界面,又需要使用图片资源的时候该怎么办呢?在这里为大家提供一种常用的解决方案,由于jar打包生成之后不能包含xml布局,以及图片资源文件,所以我们可以采用代码动态布局,例如:

/** * Created by lxh on 2017/2/10. * QQ-632671653 */public class Test1 extends Activity {    private Context mContext;    @Override    public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {        super.onCreate(savedInstanceState, persistentState);        this.mContext = this;        //创建一个根布局        RelativeLayout rootLayout = new RelativeLayout(mContext);        RelativeLayout.LayoutParams rootLP = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,                ViewGroup.LayoutParams.MATCH_PARENT);        rootLayout.setLayoutParams(rootLP);        //创建一个TextView        TextView testTV = new TextView(mContext);        testTV.setLayoutParams(new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,                ViewGroup.LayoutParams.WRAP_CONTENT));        testTV.setText("这里是动态创建的布局");        //将TextView加入到根布局中        rootLayout.addView(testTV);        //将布局添加到activity        setContentView(rootLayout);    }}

对于图片资源的处理,我们可以有多种处理办法,第一种:将图片放置在asset目录中,
然后使用以下方法获取到图片的位图

/**     * 获取asset目录下图片的位图     * @param picName     * @return     */    private Bitmap getAssetPic(String picName){        Bitmap bitmap;        InputStream is= null;        try {            is = mContext.getAssets().open(picName);            bitmap = BitmapFactory.decodeStream(is);            return bitmap;        } catch (IOException e) {            e.printStackTrace();            return null;        }    }

获取到bitmap之后就可以很轻松的设置到imageview或者相关自定义控件上面了如:

imageView.setImageBitmap(getAssetPic("xxxxx.jpg"));

导出jar包时,将asset目录一同导出,具体导出方法请参考我的另一篇博客:http://blog.csdn.net/qq_23286245/article/details/50344071

另外一种方法是先将图片转化为字符串,将字符串用一个静态常量存储,使用时再转化为图片的方式显示,如:

    /**     * 将bitmap转为字符串     * @param bitmap     * @return     */    public String bitmaptoString(Bitmap bitmap){        String string=null;        ByteArrayOutputStream bStream=new ByteArrayOutputStream();        bitmap.compress(Bitmap.CompressFormat.PNG,100,bStream);        byte[]bytes=bStream.toByteArray();        string= Base64.encodeToString(bytes,Base64.DEFAULT);        return string;    }    /**     * 将字符串转bitmap     * @param string     * @return     */    public Bitmap stringtoBitmap(String string){        Bitmap bitmap=null;        try {            byte[]bitmapArray;            bitmapArray=Base64.decode(string, Base64.DEFAULT);            bitmap=BitmapFactory.decodeByteArray(bitmapArray, 0, bitmapArray.length);        } catch (Exception e) {            e.printStackTrace();        }        return bitmap;    }

2.aar形式
aar相当于jar的进化版,为了解决jar不能包含资源文件而应运而生,aar是可以包含图片文件夹和xml布局的,可以直接将aar发布给他人使用,也可以将aar发布到maven,供他人远程依赖使用,但是再制作aar的时候也会有一些不大不小的坑,给大家分享一些常规的注意事项吧,详情见:https://my.oschina.net/u/1393188/blog/492576
http://blog.csdn.net/dliyuedong/article/details/49408931
由于笔者较懒,所以就不多说了,其他的例如包冲突的坑,大家自行百度解决吧,百度是你最好的老师之一哦。
3.module形式
在日常开发中,我们经常会在不同的项目中遇到重复的功能,或者相似的功能,但是如果一遍一遍的CV,终究不是可取之道,那么我们就可以采用模块化的思想,将一些常规的功能封装到一个模块中,也就是一个module,使用时主app module依赖这个module就可以了,开发效率也会大大提高,module适用于自己日常开发使用,但是凭借Android的开源精神,也可以发布给其他人使用,由于module是代码可见,并且可以轻松改动的形式,所以更适用于一些相似功能的封装,以便于修改源码。
4.远程依赖形式
使用Android studio可以直接在gradle中配置远程依赖,不用自己再去下载各种库,用着可是不能再爽了,并且可以很方便的持续更新维护,目前很常用的远程仓库有maven和jcenter等,至于上传方式各有不同,由于这个已经在网上有很多的教程,再次也就不过多赘述了,贴上几篇博客以供大家参考:
http://blog.csdn.net/lmj623565791/article/details/51148825
http://www.jianshu.com/p/e443456bb506
http://blog.csdn.net/zhangbuzhangbu/article/details/51730402

至此,差不多该去吃午饭了,有更多疑问的朋友,欢迎加QQ:632671653交流,感谢各位大佬的博客,贸然引用,还请见谅,笔者已然懒癌晚期。。。嘿嘿。皮皮虾,我们走。。。。

更多相关文章

  1. EditText(细节) android:maxLines="1"失效原因以及解决
  2. 在Netbeans上配置Android开发环境
  3. 2019 Android开发趋势及必备技术点!
  4. Android开发者心酸史
  5. Android学习资源
  6. 阿里巴巴Android开发手册
  7. 箭头函数的基础使用
  8. NPM 和webpack 的基础使用
  9. Python list sort方法的具体使用

随机推荐

  1. Android 手把手进阶自定义View(九)- 自动换
  2. android app的类响应式设计【半月谈投稿
  3. android OpenGL ES实现渲染到透明的纹理
  4. Android核心分析(28)-----Android(安卓)GDI
  5. 《Android第一行代码》first reading 二
  6. Android Training - 创建一个Android工程
  7. Google手机操作系统Android将100%开源
  8. 第一行代码Android第一课
  9. Android root权限获取大揭秘
  10. Android 下载的三种实现方式(文件流的读