CN112947929B - 应用程序安装包的构建方法、装置、计算机设备和介质 - Google Patents

应用程序安装包的构建方法、装置、计算机设备和介质 Download PDF

Info

Publication number
CN112947929B
CN112947929B CN202110118711.9A CN202110118711A CN112947929B CN 112947929 B CN112947929 B CN 112947929B CN 202110118711 A CN202110118711 A CN 202110118711A CN 112947929 B CN112947929 B CN 112947929B
Authority
CN
China
Prior art keywords
file
generating
decompiled
reserved
decompilation
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.)
Active
Application number
CN202110118711.9A
Other languages
English (en)
Other versions
CN112947929A (zh
Inventor
答奇
孙克静
魏君成
薛章斌
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Douyin Vision Co Ltd
Original Assignee
Douyin Vision Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Douyin Vision Co Ltd filed Critical Douyin Vision Co Ltd
Priority to CN202110118711.9A priority Critical patent/CN112947929B/zh
Publication of CN112947929A publication Critical patent/CN112947929A/zh
Application granted granted Critical
Publication of CN112947929B publication Critical patent/CN112947929B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/53Decompilation; Disassembly
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/61Installation
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Stored Programmes (AREA)

Abstract

本公开提供了一种应用程序安装包的构建方法、装置、计算机设备和介质,其中,该方法包括:生成包含预设空间大小的占桩代码的预留文件,基于所述预留文件生成对应的主dex文件;对所述主dex文件进行反编译得到对应的第一反编译文件;用预先生成的不含任何方法的预设文件替换所述第一反编译文件中所述预留文件对应的反编译子文件,得到第二反编译文件;基于所述第二反编译文件生成应用程序安装包APK。本公开能安全有效的在利用D8工具构建APK时,在主dex文件中预留足够的空间。

Description

应用程序安装包的构建方法、装置、计算机设备和介质
技术领域
本公开涉及计算机技术领域,具体而言,涉及一种应用程序安装包的构建方法、装置、计算机设备和介质。
背景技术
当前,主要采用D8工具构建应用程序包(Android application package,APK),但是采用D8工具构建APK时,在方法数较多的情况下,会导致构成APK的主dex(文件扩展名)文件的方法数会接近上限,没有多余的空间去存储外部的字节码。
发明内容
有鉴于此,本公开实施例至少提供一种应用程序安装包的构建方法、装置、计算机设备和介质,通过编译工具在构建APK文件的过程中,在主dex文件中预留一部分空间。
第一方面,本公开实施例提供了一种应用程序安装包的构建方法,包括:生成包含预设空间大小的占桩代码的预留文件,基于所述预留文件生成对应的主dex文件;对所述主dex文件进行反编译得到对应的第一反编译文件;用预先生成的不包含任何方法的预设文件替换所述第一反编译文件中所述预留文件对应的反编译子文件,得到第二反编译文件;基于所述第二反编译文件生成应用程序安装包APK。
在一种可能的实施方式中,所述生成包含预设空间大小的占桩代码的预留文件,包括:获取所述预设空间大小;基于所述预设空间大小,通过脚本生成包含所述预设空间大小的所述占桩代码的Java类文件;以及基于所述Java类文件生成包含所述预设空间大小的所述占桩代码的class类文件;确定所述class类文件为所述预留文件。
在一种可能的实施方式中,所述基于所述第二反编译文件生成应用程序安装包APK,包括:调用编译工具编译所述第二反编译文件生成目标主dex文件;基于所述目标主dex文件生成所述APK。
在一种可能的实施方式中,按照以下流程生成所述预设文件:通过脚本生成不包含任何方法的Java类文件,所述不包含任何方法的Java类文件中不包含任何方法;以及基于所述不包含任何方法的Java类文件生成不包含任何方法的class类文件;基于所述反编译子文件的类型,将所述不包含任何方法的class类文件转换为与所述反编译子文件的类型相同的所述预设文件。
在一种可能的实施方式中,所述基于所述预留文件生成对应的主dex文件,包括:基于所述预留文件调用构建工具生成对应的主dex文件,所述编译工具包括D8工具;所述对所述主dex文件进行反编译得到对应的第一反编译文件,包括:调用编译工具对所述主dex文件进行反编译得到对应的第一反编译文件,所述编译工具包括basksmali工具,所述反编译子文件的类型包括smali文件。
在一种可能的实施方式中,所述占桩代码包括空方法。
第二方面,本公开实施例还提供一种应用程序安装包的构建装置,包括:第一生成模块,用于生成包含预设空间大小的占桩代码的预留文件,基于所述预留文件生成对应的主dex文件;反编译模块,用于对所述主dex文件进行反编译得到对应的第一反编译文件;替换模块,用于用预先生成的不包含任何方法的预设文件替换所述第一反编译文件中所述预留文件对应的反编译子文件,得到第二反编译文件;第二生成模块,用于基于所述第二反编译文件生成应用程序安装包APK。
在一种可能的实施方式中,在生成包含预设空间大小的占桩代码的预留文件时,所述第一生成模块,具体用于获取所述预设空间大小;基于所述预设空间大小,通过脚本生成包含所述预设空间大小的所述占桩代码的Java类文件;以及基于所述Java类文件生成包含所述预设空间大小的所述占桩代码的class类文件;确定所述class类文件为所述预留文件。
在一种可能的实施方式中,在基于所述第二反编译文件生成应用程序安装包APK时,所述第二生成模块,具体用于调用编译工具编译所述第二反编译文件生成目标主dex文件;基于所述目标主dex文件生成所述APK。
在一种可能的实施方式中,所述第一生成模块,还用于按照下述方法生成所述预设文件:通过脚本生成不包含任何方法的Java类文件,所述不包含任何方法的Java类文件中不包含任何方法;以及基于所述不包含任何方法的Java类文件生成不包含任何方法的class类文件;基于所述反编译子文件的类型,将所述不包含任何方法的class类文件转换为与所述反编译子文件的类型相同的所述预设文件。
在一种可能的实施方式中,在基于所述预留文件生成对应的主dex文件时,所述第一生成模块,具体用于基于所述预留文件调用构建工具生成对应的主dex文件,所述编译工具包括D8工具;
在对所述主dex文件进行反编译得到对应的第一反编译文件时,所述反编译模块,具体用于调用编译工具对所述主dex文件进行反编译得到对应的第一反编译文件,所述编译工具包括basksmali工具,所述反编译子文件的类型包括smali文件。
在一种可能的实施方式中,所述占桩代码包括空方法。
第三方面,本公开实施例还提供一种计算机设备,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当计算机设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤。
第四方面,本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤。
关于上述应用程序安装包的构建装置、计算机设备、及计算机可读存储介质的效果描述参见上述应用程序安装包的构建方法的说明,这里不再赘述。
本公开实施例提供的应用程序安装包的构建方法、装置计算机设备及介质,能在通过D8工具构建APK的过程中,在构成主dex文件的预留文件中生成包含预设空间大小的占桩代码,然后将主dex文件反编译得到第一反编译文件,利用不包含任何方法的预设文件替换第一反编译文件中预留文件对应的反编译子文件得到第二反编译文件,基于替换后的第二反编译文件重新编译成新的主dex文件后构建APK,这样就在构建APK的主dex文件中包含了一个预设空间大小的预留空间,实现利用D8工具构建APK文件时,在主dex文件中预留空间。
为使本公开的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,此处的附图被并入说明书中并构成本说明书中的一部分,这些附图示出了符合本公开的实施例,并与说明书一起用于说明本公开的技术方案。应当理解,以下附图仅示出了本公开的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1示出了本公开实施例所提供的一种应用程序安装包的构建方法的流程图;
图2示出了本公开实施例所提供的一种生成包含预设空间大小的占桩代码的预留文件的流程图;
图3示出了本公开实施例所提供的一种生成预设文件的方法的流程图;
图4示出了本公开实施例所提供的一种基于第二反编译文件生成APK的方法的流程图;
图5示出了本公开实施例所提供的一种应用程序安装包的构建装置的示意图;
图6示出了本公开实施例所提供的一种计算机设备的示意图。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本公开实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本公开的实施例的详细描述并非旨在限制要求保护的本公开的范围,而是仅仅表示本公开的选定实施例。基于本公开的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
另外,本公开实施例中的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。
在本文中提及的“多个或者若干个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
经研究发现,APK中包含主dex文件和非主dex文件,每个dex文件的方法数量不得超过64千字节(Kilobyte,KB),否则就会出现dex文件生成失败,在使用D8工具构建APK时,在方法数较多的情况下,D8工具会将这些方法优先写入主dex文件中,而且开发人员无法判断哪些方法是一定要放在主dex文件中的,不能贸然的将主dex文件中方法移动到非主dex文件中,主dex文件中方法数会达到上限64KB,没有多余的空间去存储外部的字节码。
基于上述研究,本公开提供了一种应用程序安装包的构建方法、装置计算机设备及介质,能在通过D8工具构建APK的过程中,在构成主dex文件的预留文件中生成包含预设空间大小的占桩代码,然后将基于主dex文件反编译得到第一反编译文件,因为占桩代码不是必须存放在主dex文件中的,替换后不会对最终生成的APK造成影响,所以可以利用不包含任何方法的预设文件替换第一反编译文件中预留文件对应反编译子文件,基于替换后的第二反编译文件重新编译新的主dex文件后构建APK,这样就在构建APK的主dex文件中包含了一个预设空间大小的预留空间,实现利用D8工具构建APK文件时,在主dex文件中预留空间。
针对以上方案所存在的缺陷,均是发明人在经过实践并仔细研究后得出的结果,因此,上述问题的发现过程以及下文中本公开针对上述问题所提出的解决方案,都应该是发明人在本公开过程中对本公开做出的贡献。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
为便于对本实施例进行理解,首先对本公开实施例所公开的一种应用程序安装包的构建方法进行详细介绍,本公开实施例所提供的应用程序安装包的构建方法的执行主体一般为具有一定计算能力的计算机设备,该计算机设备例如包括:终端设备或服务器或其它处理设备,终端设备可以为用户设备(User Equipment,UE)、移动设备、用户终端、终端、蜂窝电话、无绳电话、个人数字助理(Personal Digital Assistant,PDA)、手持设备、计算设备、车载设备、可穿戴设备等。在一些可能的实现方式中,该应用程序安装包的构建方法可以通过处理器调用存储器中存储的计算机可读指令的方式来实现。
下面以执行主体为计算机设备为例对本公开实施例提供的应用程序安装包的构建方法加以说明。
实施例一
参见图1所示,为本公开实施例一提供的应用程序安装包的构建方法的流程图,所述方法包括以下步骤:
S101:生成包含预设空间大小的占桩代码的预留文件,基于预留文件生成对应的主dex文件。
其中,占桩代码为在实施过程不被使用的代码,例如可以是空方法。
计算机中用来表示存储空间大小的最基本容量单位是字节(Byte),字节是通过网络传输信息(或在硬盘或内存中存储信息)的单位。计算机中最小的数据单位是比特(binary digit,bit),每8个位(bit)组成一个字节(byte),但表示存储容量最基本的单位是Byte。
1KB=1024B(字节);1MB=1024KB=1048576B(字节);1GB=1024MB=1073741824B(字节)。其中,KB中的K表示“千”,1024KB,就是100万,所以MB中的M表示“百万”,即million,1024MB,也就是千兆,就用GB表示了,即gigabyte。
具体实施时,根据预设空间大小,可以按照图2所示的流程生成包含预设空间大小的占桩代码的预留文件:
S201:获取预设空间大小,基于预设空间大小,通过脚本生成包含预设空间大小的占桩代码的Java类文件。
其中,预设空间大小可以基于实际情况决定。例如,预设空间大小为30KB,通过脚本生成一个包含30KB占桩代码的Java类文件即一个包含30KB占桩代码DexStub.Java类文件,如下所示,
public class DexStub{
public void foo1(){}
public void foo2(){}
……………………
public void foo30000(){}
}
S202:基于Java类文件生成包含预设空间大小的占桩代码的class类文件。
根据步骤S201中生成的包含30KB占桩代码的DexStub.Java类文件生成DexStub.Class文件。
S203:确定class类文件为预留文件。
DexStub.Class文件就是包含预设空间大小占桩代码的预留文件,当预设空间大小为30KB,则DexStub.Class文件就包含30KB占桩代码。
具体实施时,基于预留文件调用构建工具生成对应的主dex文件。构建工具例如可以是D8工具,这里不做限定。
示例性的,利用multidex工具构建APK过程中,主dex文件为主dex文件,在生成预留文件即DexStub.Class文件后,在安卓工程中的自定义的Application子类中增加一个调用,形式如下,
public class CustomApplication extends Application{
@Override
public void attachBaseContext(Context base){
super.attach BaseContext(base);
android.util.Log.d(“whatever”,””,+DexStub.Class);
Multidex.install(this);
}
}
在attachBaseContext方法中的Multidex#install方法之前引用到DexStub.Class类,multidex工具在构建APK时,会将类安排在主dex文件中。
承接上述S101,
S102:对主dex文件进行反编译得到对应的第一反编译文件。
具体实施时,调用编译工具对主dex文件进行反编译得到对应的第一反编译文件。编译工具有多种,例如可以是basksmali工具,这里不做限定。
示例性的,利用basksmali工具对主dex文件即主dex文件进行反编译得到反编译文件,反编译文件中包含DexStub.Class类文件即预留文件对应的反DexStub.Smali文件即反编译子文件,该DexStub.Smali文件包含30KB的占桩代码。
S103:用预先生成的不含任何方法的预设文件替换第一反编译文件中预留文件对应的反编译子文件,得到第二反编译文件。
具体实施时,第一反编译文件包括预留文件对应的反编译子文件,这里预先生成的预设文件的类型与反编译子文件的类型是相同的。
例如,预留文件对应的反编译子文件的类型是Smali文件,则预设文件就是一个不包含任何方法的Smali文件。
如图3所示,为本公开实施例提供的一种生成预设文件的方法流程图,包括:
S301:通过脚本生成不包含任何方法的Java类文件。
例如,生成一个没有任何方法的Java类文件,即一个空的DexStub类文件,如下所示,
Public class DexStub{
}
S302:基于不包含任何方法的Java类文件生成不包含任何方法的class类文件。
基于S301中生成的空的DexStub类文件生成不包含任何方法的class类文件,即空的DexStub.Class文件。
S303:基于反编译子文件的类型,将不包含任何方法的class类文件转换为与反编译子文件的类型相同类型的预设文件。
具体实施时,转换文件类型的工具有很多种,这里不做限定,为了说明,以反编译子文件的类型为DexStub.Smali文件为例,可以使用dx工具根据空的DexStub.Class文件生成空的DexStub.dx文件,再使用basksmali工具将空的DexStub.dx文件转换为空的DexStub.Smali文件。
承接上述S103,将第一反编译文件中预留文件对应的反编译子文件替换成不包含任何方法的预设文件后就得到一个新的反编译文件,即第二反编译文件。
示例性的,在利用不包含任何方法的DexStub.Smali文件替换反编译文件中DexStub.Class类文件即预留文件对应的DexStub.Smali文件即反编译子文件,替换后的反编译文件即为第二反编译文件。
S104:基于第二反编译文件生成应用程序安装包APK。
具体实施时,可以按照但不限于图4所示的方法,基于第二反编译文件生成APK:
S401:调用编译工具编译第二反编译文件生成目标主dex文件。
具体实施时,可以但不限于调用basksmali工具将第二反编译文件编译为目标主dex文件。
S402:基于目标主dex文件生成APK。
基于目标主dex文件生成APK,目标主dex文件中包含30KB的预留空间。
本公开实施例通过在构建应用程序包的过程中,在主dex文件中生成一个包含设空间大小的占桩代码的预留文件,通过编译工具反编译主dex文件得到第一反编译文件,在第一反编译文件中得到预留文件对应的反编译子文件,将反编译子文件替换为一个同类型的不包含任何方法的预设文件,相较于现有技术中通过D8工具构建主dex文件时需要占满整个主dex文件,安全有效的在主dex文件中预留足够的空间。
本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的撰写顺序并不意味着严格的执行顺序而对实施过程构成任何限定,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。
基于同一发明构思,本公开实施例中还提供了与应用程序安装包的构建方法对应的应用程序安装包的构建装置,由于本公开实施例中的装置解决问题的原理与本公开实施例上述应用程序安装包的构建方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
实施例二
参照图5所示,为本公开实施例二提供的一种应用程序安装包的构建装置示意图,所述装置包括:第一生成模块501、反编译模块502、替换模块503和第二生成模块504;其中,
第一生成模块501,用于生成包含预设空间大小的占桩代码的预留文件,基于所述预留文件生成对应的主dex文件;
反编译模块502,用于对所述主dex文件进行反编译得到对应的第一反编译文件;
替换模块503,用于用预先生成的不含任何方法的预设文件替换所述第一反编译文件中所述预留文件对应的反编译子文件,得到第二反编译文件;
第二生成模块504,用于基于所述第二反编译文件生成应用程序安装包APK。
在一种可能的实施方式中,在生成包含预设空间大小的占桩代码的预留文件时,所述第一生成模块,具体用于获取所述预设空间大小;基于所述预设空间大小,通过脚本生成包含所述预设空间大小的所述占桩代码的Java类文件;以及基于所述Java类文件生成包含所述预设空间大小的所述占桩代码的class类文件;确定所述class类文件为所述预留文件。
在一种可能的实施方式中,在基于所述第二反编译文件生成应用程序安装包APK时,所述第二生成模块,具体用于调用编译工具编译所述第二反编译文件生成目标主dex文件;基于所述目标主dex文件生成所述APK。
在一种可能的实施方式中,所述第一生成模块,还用于按照下述方法生成所述预设文件:通过脚本生成不包含任何方法的Java类文件,所述不包含任何方法的Java类文件中不包含任何方法;以及基于所述不包含任何方法的Java类文件生成不包含任何方法的class类文件;基于所述反编译子文件的类型,将所述不包含任何方法的class类文件转换为与所述反编译子文件的类型相同的所述预设文件。
在一种可能的实施方式中,在基于所述预留文件生成对应的主dex文件时,所述第一生成模块,具体用于基于所述预留文件调用构建工具生成对应的主dex文件,所述编译工具包括D8工具;
在对所述主dex文件进行反编译得到对应的第一反编译文件时,所述反编译模块,具体用于调用编译工具对所述主dex文件进行反编译得到对应的第一反编译文件,所述编译工具包括basksmali工具,所述反编译子文件的类型包括smali文件。
在一种可能的实施方式中,所述占桩代码包括空方法。
关于装置中的各模块的处理流程、以及各模块之间的交互流程的描述可以参照上述方法实施例中的相关说明,这里不再详述。
实施例三
本公开实施例还提供了一种计算机设备,如图6所示,为本公开实施例三提供的计算机设备结构示意图,包括:
处理器61和存储器62;所述存储器62存储有处理器61可执行的机器可读指令,处理器61用于执行存储器62中存储的机器可读指令,所述机器可读指令被处理器61执行时,处理器61执行下述步骤:S101:生成包含预设空间大小的占桩代码的预留文件,基于预留文件生成对应的主dex文件;S102:对主dex文件进行反编译得到对应的第一反编译文件;S103:用预先生成的不含任何方法的预设文件替换第一反编译文件中预留文件对应的反编译子文件,得到第二反编译文件;S104:基于第二反编译文件生成应用程序安装包APK。
上述存储器62包括内存621和外部存储器622;这里的内存621也称内存储器,用于暂时存放处理器61中的运算数据,以及与硬盘等外部存储器622交换的数据,处理器61通过内存621与外部存储器622进行数据交换。
本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法实施例中所述的应用程序安装包的构建方法的步骤。其中,该存储介质可以是易失性或非易失的计算机可读取存储介质。
本公开实施例还提供一种计算机程序产品,该计算机程序产品承载有程序代码,所述程序代码包括的指令可用于执行上述方法实施例中所述的应用程序安装包的构建方法的步骤,具体可参见上述方法实施例,在此不再赘述。
其中,上述计算机程序产品可以具体通过硬件、软件或其结合的方式实现。在一个可选实施例中,所述计算机程序产品具体体现为计算机存储介质,在另一个可选实施例中,计算机程序产品具体体现为软件产品,例如软件开发包(Software Development Kit,SDK)等等。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的***和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本公开所提供的几个实施例中,应该理解到,所揭露的***、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述实施例,仅为本公开的具体实施方式,用以说明本公开的技术方案,而非对其限制,本公开的保护范围并不局限于此,尽管参照前述实施例对本公开进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本公开实施例技术方案的精神和范围,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应所述以权利要求的保护范围为准。

Claims (14)

1.一种应用程序安装包的构建方法,其特征在于,包括:
生成包含预设空间大小的占桩代码的预留文件,基于所述预留文件生成对应的主dex文件;
对所述主dex文件进行反编译得到对应的第一反编译文件;
用预先生成的不包含任何方法的预设文件替换所述第一反编译文件中所述预留文件对应的反编译子文件,得到第二反编译文件;
基于所述第二反编译文件生成应用程序安装包APK。
2.基于权利要求1所述的构建方法,其特征在于,所述生成包含预设空间大小的占桩代码的预留文件,包括:
获取所述预设空间大小;
基于所述预设空间大小,通过脚本生成包含所述预设空间大小的所述占桩代码的Java类文件;以及
基于所述Java类文件生成包含所述预设空间大小的所述占桩代码的class类文件;
确定所述class类文件为所述预留文件。
3.基于权利要求1所述的构建方法,其特征在于,所述基于所述第二反编译文件生成应用程序安装包APK,包括:
调用编译工具编译所述第二反编译文件生成目标主dex文件;
基于所述目标主dex文件生成所述APK。
4.基于权利要求1或3所述的构建方法,其特征在于,按照以下流程生成所述预设文件:
通过脚本生成不包含任何方法的Java类文件;以及
基于所述不包含任何方法的Java类文件生成不包含任何方法的class类文件;
基于所述反编译子文件的类型,将所述不包含任何方法的class类文件转换为与所述反编译子文件的类型相同的所述预设文件。
5.根据权利要求3所述的构建方法,其特征在于,所述基于所述预留文件生成对应的主dex文件,包括:
基于所述预留文件调用构建工具生成对应的主dex文件,所述编译工具包括D8工具;
所述对所述主dex文件进行反编译得到对应的第一反编译文件,包括:
调用编译工具对所述主dex文件进行反编译得到对应的第一反编译文件,所述编译工具包括basksmali工具,所述反编译子文件的类型包括smali文件。
6.根据权利要求1所述的构建方法,其特征在于,所述占桩代码包括空方法。
7.一种应用程序安装包的构建装置,其特征在于,包括:
第一生成模块,用于生成包含预设空间大小的占桩代码的预留文件,基于所述预留文件生成对应的主dex文件;
反编译模块,用于对所述主dex文件进行反编译得到对应的第一反编译文件;
替换模块,用于用预先生成的不包含任何方法的预设文件替换所述第一反编译文件中所述预留文件对应的反编译子文件,得到第二反编译文件;
第二生成模块,用于基于所述第二反编译文件生成应用程序安装包APK。
8.根据权利要求7所述的构建装置,其特征在于,在生成包含预设空间大小的占桩代码的预留文件时,所述第一生成模块,具体用于获取所述预设空间大小;基于所述预设空间大小,通过脚本生成包含所述预设空间大小的所述占桩代码的Java类文件;以及基于所述Java类文件生成包含所述预设空间大小的所述占桩代码的class类文件;确定所述class类文件为所述预留文件。
9.根据权利要求7所述的构建装置,其特征在于,在基于所述第二反编译文件生成应用程序安装包APK时,所述第二生成模块,具体用于调用编译工具编译所述第二反编译文件生成目标主dex文件;基于所述目标主dex文件生成所述APK。
10.根据权利要求7或9所述的构建装置,其特征在于,所述第一生成模块,还用于按照下述方法生成所述预设文件:通过脚本生成不包含任何方法的Java类文件,所述不包含任何方法的Java类文件中不包含任何方法;以及基于所述不包含任何方法的Java类文件生成不包含任何方法的class类文件;基于所述反编译子文件的类型,将所述不包含任何方法的class类文件转换为与所述反编译子文件的类型相同的所述预设文件。
11.根据权利要求9所述的构建装置,其特征在于,在基于所述预留文件生成对应的主dex文件时,所述第一生成模块,具体用于基于所述预留文件调用构建工具生成对应的主dex文件,所述编译工具包括D8工具;
在对所述主dex文件进行反编译得到对应的第一反编译文件时,所述反编译模块,具体用于调用编译工具对所述主dex文件进行反编译得到对应的第一反编译文件,所述编译工具包括basksmali工具,所述反编译子文件的类型包括smali文件。
12.根据权利要求7所述的构建装置,其特征在于,所述占桩代码包括空方法。
13.一种计算机设备,其特征在于,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当计算机设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行如权利要求1至6任一项所述的应用程序安装包的构建方法的步骤。
14.一种计算机可读存储介质,其特征在于,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行如权利要求1至6任一项所述的应用程序安装包的构建方法的步骤。
CN202110118711.9A 2021-01-28 2021-01-28 应用程序安装包的构建方法、装置、计算机设备和介质 Active CN112947929B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110118711.9A CN112947929B (zh) 2021-01-28 2021-01-28 应用程序安装包的构建方法、装置、计算机设备和介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110118711.9A CN112947929B (zh) 2021-01-28 2021-01-28 应用程序安装包的构建方法、装置、计算机设备和介质

Publications (2)

Publication Number Publication Date
CN112947929A CN112947929A (zh) 2021-06-11
CN112947929B true CN112947929B (zh) 2023-11-24

Family

ID=76238691

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110118711.9A Active CN112947929B (zh) 2021-01-28 2021-01-28 应用程序安装包的构建方法、装置、计算机设备和介质

Country Status (1)

Country Link
CN (1) CN112947929B (zh)

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103970659A (zh) * 2014-05-16 2014-08-06 刘玉光 基于插桩技术的安卓应用软件自动化测试方法
CN107038103A (zh) * 2017-04-14 2017-08-11 上海交通大学 基于字节码插桩的Android程序监控***及方法
CN107168749A (zh) * 2017-05-31 2017-09-15 腾讯科技(深圳)有限公司 一种编译方法、装置、设备和计算机可读存储介质
CN107766096A (zh) * 2016-08-19 2018-03-06 阿里巴巴集团控股有限公司 应用程序安装包的生成方法、应用程序的运行方法及装置
CN107832619A (zh) * 2017-10-10 2018-03-23 电子科技大学 Android平台下应用程序漏洞自动化挖掘***及方法
CN108427552A (zh) * 2018-03-01 2018-08-21 深圳市创梦天地科技有限公司 安卓应用安装包制作装置、方法、电子设备以及存储介质
WO2018192025A1 (zh) * 2017-04-19 2018-10-25 北京洋浦伟业科技发展有限公司 安卓平台上可执行程序的保护方法
CN110134400A (zh) * 2019-04-02 2019-08-16 北京奇艺世纪科技有限公司 数据获取方法、装置、电子设备及计算机可读存储介质
CN110297655A (zh) * 2019-06-21 2019-10-01 百度在线网络技术(北京)有限公司 生成补丁包的方法、装置、设备及存储介质

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103970659A (zh) * 2014-05-16 2014-08-06 刘玉光 基于插桩技术的安卓应用软件自动化测试方法
CN107766096A (zh) * 2016-08-19 2018-03-06 阿里巴巴集团控股有限公司 应用程序安装包的生成方法、应用程序的运行方法及装置
CN107038103A (zh) * 2017-04-14 2017-08-11 上海交通大学 基于字节码插桩的Android程序监控***及方法
WO2018192025A1 (zh) * 2017-04-19 2018-10-25 北京洋浦伟业科技发展有限公司 安卓平台上可执行程序的保护方法
CN107168749A (zh) * 2017-05-31 2017-09-15 腾讯科技(深圳)有限公司 一种编译方法、装置、设备和计算机可读存储介质
CN107832619A (zh) * 2017-10-10 2018-03-23 电子科技大学 Android平台下应用程序漏洞自动化挖掘***及方法
CN108427552A (zh) * 2018-03-01 2018-08-21 深圳市创梦天地科技有限公司 安卓应用安装包制作装置、方法、电子设备以及存储介质
CN110134400A (zh) * 2019-04-02 2019-08-16 北京奇艺世纪科技有限公司 数据获取方法、装置、电子设备及计算机可读存储介质
CN110297655A (zh) * 2019-06-21 2019-10-01 百度在线网络技术(北京)有限公司 生成补丁包的方法、装置、设备及存储介质

Also Published As

Publication number Publication date
CN112947929A (zh) 2021-06-11

Similar Documents

Publication Publication Date Title
CN108964982B (zh) 用于实现区块链的多节点的部署的方法、装置及存储介质
CN108121594B (zh) 一种进程管理方法及装置
US7543118B1 (en) Multiple variance platform for the management of mobile devices
EP2897074A1 (en) Application code obfuscation device based on self-conversion and method therefor
CN104899025A (zh) 一种生成渠道包的方法和装置
CN102222012A (zh) 针对外部数据源的静态类型检查
CN106648724B (zh) 应用程序的热修复方法及终端
US8141042B2 (en) Extending portability of java code through the use of AOP
CN104933368A (zh) 一种网络安全漏洞的检测方法及装置
CN110333872B (zh) 一种应用的处理方法、装置、设备和介质
CN110059456A (zh) 代码保护方法、代码保护装置、存储介质与电子设备
KR20190030974A (ko) 자바 플랫폼에서 사용하기 쉬운 형태의 컴파일 시점 의존성 주입 방법 및 장치
CN109614772B (zh) 基于应用安装包文件的代码转换方法及装置
CN110659031A (zh) 应用程序的编译方法、装置、电子设备及存储介质
US12021845B2 (en) Method to anonymize client mac addresses for cloud reporting
CN112379940B (zh) 一种可执行文件处理方法、装置、电子设备及存储介质
CN112269644B (zh) 一种子进程调用的验证方法、***、设备及可读存储介质
CN114721688A (zh) 一种sdk升级方法、装置以及计算机设备
CN113986402A (zh) 函数调用方法、装置、电子设备及存储介质
CN105095784A (zh) 终端数据写入、读取的方法及装置
CN106598825B (zh) 电子设备、规范日志代码输出方法及装置
CN112947929B (zh) 应用程序安装包的构建方法、装置、计算机设备和介质
CN105528365A (zh) 用于管理可执行文件的方法和装置
CN105447398A (zh) 数据安全保护方法及装置
CN104506630A (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
CB02 Change of applicant information
CB02 Change of applicant information

Address after: 100041 B-0035, 2 floor, 3 building, 30 Shixing street, Shijingshan District, Beijing.

Applicant after: Douyin Vision Co.,Ltd.

Address before: 100041 B-0035, 2 floor, 3 building, 30 Shixing street, Shijingshan District, Beijing.

Applicant before: Tiktok vision (Beijing) Co.,Ltd.

Address after: 100041 B-0035, 2 floor, 3 building, 30 Shixing street, Shijingshan District, Beijing.

Applicant after: Tiktok vision (Beijing) Co.,Ltd.

Address before: 100041 B-0035, 2 floor, 3 building, 30 Shixing street, Shijingshan District, Beijing.

Applicant before: BEIJING BYTEDANCE NETWORK TECHNOLOGY Co.,Ltd.

GR01 Patent grant
GR01 Patent grant