Android(安卓)SDK开发心得总结
最近有朋友在我的博客私信我,向我咨询一些关于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交流,感谢各位大佬的博客,贸然引用,还请见谅,笔者已然懒癌晚期。。。嘿嘿。皮皮虾,我们走。。。。
更多相关文章
- EditText(细节) android:maxLines="1"失效原因以及解决
- 在Netbeans上配置Android开发环境
- 2019 Android开发趋势及必备技术点!
- Android开发者心酸史
- Android学习资源
- 阿里巴巴Android开发手册
- 箭头函数的基础使用
- NPM 和webpack 的基础使用
- Python list sort方法的具体使用