"lianren" 项目是一个非常优秀的 Android 商业级 项目 项目中基本涵盖了各种 Android APP 开发的技术 让笔者从中学到特别多的东西 特别感谢 开发者:huxinwu 项目开发者 和 所有人 huxinwu&github_androidOne 和 其 QQ交流群 :195104825 欢迎大家关注加入
1 工欲善其事 必先利其器 (jar,依赖分析)
对于开发一款优秀的 app 我们怎么使它在最短的时间内 做到最好的质量 是很重要的 , 秉承着程序员不重复发明轮子的理念 我们经常需要借助一些 优秀的开源框架 和 第三方 来加速我们的开发周期 同时 还能得到质量的保证 (例如你需要在app中加入即使通讯的功能 自己搭建xmpp吗? 光这个时间 就得花上几个月 而且 还不一定能够做出足够优秀的 这里使用 融云 就完美的解决了问题)
1:三个 alipay 开头的jar包 顾名思义 是 支付宝相关的 jar
2:support - v4 google 提供的 一般默认创建就有 值得注意的是 v4 也有版本之分 建议大家使用高版本的 bug少
3: bugly 腾讯的 对Crash的管理 和 统计 的开放平台
3:daocore greendao 数据库映射关系的第三方库
4:google zxing : 二维码相关jar
5:nineoldandroids android 开源动画库
6:RongIM_kit 融云即使通讯库
7:ShareSDK 开头的 是第三方登陆 以及 分享
8:umeng 友盟统计相关
9: ImageLoader 图片的加载 缓存等
分析完这些 jar 的作用 然后稍微在网上 查阅下 这些 jar 的用法和相关初始化 我们在 APP 看到相关陌生的代码 也大概能知道他们是起什么作用.
2:App 的 application 类的分析
app的启动自然是 application 类 最先加载启动 我们来看看 application 中做了什么:
private final String tag = BaseApplication.class.getSimpleName(); private static DisplayImageOptions options; @Override public void onCreate() { init(); } /** * 初始化 */ private void init(){ //友盟session时间间隔 MobclickAgent.setSessionContinueMillis(30*60*1000); //初始化融云SDK RongIM.init(this); RongCloudEvent.init(this); RongCloudEvent.getInstance().RongConnect(); //初始化debug模式 String flag = CommonUtils.getProperty(getApplicationContext(), "debug"); if (!TextUtils.isEmpty(flag)) { Boolean isDebug = Boolean.parseBoolean(flag); NLog.setDebug(isDebug); NLog.e(tag, "isDebug: " + isDebug); } //设置默认缓存路径 CacheManager.setSysCachePath(getCacheDir().getPath()); //腾讯bugly相关 UserStrategy strategy = new UserStrategy(getApplicationContext()); strategy.setAppVersion(CommonUtils.getVersionName(getApplicationContext())); strategy.setAppReportDelay(5000); CrashReport.initCrashReport(getApplicationContext() , "900001870" , true, strategy); options = new DisplayImageOptions.Builder() .showImageForEmptyUri(R.drawable.ic_default_img) .showImageOnFail(R.drawable.ic_default_img) .showImageOnLoading(R.drawable.ic_default_img) .displayer(new FadeInBitmapDisplayer(300)) .cacheInMemory(true) .cacheOnDisk(true) .build(); //初始化图片下载组件 ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext()) .threadPriority(Thread.NORM_PRIORITY - 2) .denyCacheImageMultipleSizesInMemory() .diskCacheSize(50 * 1024 * 1024) .diskCacheFileCount(200) .diskCacheFileNameGenerator(new Md5FileNameGenerator()) .defaultDisplayImageOptions(options) .build(); //Initialize ImageLoader with configuration. ImageLoader.getInstance().init(config); } public static DisplayImageOptions getOptions() { return options; } public static void setOptions(DisplayImageOptions options) { BaseApplication.options = options; }
//初始化debug模式 String flag = CommonUtils.getProperty(getApplicationContext(), "debug"); if (!TextUtils.isEmpty(flag)) { Boolean isDebug = Boolean.parseBoolean(flag); NLog.setDebug(isDebug); NLog.e(tag, "isDebug: " + isDebug);
未完待续.....