ClassyShark apk分析利器

2024-06-19 12:48
文章标签 classyshark apk 利器 分析

本文主要是介绍ClassyShark apk分析利器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

http://mt.sohu.com/20160228/n438757719.shtml

http://mt.sohu.com/20160228/n438757719.shtml
http://mt.sohu.com/20160228/n438757719.shtml



ClassyShark apk分析利器

CSDN 2016-02-28 12:30:30 阅读(3603) 评论(2)
声明:本文由入驻搜狐公众平台的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场。 举报

  前言

  我们薄荷技术部有个规定,除了每周三的「技术之夜」之外,每周都要至少写一篇技术分享,因此我们技术部每个人都有自己的博客。至于我们Android内部,为了鼓励我们团队每个人坚持产出高质量的博客,我跟他们说过不错的文章会考虑推到我的公众号上,利用我的资源给他们做点推广,增加点流量,只希望能鼓励他们继续坚持这个好习惯。

  今天这篇文章是我们团队一位高级Android工程师分享的,我们团队每个人跟我几乎都有点故事。这哥们是我粉丝,当时看到我的招聘贴毫不犹豫投简历过来了,经过两轮面试拿到了offer,事后提离职时原公司为了留住他给涨了比薄荷稍高的薪水,但是他还是毅然决然选择了薄荷,一直到现在干的很出色,现在已经成长为一块业务的负责人,关键跟一群靠谱的小伙伴一起工作很快乐。

  这里顺便吐槽一句,很多公司非要等到员工提离职才给涨薪水,真是傻逼的做法,心凉了,一切也都晚了!

  他的网络常用id:「w4lle」

  GitHub: https://github.com/w4lle

  个人博客: http://w4lle.github.io/

  这篇文章我觉得很不错,推荐给大家,大家可点击「阅读原文」跳转到原博客,以下是文章内容:

  背景

  对于一个感兴趣的android非开源项目,通常使用逆向工程查看apk中的内容,俗称反编译。工具大概包括dex2jar、JD-GUI、apktool、procyon,这些工具使用起来相对比较麻烦,如果我们只想知道该项目的基本框架、使用到哪些开源项目的话,那么就有些浪费时间。

  对于一些大厂的项目,我们还比较关心的是用到了哪些新的框架和技术,对于新技术的流行程度和使用普遍程度有个比较好的把握,指导是否需要进行深度的使用学习。比如最近的比较流行的rxjava,热更新技术等等。

  ClassyShark

  ClassyShark是Google发布的一款可以查看Android可执行文件的浏览工具,支持.dex, .aar, .so, .apk, .jar, .class, .xml 等文件格式,分析里面的内容包括classes.dex文件,包、方法数量、类、字符串、使用的NativeLibrary等。

  下载链接:https://github.com/google/android-classyshark

  使用方法

  打开apk文件java -jar ClassyShark.jar -open

  具体使用

  以美团项目为例,让我们看看能得到什么有用的信息

  java -jar ClassyShark.jar -open ~/Downloads/group-351_3-meituan_.apk

  

  美团项目中使用了MultiDex,并且classes.dex文件有3个,说明方法数肯定非常多。

  美团的编译版本非常新, 紧跟时代, 23版本(Android 6.0)。

  并且TargetSdkVersion也是23版本,紧跟技术方向。

  最低版本是16(Android 4.1), 4.1以下的手机无法运行。

  而且有好多的so库,有美团自己的,也有好多是第三方的库。

  

  可以看到9万多个方法,怪不得会有3个classes.dex文件。

  项目中应用了大量的第三方库,并且一般都是主流的比较稳定的开源库。

  我们来看下都用到了哪些库

  ZXing二维码识别库amap: 高德地图PullToRefresh使用最广的下拉刷新组件jackson, json解析库NineOldAndroids Jake大神的android兼容库fresco,facebook出品的图片处理库,图片加载节省很多内存,避免OOMRxJava 响应式编程库,再加上Square的Retrofit库的支持,可以说未来就是rxjava的天下,目前市面上已经有很多基于rxjava的项目;我们团队也将基于rxjava来开发项目圈内最牛逼的开源公司Square,Jake大神所在的公司,可以毫不夸张的说,Square的开源项目使得Android开发提速了好几年okhttp网络请求库,已被官方采用retrofit非常牛逼的网络请求库,配合rxjava和lambda使用,代码量减少90%otto事件总线picasso图片加载库dagger依赖注入框架ExpandableTextView可折叠的TextViewiflytek, 科大讯飞的语音集成ViewPagerIndicator还是Jake大神的项目,viewpager的滚动控件actionbarsherlock依然是Jake大神的项目,Actionbar的适配库,不过已经过时了华为推送SystemBarTint状态栏沉浸效果库百度地图新浪微博腾讯的QQ和微信大众点评,已经合并一家,东西也得用umpay, 联动优势支付支付宝;andfix阿里出品的android热更新框架flurry统计库小米推送http-request网络请求库EventBus事件总线库PhotoView放大缩小的图片处理库roboguice依赖注入框架,类似Daggerzip4j处理zip压缩的库link异步task关联库,很像rxjava

  总结

  从上面分析我们可见看出,美团是一个技术很开放的公司,对于框架的使用比较多,使用的基本都是主流的开发框架,减少开发成本,增强app的稳定性和体验,对于我们来说,有很大的借鉴意义。比如,目前都在试水的热更新框架,美团选择了阿里的andfix,那么该技术方案肯定是得到了美团团队的验证;另外,美团团队也是比较潮流的,Retrofit+Rxjava的潮流趋势已经不可阻挡,美团已经开始使用;但是,从项目引用库中我们也可以看到一些不足之处;比如,同一种框架引用了多种第三方库,如网络库(okhttp,http-request),图片加载库(fresco,picasso),事件总线(EventBus, Otto),依赖注入(Dagger,roboguice),推送相关的库等很多重复的库,如果去掉重复的库那么可以节省很多的编译时间和apk包的大小;还有就是,我们基本可以断定,美团团队的内部并不能很好的统一,没有有效的沟通,代码开发很混乱,导致项目结构上的臃肿,重复库的使用等等问题。

  通过分析App的项目结构和引用库的信息,我们大致掌握了该项目的架构,一些开发中的经验和不足,拓宽下开发视野,发现一些好用的开源库,增强我们的武器,这些都是我们在开发中可以借鉴的东西。

  本文由stormzhangV授权极客头条发布,微信公众号「googdev」原创首发,转载请注明作者信息及出处,违者必究。

