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,关键代码

@Override
public 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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值