CN110489159A - 安装包精简方法及数据解析方法、装置、介质和设备 - Google Patents
安装包精简方法及数据解析方法、装置、介质和设备 Download PDFInfo
- Publication number
- CN110489159A CN110489159A CN201910710333.6A CN201910710333A CN110489159A CN 110489159 A CN110489159 A CN 110489159A CN 201910710333 A CN201910710333 A CN 201910710333A CN 110489159 A CN110489159 A CN 110489159A
- Authority
- CN
- China
- Prior art keywords
- file
- data
- line number
- dex
- data file
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000009434 installation Methods 0.000 title claims abstract description 68
- 238000000034 method Methods 0.000 title claims abstract description 68
- 238000007405 data analysis Methods 0.000 title claims abstract description 8
- 238000013507 mapping Methods 0.000 claims abstract description 26
- 238000012545 processing Methods 0.000 claims description 9
- 238000004590 computer program Methods 0.000 claims description 5
- 230000000149 penetrating effect Effects 0.000 claims 1
- 230000006870 function Effects 0.000 description 69
- 238000010586 diagram Methods 0.000 description 8
- 230000000694 effects Effects 0.000 description 5
- 238000004891 communication Methods 0.000 description 4
- 238000001514 detection method Methods 0.000 description 4
- 230000004044 response Effects 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 2
- 238000012217 deletion Methods 0.000 description 2
- 230000037430 deletion Effects 0.000 description 2
- 235000013399 edible fruits Nutrition 0.000 description 2
- 230000005291 magnetic effect Effects 0.000 description 2
- 238000012517 data analytics Methods 0.000 description 1
- 230000006837 decompression Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000005611 electricity Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 238000003672 processing method Methods 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Telephonic Communication Services (AREA)
Abstract
本公开提供了一种安装包精简方法及数据解析方法、装置、介质和设备,安装包精简方法包括:获取安装包中的dex文件;通过第一文件应用工具,所述dex文件中的指令偏移与行号的映射关系保存为第一数据文件;通过第二文件应用工具,删除所述dex文件中的行号文件,形成精简的安装包文件。本方法通过准确删除安装包中的行号信息,同时能够通过上报的指令偏移和函数名,准确的查找到文件的崩溃位置,使得在不影响安装包整体功能的前提下,有效地精简安卓应用安装包的体积,进而提高应用的下载成功率,为产品带来更多用户,提高产品的推广效率。
Description
技术领域
本公开涉及计算机技术领域,具体而言,涉及一种安装包精简方法及数据解析方法、装置、介质和设备。
背景技术
安卓应用的包体积是衡量应用质量的重要指标之一:包体积越小,用户的下载成功率越高,进而应用的使用用户也会越多。安卓应用的安装包(apk文件)中的dex保存的是应用的代码,占有可观的体积。如果能够将此部分的体积减小,那么无疑会有效地减小安装包的体积,dex中的debugItem存储有应用代码的行号信息,删除后不会影响代码的运行效果,但是会导致无法获取应用对应的源码行号信息,当应用出现问题后就难以定位。
因此,如何在能够正确获取java调用栈源码行号的前提下,通过完全删除安卓应用安装包中的dex文件中的debugItem,达到精简安卓应用安装包体积的目的,是一个急需解决的技术问题。
公开内容
本公开的目的在于提供一种安装包精简方法及数据解析方法、装置、介质和设备,能够解决上述提到的至少一个技术问题。具体方案如下:
根据本公开的具体实施方式,第一方面,本公开提供一种安装包精简方法,包括:
获取安装包中的dex文件;
通过第一文件应用工具,将所述dex文件中的指令偏移与行号的映射关系保存为第一数据文件;
通过第二文件应用工具,删除所述dex文件中的行号文件,形成精简的安装包文件。
可选的,还包括:
通过第三文件应用工具,将所述dex文件中的函数名的混淆关系保存为第二数据文件。
可选的,还包括:
将所述第一数据文件发送至服务端,用于数据解析;和/或
将所述精简的安装包文件发送至移动终端供安装;和/或
将所述第二数据文件发送至服务端,用于数据解析。
可选的,所述精简的安装包文件中包括sdk文件,所述sdk文件用于从所述移动终端中获取调用栈中每个栈帧的指令偏移值和函数签名。
根据本公开的具体实施方式,第二方面,本公开提供一种数据解析方法,包括:
获取第一数据文件,所述第一数据文件存储有dex文件中的指令偏移与行号的映射关系;
获取第二数据文件,所述第二数据文件存储有所述dex文件中的函数名的混淆关系;
获取网络上报的调用栈中每个栈帧的指令偏移值和函数签名;
通过所述指令偏移值和函数签名,从所述第一数据文件以及第二数据文件的关系中查找到所述每个栈帧的源码行号和混淆前的类名函数名。
可选的,还包括:
通过所述源码行号和混淆前的类名函数名,确定出准确的调用栈;
显示所述调用栈信息。
根据本公开的具体实施方式,第三方面,本公开提供一种安装包体积精简装置,包括:
获取单元,用于获取安装包中的dex文件;
第一存储单元,用于通过第一文件应用工具,将所述dex文件中的指令偏移与行号的映射关系保存为第一数据文件;
第二存储单元,用于通过第二文件应用工具,删除所述dex文件中的行号文件,形成精简的安装包文件。
根据本公开的具体实施方式,第四方面,本公开提供一种数据解析装置,包括:
第一获取单元,用于获取第一数据文件,所述第一数据文件存储有dex文件中的指令偏移与行号的映射关系;
第二获取单元,用于获取第二数据文件,所述第二数据文件存储有所述dex文件中的函数名的混淆关系;
第三获取单元,用于获取网络上报的调用栈中每个栈帧的指令偏移值和函数签名;
查找单元,用于通过所述指令偏移值和函数签名,从所述第一数据文件以及第二数据文件的关系中查找到所述每个栈帧的源码行号和混淆前的类名函数名。
根据本公开的具体实施方式,第五方面,本公开提供一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现如上任一项所述的方法。
根据本公开的具体实施方式,第六方面,本公开提供一种电子设备,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现如上任一项所述的方法。
本公开实施例的上述方案与现有技术相比,至少具有以下有益效果:本方法通过准确删除安装包中的行号信息,同时能够通过上报的指令偏移和函数名,准确的查找到文件的崩溃位置,使得在不影响安装包整体功能的前提下,有效地精简安卓应用安装包的体积(减小的体积为apk中dex文件大小的5.5%左右),进而提高应用的下载成功率,为产品带来更多用户,提高产品的推广效率。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1示出了根据本公开实施例的逻辑关系图;
图2示出了根据本公开实施例的安装包精简方法流程图;
图3示出了根据本公开实施例的数据处理方法流程图;
图4示出了根据本公开实施例的安装包精简装置结构示意图;
图5示出了根据本公开实施例的数据处理装置结构示意图;
图6示出了根据本公开的实施例的电子设备连接结构示意图。
具体实施方式
为了使本公开的目的、技术方案和优点更加清楚,下面将结合附图对本公开作进一步地详细描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。基于本公开中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本公开保护的范围。
在本公开实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本公开。在本公开实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义,“多种”一般包含至少两种。
应当理解,本文中使用的术语“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
应当理解,尽管在本公开实施例中可能采用术语第一、第二、第三等来描述……,但这些……不应限于这些术语。这些术语仅用来将……区分开。例如,在不脱离本公开实施例范围的情况下,第一……也可以被称为第二……,类似地,第二……也可以被称为第一……。
取决于语境,如在此所使用的词语“如果”、“若”可以被解释成为“在……时”或“当……时”或“响应于确定”或“响应于检测”。类似地,取决于语境,短语“如果确定”或“如果检测(陈述的条件或事件)”可以被解释成为“当确定时”或“响应于确定”或“当检测(陈述的条件或事件)时”或“响应于检测(陈述的条件或事件)”。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的商品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种商品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的商品或者装置中还存在另外的相同要素。
下面结合附图详细说明本公开的可选实施例。
实施例1
如图1所示,为本公开实施例的一种逻辑关系图,该逻辑关系图包括编译过程、手机终端、解析服务器、前端显示四个部分,其中编译过程为程序开发人员通过编译器进行APK的精简编辑,生成的APK安装包安装到用户手机终端,当手机终端发生崩溃或卡顿时,通过APK中的SDK获取调用栈的指令偏移值和函数名,上报至解析服务器,解析服务器解析后获得准确的崩溃位置并通过前端显示装置显示给程序开发人员,程序开发人员可以准确的定位崩溃或卡顿位置。具体如下:
如图2所示,根据本公开的具体实施方式,本公开提供一种安装包精简方法,包括如下方法步骤:
步骤S202:获取APK中的dex文件。
APK(AndroidPackage),即Android安装包(APK),通过将APK文件直接传到Android模拟器或Android手机中执行即可安装。
APK是把android sdk编译的工程打包成一个安装程序文件,格式为apk。apk文件其实是zip格式,但后缀名被修改为apk,通过UnZip解压后,可以看到dex文件。
dex文件是Android平台上可执行文件的类型。DEX(DalvikVM executes),即Android Dalvik执行程序,是Dalvik字节码。Android在运行一个程序时首先需要UnZip解压,解压后,可以看到dex文件。
步骤S204:通过第一文件应用工具,将所述dex文件中的指令偏移与行号的映射关系保存为第一数据文件。
其中第一文件应用工具可以为dexdump,得到Proguard删除行号之前的完整的dex文件,这个dex文件保留了每个函数dexPC(指令偏移)与源码行号的关系,通过dexdump工具可以将这一关系保存为一个数据文件,用于描述每个函数dexPC(指令偏移)与源码行号的关系。这个数据文件将会被解析服务器使用。
步骤S206:通过第二文件应用工具,删除所述dex文件中的行号文件,形成精简的安装包文件。
第二文件应用工具可以为Proguard,控制Proguard使其生成的dex文件不包含debugItem,可以通过去除“-keep lineNumberTable”这一在通常开发中使用的配置选项来实现,这样生成的dex文件就没有保留函数的dexPC(指令偏移)与行号之间的关系,APK体积得到了精简。
可选的,还包括如下方法步骤:
步骤S208:通过第三文件应用工具,将所述dex文件中的函数名的混淆关系保存为第二数据文件。
第三文件应用工具可以为retrace,retrace会将混淆之前的类名成员名与混淆之后的类名成员名的关系保存为mapping文件,这个文件也将被解析服务器使用到。例如将函数名“do sth”混淆为“d”,则mapping文件中保留“do sth”与“d”的映射关系,使得当任何人通过“d”就可以知道其实质为“do sth”。
可选的,还包括如下方法步骤之一:
第一、将所述第一数据文件发送至服务端,用于数据解析。
将未删除行号的dex文件发送至服务端,所述dex文件中保留了指令偏移与行号的映射关系,当从手机崩溃端获取到相应的指令偏移值时,可以通过该映射关系获得调用栈的准确行号。
第二、将所述精简的安装包文件发送至移动终端供安装。
将删除了行号的APK文件发送至移动终端,所述移动终端获得该APK后进行快速的安装,降低了安装APK的时间和空间,节省了数据流量,提高了用户体验性能。
移动终端可以为手机、PAD等任何安卓系统,可以运行APK的智能终端,该智能终端获得精简的APK文件后,安装运行过程中,一旦发生崩溃(例如闪屏),APK中包括的SDK就会自动获取所需要的调用栈以分析崩溃原因。SDK获取到调用栈中每个栈帧的dexPC以及函数签名后,上报至服务端进行解析即可获得。
第三、将所述第二数据文件发送至服务端,用于数据解析。
服务端包括任何的用于解析崩溃问题的解析服务器,解析服务器的作用是将安卓客户端上报上来的信息解析为带有真实源码行号的调用栈,具体又分为两部分:
A、根据编译过程生成的dex中每个函数的dexPC与源码行号的关系以及上报上来的调用栈中每个栈帧的dexPC值和函数签名,得到调用栈中每个栈帧的源码行号。
B、根据编译过程中生成的mapping文件以及上一步得到的调用栈中的栈帧信息,得到每个栈帧混淆之前的类名和函数名(这是通过Proguard的retrace工具实现的)。这样就得到了带有真实源码行号的并且每个栈帧的类名方法名均是未混淆的调用栈。
本方法通过准确删除安装包中的行号信息,同时能够通过上报的指令偏移和函数名,准确的查找到文件的崩溃位置,使得在不影响安装包整体功能的前提下,有效地精简安卓应用安装包的体积(减小的体积为apk中dex文件大小的5.5%左右),进而提高应用的下载成功率,为产品带来更多用户,提高产品的推广效率。
实施例2
如图1所示,为本公开实施例的一种逻辑关系图,该逻辑关系图包括编译过程、手机终端、解析服务器、前端显示四个部分,其中编译过程为程序开发人员通过编译器进行APK的精简编辑,生成的APK安装包安装到用户手机终端,当手机终端发生崩溃或卡顿时,通过APK中的SDK获取调用栈的指令偏移值和函数名,上报至解析服务器,解析服务器解析后获得准确的崩溃位置并通过前端显示装置显示给程序开发人员,程序开发人员可以准确的定位崩溃或卡顿位置。具体如下:
如图3所示,根据本公开的具体实施方式,应用于服务器端,本公开提供一种数据解析方法,包括如下方法步骤:
步骤S302:获取第一数据文件,所述第一数据文件存储有dex文件中的指令偏移与行号的映射关系。
第一数据文件为APK文件中,保留了指令偏移与行号的映射关系的dex文件。
通过Proguard获取删除行号之前的完整的dex文件,这个dex文件保留了每个函数dexPC(指令偏移)与源码行号的关系,通过dexdump工具可以将这一关系保存为一个数据文件,用于描述每个函数dexPC(指令偏移)与源码行号的关系。这个数据文件将会被解析服务器使用。
步骤S304:获取第二数据文件,所述第二数据文件存储有所述dex文件中的函数名的混淆关系。
第二数据文件为存储有dex文件中的函数名的混淆关系的文件,应用工具retrace会将混淆之前的类名成员名与混淆之后的类名成员名的关系保存为mapping文件,这个文件也将被解析服务器使用到。例如将函数名“do sth”混淆为“d”,则mapping文件中保留“dosth”与“d”的映射关系,使得当任何人通过“d”就可以知道其实质为“dosth”。
步骤S306:获取网络上报的调用栈中每个栈帧的指令偏移值和函数签名。
网络上报为从安装了精简APK的移动终端获得,移动终端获得该APK后进行快速的安装,降低了安装APK的时间和空间,节省了数据流量,提高了用户体验性能。
移动终端可以为手机、PAD等任何安卓系统,可以运行APK的智能终端,该智能终端获得精简的APK文件后,安装运行过程中,一旦发生崩溃(例如闪屏),APK中包括的SDK就会自动获取所需要的调用栈以分析崩溃原因。SDK获取到调用栈中每个栈帧的dexPC以及函数签名后,上报至服务端进行解析即可获得。
获取网络上报的调用栈中每个栈帧的指令偏移值和函数签名方法如下:
分为两种情况:处理目标为Throwable或者Thread,这两种情况均需获得backtrace对象。
对于Throwable类型直接反射获取即可获得backtrace对象,Thread处理较为复杂,具体如下:首先通过反射得到目标Thread对象中存储其native层表示的成员,这是一个指针,下称targetPtr;然后执行Dbg类的GetThreadId函数得到目标线程的id,下称targetId;然后将targetId作为参数,执行Dbg类的suspendThread函数,之后目标线程就会暂停执行;然后将targetPtr作为参数,执行createInternalStackTrace函数,得到的返回结果就是backtrace;最后将targetId作为参数,执行Dbg类的resumeThread函数,之后目标线程就恢复执行了
得到了backtrace对象之后的流程就一样了:将backtrace强转为Object[]类型的对象(下称backtraceArr);然后取backtraceArr的第一个元素first;然后将first强转为int[]类型(32位运行情况下)或long[]类型(64位运行情况下)的对象(下称firstIL);最后取出firstIL这个数组的后半段的数据即为所有栈帧的dexPC值。
backtraceArr的大小是栈帧个数+1,因此可以得到stackCnt=backtraceArr的长度-1;之后i从0开始遍历到stackCnt-1,即遍历了所有栈帧,每个遍历过程如下:取firstIL的索引为i的元素(下称mid),这是本栈帧的方法的jmehthodID,取backtraceArr的索引为i+1的元素(下称cls),这是本栈帧的方法所在的类,然后将mid和cls从java层传递到c层,c层通过java虚拟机的ToReflectedMethod函数得到此方法对象(下称method),然后将这个method传递到java层并记录其签名(包括方法名,参数个数,各个参数的类型)即可。
这样就得到了需要的调用栈并且获得了调用栈中每个栈帧的dexPC值(指令偏移值)以及其函数签名,在安卓客户端通过网络上报到解析服务器进行处理。
步骤S308:通过所述指令偏移值和函数签名,从所述第一数据文件以及第二数据文件的关系中查找到所述每个栈帧的源码行号和混淆前的类名函数名。
服务端包括任何的用于解析崩溃问题的解析服务器,解析服务器的作用是将安卓客户端上报上来的信息解析为带有真实源码行号的调用栈,具体又分为两部分:
A、根据编译过程生成的dex中每个函数的dexPC与源码行号的关系以及上报上来的调用栈中每个栈帧的dexPC值和函数签名,得到调用栈中每个栈帧的源码行号。
B、根据编译过程中生成的mapping文件以及上一步得到的调用栈中的栈帧信息,得到每个栈帧混淆之前的类名和函数名(这是通过Proguard的retrace工具实现的)。这样就得到了带有真实源码行号的并且每个栈帧的类名方法名均是未混淆的调用栈。
可选的,还包括如下方法步骤:
步骤S310:通过所述源码行号和混淆前的类名函数名,确定出准确的调用栈;显示所述调用栈信息。
一旦通过所述源码行号和混淆前的类名函数名,确定出准确的调用栈,就发送到前端进行显示,前端用于显示经过解析服务器处理后的来自于安卓客户端的调用栈,为开发者解决问题和获取应用信息提供直观的可视化的界面。
本方法通过获取完整的dex文件映射关系以及函数名映射关系,能够通过上报的指令偏移和函数名,准确的查找到文件的崩溃位置,使得在不影响安装包整体功能的前提下,有效地精简安卓应用安装包的体积(减小的体积为apk中dex文件大小的5.5%左右),进而提高应用的下载成功率,为产品带来更多用户,提高产品的推广效率。
实施例3
如图1所示,为本公开实施例的一种逻辑关系图,该逻辑关系图包括编译过程、手机终端、解析服务器、前端显示四个部分,其中编译过程为程序开发人员通过编译器进行APK的精简编辑,生成的APK安装包安装到用户手机终端,当手机终端发生崩溃或卡顿时,通过APK中的SDK获取调用栈的指令偏移值和函数名,上报至解析服务器,解析服务器解析后获得准确的崩溃位置并通过前端显示装置显示给程序开发人员,程序开发人员可以准确的定位崩溃或卡顿位置。本实施例承接实施例1,用于实现如实施例1所述的方法步骤,基于相同的名称含义的解释与实施例1相同,具有与实施例1相同的技术效果,此处不再赘述。
如图4所示,根据本公开的具体实施方式,本公开提供一种安装包精简装置,包括获取单元402、第一存储单元404、第二存储单元406。
获取单元402:获取APK中的dex文件。
第一存储单元404:通过第一文件应用工具,将所述dex文件中的指令偏移与行号的映射关系保存为第一数据文件。
第二存储单元406:通过第二文件应用工具,删除所述dex文件中的行号文件,形成精简的安装包文件。
可选的,还包括:
第三存储单元(未图示):通过第三文件应用工具,将所述dex文件中的函数名的混淆关系保存为第二数据文件。
可选的,还包括:
第一、将所述第一数据文件发送至服务端,用于数据解析。
第二、将所述精简的安装包文件发送至移动终端供安装。
第三、将所述第二数据文件发送至服务端,用于数据解析。
本装置通过准确删除安装包中的行号信息,同时能够通过上报的指令偏移和函数名,准确的查找到文件的崩溃位置,使得在不影响安装包整体功能的前提下,有效地精简安卓应用安装包的体积(减小的体积为apk中dex文件大小的5.5%左右),进而提高应用的下载成功率,为产品带来更多用户,提高产品的推广效率。
实施例4
如图1所示,为本公开实施例的一种逻辑关系图,该逻辑关系图包括编译过程、手机终端、解析服务器、前端显示四个部分,其中编译过程为程序开发人员通过编译器进行APK的精简编辑,生成的APK安装包安装到用户手机终端,当手机终端发生崩溃或卡顿时,通过APK中的SDK获取调用栈的指令偏移值和函数名,上报至解析服务器,解析服务器解析后获得准确的崩溃位置并通过前端显示装置显示给程序开发人员,程序开发人员可以准确的定位崩溃或卡顿位置。本实施例承接实施例2,用于实现如实施例2所述的方法步骤,基于相同的名称含义的解释与实施例2相同,具有与实施例2相同的技术效果,此处不再赘述。
如图5所示,根据本公开的具体实施方式,应用于服务器端,本公开提供一种数据解析装置,包括第一获取单元502、第二获取单元504、第三获取单元506、查找单元508。
第一获取单元502:获取第一数据文件,所述第一数据文件存储有dex文件中的指令偏移与行号的映射关系。
第二获取单元504:获取第二数据文件,所述第二数据文件存储有所述dex文件中的函数名的混淆关系。
第三获取单元506:获取网络上报的调用栈中每个栈帧的指令偏移值和函数签名。
查找单元508:通过所述指令偏移值和函数签名,从所述第一数据文件以及第二数据文件的关系中查找到所述每个栈帧的源码行号和混淆前的类名函数名。
可选的,还包括:
确定单元(未图示):通过所述源码行号和混淆前的类名函数名,确定出准确的调用栈;显示所述调用栈信息。
本装置通过获取完整的dex文件映射关系以及函数名映射关系,能够通过上报的指令偏移和函数名,准确的查找到文件的崩溃位置,使得在不影响安装包整体功能的前提下,有效地精简安卓应用安装包的体积(减小的体积为apk中dex文件大小的5.5%左右),进而提高应用的下载成功率,为产品带来更多用户,提高产品的推广效率。
实施例5
如图6所示,本实施例提供一种电子设备,该设备用于行程推荐,所述电子设备,包括:至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行如上实施例所述的方法步骤。
实施例6
本公开实施例提供了一种非易失性计算机存储介质,所述计算机存储介质存储有计算机可执行指令,该计算机可执行指令可执行如上实施例所述的方法步骤。
实施例7
下面参考图6,其示出了适于用来实现本公开实施例的电子设备的结构示意图。本公开实施例中的终端设备可以包括但不限于诸如移动电话、笔记本电脑、数字广播接收器、PDA(个人数字助理)、PAD(平板电脑)、PMP(便携式多媒体播放器)、车载终端(例如车载导航终端)等等的移动终端以及诸如数字TV、台式计算机等等的固定终端。图6示出的电子设备仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图6所示,电子设备可以包括处理装置(例如中央处理器、图形处理器等)601,其可以根据存储在只读存储器(ROM)602中的程序或者从存储装置608加载到随机访问存储器(RAM)603中的程序而执行各种适当的动作和处理。在RAM 603中,还存储有电子设备操作所需的各种程序和数据。处理装置601、ROM 602以及RAM 603通过总线605彼此相连。输入/输出(I/O)接口605也连接至总线605。
通常,以下装置可以连接至I/O接口605:包括例如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等的输入装置606;包括例如液晶显示器(LCD)、扬声器、振动器等的输出装置605;包括例如磁带、硬盘等的存储装置608;以及通信装置605。通信装置605可以允许电子设备与其他设备进行无线或有线通信以交换数据。虽然图6示出了具有各种装置的电子设备,但是应理解的是,并不要求实施或具备所有示出的装置。可以替代地实施或具备更多或更少的装置。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信装置605从网络上被下载和安装,或者从存储装置608被安装,或者从ROM 602被安装。在该计算机程序被处理装置601执行时,执行本公开实施例的方法中限定的上述功能。
需要说明的是,本公开上述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、RF(射频)等等,或者上述的任意合适的组合。
上述计算机可读介质可以是上述电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。
可以以一种或多种程序设计语言或其组合来编写用于执行本公开的操作的计算机程序代码,上述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本公开实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。其中,单元的名称在某种情况下并不构成对该单元本身的限定。
Claims (10)
1.一种安装包精简方法,其特征在于,包括:
获取安装包中的dex文件;
通过第一文件应用工具,将所述dex文件中的指令偏移与行号的映射关系保存为第一数据文件;
通过第二文件应用工具,删除所述dex文件中的行号文件,形成精简的安装包文件。
2.如权利要求1所述的方法,其特征在于,还包括:
通过第三文件应用工具,将所述dex文件中的函数名的混淆关系保存为第二数据文件。
3.如权利要求2所述的方法,其特征在于,还包括:
将所述第一数据文件发送至服务端,用于数据解析;和/或
将所述精简的安装包文件发送至移动终端供安装;和/或
将所述第二数据文件发送至服务端,用于数据解析。
4.如权利要求3所述的方法,其特征在于,
所述精简的安装包文件中包括sdk文件,所述sdk文件用于从所述移动终端中获取调用栈中每个栈帧的指令偏移值和函数签名。
5.一种数据解析方法,其特征在于,包括:
获取第一数据文件,所述第一数据文件存储有dex文件中的指令偏移与行号的映射关系;
获取第二数据文件,所述第二数据文件存储有所述dex文件中的函数名的混淆关系;
获取网络上报的调用栈中每个栈帧的指令偏移值和函数签名;
通过所述指令偏移值和函数签名,从所述第一数据文件以及第二数据文件的关系中查找到所述每个栈帧的源码行号和混淆前的类名函数名。
6.如权利要求5所述的方法,其特征在于,还包括:
通过所述源码行号和混淆前的类名函数名,确定出准确的调用栈;
显示所述调用栈信息。
7.一种安装包体积精简装置,其特征在于,包括:
获取单元,用于获取安装包中的dex文件;
第一存储单元,用于通过第一文件应用工具,将所述dex文件中的指令偏移与行号的映射关系保存为第一数据文件;
第二存储单元,用于通过第二文件应用工具,删除所述dex文件中的行号文件,形成精简的安装包文件。
8.一种数据解析装置,其特征在于,包括:
第一获取单元,用于获取第一数据文件,所述第一数据文件存储有dex文件中的指令偏移与行号的映射关系;
第二获取单元,用于获取第二数据文件,所述第二数据文件存储有所述dex文件中的函数名的混淆关系;
第三获取单元,用于获取网络上报的调用栈中每个栈帧的指令偏移值和函数签名;
查找单元,用于通过所述指令偏移值和函数签名,从所述第一数据文件以及第二数据文件的关系中查找到所述每个栈帧的源码行号和混淆前的类名函数名。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1至6中任一项所述的方法。
10.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现如权利要求1至6中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910710333.6A CN110489159A (zh) | 2019-08-02 | 2019-08-02 | 安装包精简方法及数据解析方法、装置、介质和设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910710333.6A CN110489159A (zh) | 2019-08-02 | 2019-08-02 | 安装包精简方法及数据解析方法、装置、介质和设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110489159A true CN110489159A (zh) | 2019-11-22 |
Family
ID=68549334
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910710333.6A Pending CN110489159A (zh) | 2019-08-02 | 2019-08-02 | 安装包精简方法及数据解析方法、装置、介质和设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110489159A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111240738A (zh) * | 2020-01-20 | 2020-06-05 | 北京无限光场科技有限公司 | 文件处理方法、装置、设备及介质 |
CN111562928A (zh) * | 2020-04-28 | 2020-08-21 | 北京字节跳动网络技术有限公司 | 资源提供方法及装置、资源下载方法及装置 |
CN111813641A (zh) * | 2020-06-19 | 2020-10-23 | 北京字节跳动网络技术有限公司 | 崩溃信息收集的方法、装置、介质和设备 |
CN113190237A (zh) * | 2021-05-10 | 2021-07-30 | 北京百度网讯科技有限公司 | 数据处理方法、系统和装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106227867A (zh) * | 2016-07-29 | 2016-12-14 | 努比亚技术有限公司 | 一种文件管理的方法及装置 |
WO2018199366A1 (ko) * | 2017-04-28 | 2018-11-01 | 라인 가부시키가이샤 | 덱스 파일의 난독화 적용 여부의 탐지 및 보안성 평가를 위한 방법 및 시스템 |
CN109558145A (zh) * | 2017-09-26 | 2019-04-02 | 北京金山安全软件有限公司 | 一种面向安卓应用的安装包体积优化方法及装置 |
-
2019
- 2019-08-02 CN CN201910710333.6A patent/CN110489159A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106227867A (zh) * | 2016-07-29 | 2016-12-14 | 努比亚技术有限公司 | 一种文件管理的方法及装置 |
WO2018199366A1 (ko) * | 2017-04-28 | 2018-11-01 | 라인 가부시키가이샤 | 덱스 파일의 난독화 적용 여부의 탐지 및 보안성 평가를 위한 방법 및 시스템 |
CN109558145A (zh) * | 2017-09-26 | 2019-04-02 | 北京金山安全软件有限公司 | 一种面向安卓应用的安装包体积优化方法及装置 |
Non-Patent Citations (3)
Title |
---|
HACKER_BIN1234: "Android 混淆器 ProGuard (一定程度防止反编译)", 《HTTPS://BLOG.CSDN.NET/VALLAY_STAR/ARTICLE /DETAILS/7078036》 * |
MPAAS: "支付宝 App 构建优化解析:Android包大小极致压缩", 《HTTPS://JUEJIN.CN/POST/6844903712201277448》 * |
孙翌博等: "Android重包装应用程序静态分析系统的设计", 《科技资讯》 * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111240738A (zh) * | 2020-01-20 | 2020-06-05 | 北京无限光场科技有限公司 | 文件处理方法、装置、设备及介质 |
CN111240738B (zh) * | 2020-01-20 | 2023-11-21 | 北京有竹居网络技术有限公司 | 文件处理方法、装置、设备及介质 |
CN111562928A (zh) * | 2020-04-28 | 2020-08-21 | 北京字节跳动网络技术有限公司 | 资源提供方法及装置、资源下载方法及装置 |
CN111562928B (zh) * | 2020-04-28 | 2023-05-05 | 北京字节跳动网络技术有限公司 | 资源提供方法及装置、资源下载方法及装置 |
CN111813641A (zh) * | 2020-06-19 | 2020-10-23 | 北京字节跳动网络技术有限公司 | 崩溃信息收集的方法、装置、介质和设备 |
CN111813641B (zh) * | 2020-06-19 | 2024-05-17 | 北京字节跳动网络技术有限公司 | 崩溃信息收集的方法、装置、介质和设备 |
CN113190237A (zh) * | 2021-05-10 | 2021-07-30 | 北京百度网讯科技有限公司 | 数据处理方法、系统和装置 |
CN113190237B (zh) * | 2021-05-10 | 2024-01-19 | 北京百度网讯科技有限公司 | 数据处理方法、系统和装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110489159A (zh) | 安装包精简方法及数据解析方法、装置、介质和设备 | |
CN110489101B (zh) | 接口模拟方法、系统、介质和电子设备 | |
US11875437B2 (en) | Image drawing method based on target template image, apparatus, readable medium and electronic device | |
CN110865898B (zh) | 崩溃调用栈聚合的方法、装置、介质和设备 | |
CN110399848A (zh) | 视频封面生成方法、装置及电子设备 | |
CN110489179A (zh) | 获取调用栈栈帧函数签名的方法、装置、介质和设备 | |
CN110489165A (zh) | 获取调用栈栈帧指令偏移的方法、装置、介质和设备 | |
CN109739478A (zh) | 前端项目自动化构建方法、装置、存储介质及电子设备 | |
US20220094758A1 (en) | Method and apparatus for publishing video synchronously, electronic device, and readable storage medium | |
CN109873735B (zh) | H5页面的性能测试方法、装置和计算机设备 | |
CN111367516B (zh) | 应用界面生成方法、装置及电子设备 | |
CN110209315B (zh) | 用户界面中字符的显示方法、装置、电子设备及存储介质 | |
JP2021103506A (ja) | 情報を生成するための方法及び装置 | |
CN111813641B (zh) | 崩溃信息收集的方法、装置、介质和设备 | |
CN113377366B (zh) | 控件编辑方法、装置、设备、可读存储介质及产品 | |
CN110764941B (zh) | 获取调用栈栈帧指令偏移的方法、装置、介质和设备 | |
CN113377365B (zh) | 代码显示方法、装置、设备、计算机可读存储介质及产品 | |
CN111309304B (zh) | 一种生成idl文件的方法、装置、介质和电子设备 | |
CN109902726B (zh) | 简历信息处理方法及装置 | |
CN112182160B (zh) | 一种日志数据处理方法、装置、存储介质及电子设备 | |
CN110069186B (zh) | 显示应用的操作界面的方法和设备 | |
CN109976857B (zh) | 终端界面的显示控制方法、装置、存储介质及电子设备 | |
CN111752644A (zh) | 接口模拟方法、装置、设备及存储介质 | |
CN110489180A (zh) | 一种埋点上报方法、装置、介质和电子设备 | |
CN111083145A (zh) | 消息发送方法、装置及电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20191122 |
|
RJ01 | Rejection of invention patent application after publication |