这篇关于ClassyShark apk分析利器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1075079

相关文章

Spring Cloud:构建分布式系统的利器

引言 在当今的云计算和微服务架构时代,构建高效、可靠的分布式系统成为软件开发的重要任务。Spring Cloud 提供了一套完整的解决方案,帮助开发者快速构建分布式系统中的一些常见模式(例如配置管理、服务发现、断路器等)。本文将探讨 Spring Cloud 的定义、核心组件、应用场景以及未来的发展趋势。 什么是 Spring Cloud Spring Cloud 是一个基于 Spring

[职场] 公务员的利弊分析 #知识分享#经验分享#其他

公务员的利弊分析     公务员作为一种稳定的职业选择,一直备受人们的关注。然而,就像任何其他职业一样,公务员职位也有其利与弊。本文将对公务员的利弊进行分析,帮助读者更好地了解这一职业的特点。 利: 1. 稳定的职业:公务员职位通常具有较高的稳定性,一旦进入公务员队伍,往往可以享受到稳定的工作环境和薪资待遇。这对于那些追求稳定的人来说,是一个很大的优势。 2. 薪资福利优厚:公务员的薪资和

高度内卷下,企业如何通过VOC(客户之声)做好竞争分析?

VOC,即客户之声,是一种通过收集和分析客户反馈、需求和期望,来洞察市场趋势和竞争对手动态的方法。在高度内卷的市场环境下,VOC不仅能够帮助企业了解客户的真实需求,还能为企业提供宝贵的竞争情报,助力企业在竞争中占据有利地位。 那么,企业该如何通过VOC(客户之声)做好竞争分析呢?深圳天行健企业管理咨询公司解析如下: 首先,要建立完善的VOC收集机制。这包括通过线上渠道(如社交媒体、官网留言

打包体积分析和优化

webpack分析工具:webpack-bundle-analyzer 1. 通过<script src="./vue.js"></script>方式引入vue、vuex、vue-router等包(CDN) // webpack.config.jsif(process.env.NODE_ENV==='production') {module.exports = {devtool: 'none

Java中的大数据处理与分析架构

Java中的大数据处理与分析架构 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们来讨论Java中的大数据处理与分析架构。随着大数据时代的到来,海量数据的存储、处理和分析变得至关重要。Java作为一门广泛使用的编程语言,在大数据领域有着广泛的应用。本文将介绍Java在大数据处理和分析中的关键技术和架构设计。 大数据处理与

段,页,段页,三种内存(RAM)管理机制分析

段,页,段页         是为实现虚拟内存而产生的技术。直接使用物理内存弊端:地址空间不隔离,内存使用效率低。 段 段:就是按照二进制文件的格式,在内存给进程分段(包括堆栈、数据段、代码段)。通过段寄存器中的段表来进行虚拟地址和物理地址的转换。 段实现的虚拟地址 = 段号+offset 物理地址:被分为很多个有编号的段,每个进程的虚拟地址都有段号,这样可以实现虚实地址之间的转换。其实所谓的地

mediasoup 源码分析 (八)分析PlainTransport

mediasoup 源码分析 (六)分析PlainTransport 一、接收裸RTP流二、mediasoup 中udp建立过程 tips 一、接收裸RTP流 PlainTransport 可以接收裸RTP流,也可以接收AES加密的RTP流。源码中提供了一个通过ffmpeg发送裸RTP流到mediasoup的脚本,具体地址为:mediasoup-demo/broadcaste

Java并发编程—阻塞队列源码分析

在前面几篇文章中,我们讨论了同步容器(Hashtable、Vector),也讨论了并发容器(ConcurrentHashMap、CopyOnWriteArrayList),这些工具都为我们编写多线程程序提供了很大的方便。今天我们来讨论另外一类容器:阻塞队列。   在前面我们接触的队列都是非阻塞队列,比如PriorityQueue、LinkedList(LinkedList是双向链表,它实现了D

线程池ThreadPoolExecutor类源码分析

Java并发编程:线程池的使用   在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:   如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。   那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务?

ConcurrentHashMap之源码分析

集合是编程中最常用的数据结构。而谈到并发,几乎总是离不开集合这类高级数据结构的支持。比如两个线程需要同时访问一个中间临界区(Queue),比如常会用缓存作为外部文件的副本(HashMap)。这篇文章主要分析jdk1.5的3种并发集合类型(concurrent,copyonright,queue)中的ConcurrentHashMap,让我们从原理上细致的了解它们,能够让我们在深度项目开发中获益非浅