首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

QQ阅读器技术框架解析之一《代码预览跟分析》

2012-06-28 
QQ阅读器技术框架解析之一《代码预览和分析》据说,腾讯的产品的三字名言是:抄、糙、超。即,先抄袭、在模仿、最终

QQ阅读器技术框架解析之一《代码预览和分析》
据说,腾讯的产品的三字名言是:抄、糙、超。即,先抄袭、在模仿、最终实现超越。互联网软件天下一大抄,彼此抄袭是常事,关键使我们如何超越他人,实现自我。下面我们采用最新的QQ阅读器反编译代码,并恢复源代码,学习QQ阅读器的架构和具体实现。
1. 首先我们需要2个工具来反编译QQ阅读器Android端的源代码:apktool和dex2jar
2. 最新QQ阅读器安装文件(qqreader_2.1.1.0150_android.apk)
3. 反编译文件,导入eclipse中
   apktool.bat d qqreader.apk qqreader
   dex2jar.bat classes.dex
   使用jd-gui.exe代开src.zip文件,并保存到本地所有src源文件,至此QQReader的源代码和资源文件全部反编译完成,新建android2.1工程,并导入工程后,发现无数的错误,没关系,翻遍编译后是源代码那就真奇怪了。源代码见附件,注意工程是UTF-8格式的。
4. 首先启动的是ReaderApplication,关键代码

@Overridepublic void onCreate() {super.onCreate();new d(this.getApplicationContext());new c();}

对D和C进行初始化,作用不详,表面上看无作用
5. 然后启动的Activity是SplashActivity,即LOGO页面,继承了阅读器的基类,TA是整个安卓应用的入口类ReaderBaseActivity.java。这个类提供了可重复使用的一些代码,如
1. 是否要下载更新软件版本,    msg.what = 310,提示:网络错误、更新失败、更新成功、已是最新版本    msg.what=104,提示:是否退出阅读器2. 设置默认对话框的样式3. 获取底层的一些常用的对象4. 重载父类的onPause和onDestory方法,记录日志打点信息5. onCreate:获取屏幕的宽高   屏幕高大于1280,设置字体的初始大小18、15   960:8、15   800:8、15   320:默认   否则:-4(减去)6. onResume:   这个是QQ阅读器的亮点,每个activity重新恢复展示时,都会调用这个函数,其中QQ设置了全局变量,如果全局变量是否退出应用程序,那么,调用finish()函数,一次循环递归,知道所有的acitivity都执行了finish()函数,应用退出。


ReaderBaseActivity的基本作用讲完了,这个时候才是真正启动SplashActivity的。

1. OnCreate函数
   1. 设置全局静态变量finish=false;初始化系统状态为非终止状态(ay.a(false);)
   2. 设置noTitle展示(requestWindowFeature(1);)
   3. 设置layout为splash.xml。这个布局就一张ImageView(setContentView(2130903126);)
   4. 发送异步消息
SplashActivity.a(this.a).sendEmptyMessage(1);是否继续下载更新文件SplashActivity.a(this.a).sendEmptyMessage(3);距离安装时间超过7天后,每次启动检查是否有新版本,有的话,就要提示SplashActivity.a(this.a).sendEmptyMessage(2);检查是否是第一次运行,根据这个展示操作指南,并拷贝默认的图书到书架。SplashActivity.a(this.a).sendEmptyMessage(4);下载一些东西,代码反编译失败SplashActivity.a(this.a).sendEmptyMessageDelayed(0, 800L);延迟0.8s启动书架

2. onKeyDown函数:禁用返回键

至此,QQ阅读器从点击快捷方式,到logo的展示已经完成,接下来就是进入书架模块。
1 楼 weisi2375 2012-04-11   继续牛逼。。

热点排行