据说,腾讯的产品的三字名言是:抄、糙、超。即,先抄袭、在模仿、最终实现超越。互联网软件天下一大抄,彼此抄袭是常事,关键使我们如何超越他人,实现自我。下面我们采用最新的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的展示已经完成,接下来就是进入书架模块。
分享到:
相关推荐
"MFC开发的仿QQ表情的程序源代码"这个标题表明,这是一个基于Microsoft Foundation Class (MFC) 库的项目,其目的是创建一个类似于腾讯QQ的表情符号(emoji)应用程序。MFC是微软为Windows平台提供的C++类库,它封装...
在Mac操作系统上,解析和编辑Math公式是一项常见的需求,特别是在教育、科研以及技术文档编写等领域。这个项目似乎是一个专门针对Mac用户的解决方案,基于Objective-C(OC)编程语言开发。让我们深入探讨一下相关...
SSH电子商务Demo是一个基于Java开发的电子商务平台演示项目,利用了三个主流的开源框架:Struts1、Spring3.0和Hibernate3。这三个框架在Java Web开发中被广泛使用,组合在一起,可以构建出高效、模块化的应用系统。...
通过阅读和分析代码,你可以了解到如何在C++或 Lua 中操作粒子系统,如何处理用户输入以实现交互式编辑,以及如何利用窗口程序(如"particleTool_win32")来构建桌面应用程序。 对于有经验的开发者,这个编辑器原码...
LogView 是一个用于查看和分析 C++ 应用程序日志的工具,它可以帮助开发者高效地追踪程序运行过程中的问题。本文将围绕 "C++ LogView 源码" 这一主题,深入探讨其核心概念、设计原理以及实现细节。 首先,让我们...
【标题解析】:“多功能工具箱微信小程序源码.rar”这个标题揭示了我们即将探讨的核心内容:一个微信小程序的源代码,它被设计成一个具备多种功能的工具集合。"多功能工具箱"通常指的是一个应用程序,它整合了各种...
"qzxing"是一个基于ZXing(Zebra Crossing)库的Android二维码扫描框架,ZXing是一个强大的、跨平台的条码阅读库。这个库支持多种条码格式,包括常见的QR码和Data Matrix,同时也支持一维条形码。 使用"qzxing"库...
这两个库是IcePDF库的一部分,这是一个开源的Java PDF阅读器和处理框架。`icepdf-core`包含了PDF解析和渲染的基础组件,而`icepdf-viewer`则提供了用户界面相关的功能,如预览PDF文档。 `PdfToJpg.java`是包含的...
在IT行业中,二维码已经成为一种广泛使用的数据传输工具,它能够快速、便捷地存储和传递信息。结合`CAlaryer`(可能是指`CameraLayer`)、`WKWebView`以及页面控制器,我们可以创建出一个功能丰富的应用程序。下面将...