据说,腾讯的产品的三字名言是:抄、糙、超。即,先抄袭、在模仿、最终实现超越。互联网软件天下一大抄,彼此抄袭是常事,关键使我们如何超越他人,实现自我。下面我们采用最新的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的展示已经完成,接下来就是进入书架模块。

QQ阅读器技术框架解析之一《代码预览和分析》相关推荐

  1. QQ阅读器技术框架解析之三《代码预览和分析》

    本文主要介绍书架的架构 BookStandActivity extends ReaderBaseActivity implements DialogInterface.OnCancelListener ...

  2. 哪个读书app可以导入txt_QQ阅读iphone版怎么导入电子书 三种手机QQ阅读器导入本地图书图文教程...

    QQ阅读iphone版是一款比较方便的移动终端阅读软件,除了从电子书城下载或者购买电子书外,我们也可以把自己电脑中的电子书上传到QQ阅读软件中,不过果粉们都知道苹果手机没有文件管理器,无法使用qq阅读 ...

  3. CAD(dxf、dwg格式)文件的读取和显示,真正实现通过代码预览CAD文件,包含解析dwg、dxf文件,可以提取标注信息,可以转换为pdf、png、tiff、gif等6种格式的文件,可以永久免费实用

    真正实现通过代码预览CAD文件,包含解析dwg.dxf文件,可以提取标注信息,可以转换为pdf.png.tiff.gif等6种格式的文件,可以永久免费实用. 网上看了很多资料,不是缺这个就是少那个,反 ...

  4. 利用Gulp实现JSDoc 3的文档编写过程中的实时解析和效果预览

    ### 利用Gulp实现JSDoc 3的文档编写过程中的实时解析和效果预览 http://segmentfault.com/a/1190000002583569 转载于:https://www.cnb ...

  5. HTML完成如下网页效果代码,JS实现可直接显示网页代码运行效果的HTML代码预览功能实例...

    本文实例讲述了JS实现可直接显示网页代码运行效果的HTML代码预览功能.分享给大家供大家参考.具体如下: JavaScript实现HTML代码预览功能,直接在网页上显示代码运行的效果,就例如点击&qu ...

  6. js直接显示html,JS实现可直接显示网页代码运行效果的HTML代码预览功能实例.pdf...

    JS实实现现可可直直接接显显示示网网页页代代码码运运行行效效果果的的HTML代代码码预预览览功功能能实实例例 本文实例讲述了JS实现可直接显示网页代码运行效果的HTML代码预览功能.分享给大 供大 参 ...

  7. Foxit 修复PDF阅读器中的多个代码执行漏洞

     聚焦源代码安全,网罗国内外最新资讯! 编译:代码卫士 Foxit 阅读器更新版本,修复了可导致任意代码执行后果的多个释放后使用漏洞. Foxit 向用户提供了大量功能,包括通过 JavaScript ...

  8. 阅读器护眼模式android代码,pdf阅读器如何设置护眼模式?手机app原来也可以这么强大.docx...

    pdf阅读器如何设置护眼模式?手机app原来也可以这么强大.docx 还剩 6页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,喜欢就下载吧,价低环保! 内容要点: 轻快 PDF 阅读器 w ...

  9. 利用微信的weui框架上传、预览和删除图片

    jQuery WeUI 是专为微信公众账号开发而设计的一个框架,jQuery WeUI的官网:http://jqweui.com/ 需求:需要在微信公众号网页添加上传图片功能 技术选型:实现上传图片功 ...

最新文章

  1. py2数据分析_利用数据
  2. 独立开放者入行之前应该知道的8件事
  3. 在列表前方插入一个数据_Python基础知识详解(三):数据结构篇
  4. SpringBoot的注解:@SpringBootApplication注解 vs @EnableAutoConfiguration+@ComponentScan+@Configuration...
  5. mysql+drdb+HA
  6. 程序员面试题精选100题(12)-从上往下遍历二元树[数据结构]
  7. redis启动后 允许访问_解决Redis开启远程访问及密码问题
  8. forms身份验证 不跳转_Django用户身份验证实战
  9. linux 编译字符设备驱动错误,linux字符设备驱动框架及编写流程
  10. WeBack(微信聊天记录导出)使用教程
  11. C++两个类互相引用,如何处理最好
  12. h5 px 转dp_西游女儿国h5手游下载-西游女儿国h5手游下载v2.1.4 安卓版
  13. android ev3 蓝牙连接,乐高EV3蓝牙安装和连接
  14. easydarwin 安装_使用EasyDarwin搭建流服务器
  15. 成功=正确的方法+艰苦的努力+少说空话——《学习之道》+《刻意练习》+《练习的心态》
  16. 手机谷歌翻译位置服务器,谷歌翻译更新手机端App:中国用户可无障碍使用
  17. python的UnboundLocalError: local variable 'xxx' referenced b
  18. 数模(2)——多属性决策模型
  19. Nature综述: 关键物种对于微生物菌群结构和功能的驱动作用
  20. 全景图转小行星视角投影原理详解

热门文章

  1. 请你谈谈COOKIE的弊端
  2. antdv transfer 报错 custom validator check failed for prop “dataSource“
  3. linux 在线扩inode,Ubuntu 18.04 磁盘根目录在线扩容 修改分区 inode 数量
  4. 预约挂号小程序,医院挂号小程序,医院预约挂号小程序系统毕设作品
  5. 【面试技巧】最全的面试求职攻略_每日更新
  6. 达内国际软件学院(广州)
  7. r语言t检验输出检验统计量_R语言中实现T检验及可视化
  8. 未知的错误代码在应用程序安装:110 android,应用在华为P9手机上安装失败原因分析 (错误码:-110)...
  9. 服务器系统向日葵动不了,向日葵无法连接2003系统服务器
  10. 进入任何人的QQ空间的方法