CN112732644A - 应用程序的资源索引处理方法、计算机设备和存储介质 - Google Patents
应用程序的资源索引处理方法、计算机设备和存储介质 Download PDFInfo
- Publication number
- CN112732644A CN112732644A CN202011617047.4A CN202011617047A CN112732644A CN 112732644 A CN112732644 A CN 112732644A CN 202011617047 A CN202011617047 A CN 202011617047A CN 112732644 A CN112732644 A CN 112732644A
- Authority
- CN
- China
- Prior art keywords
- resource
- index
- file
- code
- package
- 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.)
- Granted
Links
- 238000003672 processing method Methods 0.000 title claims abstract description 23
- 238000000034 method Methods 0.000 claims abstract description 36
- 238000012545 processing Methods 0.000 claims abstract description 22
- 238000004590 computer program Methods 0.000 claims description 25
- 238000011161 development Methods 0.000 claims description 8
- 238000012986 modification Methods 0.000 claims description 8
- 230000004048 modification Effects 0.000 claims description 8
- 238000010586 diagram Methods 0.000 description 11
- 230000006870 function Effects 0.000 description 9
- 108010092377 aminoalcoholphosphotransferase Proteins 0.000 description 8
- 238000012827 research and development Methods 0.000 description 6
- 238000013507 mapping Methods 0.000 description 5
- 238000004806 packaging method and process Methods 0.000 description 4
- 230000002159 abnormal effect Effects 0.000 description 3
- 230000004927 fusion Effects 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 238000010276 construction Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/13—File access structures, e.g. distributed indices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/14—Details of searching files based on file metadata
- G06F16/148—File search processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/16—File or folder operations, e.g. details of user interfaces specifically adapted to file systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- Library & Information Science (AREA)
- Human Computer Interaction (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Stored Programmes (AREA)
Abstract
本申请涉及一种应用程序的资源索引处理方法、装置、计算机设备和存储介质,所述方法包括:获取应用程序的待合并处理的第一文件包的第一资源的资源类型和第一资源的第一索引;获取应用程序的待合并处理的第二文件包,第二文件包中包含第二代码、第二资源和第二资源的第二索引,第二代码中设置有第二索引,第二代码被运行时通过第二索引查询第二资源;当第二资源和第一资源的资源类型相同时,将第二文件包中的第二索引修改为预设索引,将第二代码中第二索引修改为预设索引,得到修改后的第二文件包,预设索引与第一索引不相同。上述方法能够使用各文件包中原有代码执行该文件包资源的查询,减少资源索引的操作。
Description
技术领域
本申请涉及应用程序资源处理技术领域,特别是涉及一种应用程序的资源索引处理方法、装置、计算机设备、存储介质及应用程序的文件包合并处理方法。
背景技术
当前应用程序的开发,涉及到应用程序的多方文件包的合并处理,再对合并后的文件包进行编译,得到应用程序的包体。如,对于游戏类的应用程序开发,涉及到研发方的文件包、发行方的文件包以及渠道方的文件包,需要将三方的文件包进行合并处理,再将合并后的文件包进行编译,得到游戏的应用程序的包体。
然而,在应用程序的多方文件包进行合并处理时,各方独立设置应用程序的资源以及资源的索引,也即是各方的文件包中包含各方设置的资源和资源索引,在合并处理时若多方设置的资源索引相同,则会导致合并后的文件包进行编译后应用程序查询资源时发生冲突,无法查询到准确的资源。传统解决此冲突的方式为:保留一方文件包中的索引,将其他方文件包的索引丢弃。保留索引的一方采用运行文件包中的代码以通过索引的方式查询对应的资源,其他未保留索引的一方则不能使用原文件包中的代码进行资源查询,只能通过资源名称查询资源索引,进而通过资源索引查询资源的方式查询对应的资源,因此导致编译后的应用程序的资源的查询性能低。
发明内容
基于此,有必要针对上述技术问题,提供一种应用程序的资源索引处理方法、装置、计算机设备、存储介质及应用程序的文件包合并处理方法,在应用程序的多方文件包进行合并处理时修改对应文件包中的资源的索引,以实现使用对应文件包中原有的代码执行该文件包中资源的查询,减少通过资源名称查询资源索引的操作,提高编译后的应用程序的资源的查询性能。
一种应用程序的资源索引处理方法,该方法包括:获取应用程序的待合并处理的第一文件包的第一资源的资源类型和第一资源的第一索引;获取应用程序的待合并处理的第二文件包,第二文件包中包含第二代码、第二资源和第二资源的第二索引,第二代码中设置有第二索引,第二代码被运行时通过第二索引查询第二资源;当第二资源的资源类型和第一资源的资源类型相同时,将第二文件包中的第二索引修改为预设索引,并且将第二代码中设置的第二索引修改为预设索引,得到修改后的第二文件包,预设索引与第一索引不相同。
一种应用程序的文件包合并处理方法,该方法包括:获取应用程序的待合并处理的第一文件包,第一文件包中包含第一代码、第一资源和第一资源的第一索引,第一代码中设置有第一索引,第一代码被运行时通过第一索引查询第一资源;获取应用程序的待合并处理的第二文件包,第二文件包中包含第二代码、第二资源和第二资源的第二索引,第二代码中设置有第二索引,第二代码被运行时通过第二索引查询第二资源;当第二资源和第一资源的资源类型相同时,将第二文件包中的第二索引修改为预设索引,并且将第二代码中设置的第二索引修改为预设索引,得到修改后的第二文件包,预设索引与第一索引不相同;将第一文件包和修改后的第二文件包进行合并处理,得到应用程序的待编译包。
一种应用程序的资源索引处理装置,该装置包括:第一获取模块,用于获取应用程序的待合并处理的第一文件包的第一资源的资源类型和第一资源的第一索引;第二获取模块,用于获取应用程序的待合并处理的第二文件包,第二文件包中包含第二代码、第二资源和第二资源的第二索引,第二代码中设置有第二索引,第二代码被运行时通过第二索引查询第二资源;修改模块,用于当第二资源的资源类型和第一资源的资源类型相同时,将第二文件包中的第二索引修改为预设索引,并且将第二代码中设置的第二索引修改为预设索引,得到修改后的第二文件包,预设索引与第一索引不相同。
一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述任一实施例方法的步骤。
一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述任一实施例方法的步骤。
上述应用程序的资源索引处理方法、装置、计算机设备和存储介质,在执行应用程序的第一文件包和第二文件包的合并处理之前,获取应用程序的待合并处理的第一文件包的第一资源的资源类型和第一资源的第一索引,获取应用程序的待合并处理的第二文件包,第二文件包中包含第二代码、第二资源和第二资源的第二索引,第二代码中设置有第二索引,第二代码被运行时通过第二索引查询第二资源,当第二资源的资源类型和第一资源的资源类型相同时,将第二文件包中的第二索引修改为预设索引,并且将第二代码中设置的第二索引修改为预设索引,得到修改后的第二文件包,预设索引与第一索引不相同。因此,在执行应用程序的第一文件包和第二文件包的合并处理之前,将第二文件包内第二资源的第二索引修改为与第一文件包中第一资源的第一索引不相同的预设索引,同时将第二文件包中第二代码内设置的第二索引修改为预设索引,从而使得修改后的第二文件包能够与第一文件包进行合并处理时,两个文件包内的索引不会发生冲突。同时,也能够使得修改后的第二文件包与第一文件包进行合并处理后,得到应用程序的待编译包。对待编译包执行编译得到应用程序时,应用程序不仅使用第一文件包中的第一代码执行第一资源的查询,同时还可使用第二文件包中的第二代码执行第二资源的查询,避免因两个文件包中资源的索引相同而使得其中一个文件包只能采用资源名称进行资源查询导致的资源查询的性能低。
附图说明
图1为一个实施例中一种应用程序的资源索引处理方法的应用环境图;
图2为一个实施例中一种应用程序的资源索引处理方法的流程示意图;
图3为一个实施例中第一文件包和第二文件包合并处理的界面显示的示意图;
图4为一个实施例中第一apk包对应的被编译代码的代码示意图;
图5为一个实施例中第一apk包对应的被编译代码执行编译后得到的第一代码的代码示意图;
图6为一个实施例中游戏的研发方代码、发行方的代码以及渠道方的代码的合成处理的流程示意图;
图7为一个实施例中AAPT工具编译完成后生成的R.java文件的代码示意图;
图8为一个实施例中代码与资源ID和资源的关系示意图;
图9为一个实施例中一种应用程序的文件包合并处理方法的流程示意图;
图10为一个实施例中一种应用程序的资源索引处理装置的结构框图;
图11为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请提供的一种应用程序的资源索引处理方法,应用于如图1所示的应用环境中。如图1所示,服务器106用于执行本申请的一种应用程序的资源索引处理方法。具体地,服务器106接收第一平台102发送的应用程序的第一程序包,通过反编译的方式可获得第一程序包中的第一文件。服务器106接收第二平台104发送的应用程序的第二程序包,通过反编译的方式可获得第二程序包中的第二文件。服务器106获取应用程序的待合并处理的第一文件包,第一文件包中包含第一代码、第一资源和第一资源的第一索引,第一代码中设置有第一索引,第一代码被运行时通过第一索引查询第一资源,进而识别到第一文件包的第一资源的资源类型和第一资源的第一索引。服务器106获取应用程序的待合并处理的第二文件包,第二文件包中包含第二代码、第二资源和第二资源的第二索引,第二代码中设置有第二索引,第二代码被运行时通过第二索引查询第二资源。当第二资源的资源类型和第一资源的资源类型相同时,服务器106将第二文件包中的第二索引修改为预设索引,并且将第二代码中设置的第二索引修改为预设索引,得到修改后的第二文件包,预设索引与第一索引不相同。因此,服务器106可将第一文件包和修改后的第二文件包进行合并处理,得到应用程序的待编译包,进而将应用程序的待编译包进行编译时,得到应用程序。后续应用程序在被终端执行时,可使用第一文件包中的第一代码执行第一资源的查询,同时还可使用第二文件包中的第二代码执行第二资源的查询,避免因两个文件包中资源索引相同而使得其中的一个文件包只能采用资源名称进行资源查询导致的资源查询的性能低。
在一个实施例中,如图2所示,提供了一种应用程序的资源索引处理方法,以该方法应用于图1中的服务器106为例进行说明,包括以下步骤:
S102,获取应用程序的待合并处理的第一文件包的第一资源的资源类型和第一资源的第一索引。
在本实施中,第一文件包为应用程序的待执行合并处理的文件包。应用程序的第一文件包可以通过反编译应用程序的第一程序包得到。第一程序包可以是用于实现应用程序的一个或多个功能的程序包。第一程序包中包含实现应用程序的一个或多个功能的代码以及代码调用的资源。第一程序包由应用程序的研发方平台提供。具体地,研发人员开发应用程序时对应用程序的功能代码以及资源进行编译,得到第一程序包。第一程序包可以是apk包(Android application package,安卓应用程序包)。另外,第一程序包还可以是用于运营应用程序的平台提供的程序包,如渠道方的程序包或发行方的程序包。第一程序包中包含实现应用程序的运营相关功能的代码以及代码调用的资源。如包含运营平台提供的sdk(Software Development Kit,软件开发工具包)代码以及实现sdk代码时调用的资源。
当对第一程序包执行反编译时,得到第一文件包。第一文件包中包含第一代码、第一资源和第一资源的第一索引。第一代码设置有第一索引,当第一代码被运行时通过调用其内部设置的第一索引以查询第一资源。此外,还可进一步识别出第一资源的资源类型。其中,第一文件包可以采用索引表的方式记录第一索引,以及第一索引与第一资源的映射关系。
S104,获取应用程序的待合并处理的第二文件包,第二文件包中包含第二代码、第二资源和第二资源的第二索引,第二代码中设置有第二索引,第二代码被运行时通过第二索引查询第二资源。
在本实施中,第二文件包为应用程序的待执行合并处理的文件包。第二文件包与第一文件包不是同一文件包,第一文件包与第二文件包均为用于执行合并处理的对象。应用程序的第二文件包可以通过反编译应用程序的第二程序包得到。第二程序包可以是用于实现应用程序的一个或多个功能的程序包。第二程序包中包含实现应用程序的一个或多个功能的代码以及代码调用的资源。第二程序包由应用程序的研发方平台提供。具体地,研发人员开发应用程序时对应用程序的功能代码以及资源进行编译,得到第二程序包。第二程序包可以是apk包(Android application package,安卓应用程序包)。另外,第二程序包还可以是用于运营应用程序的平台提供的程序包,如渠道方的程序包或发行方的程序包。第二程序包中包含实现应用程序的运营相关功能的代码以及代码调用的资源。如包含运营平台提供的sdk(Software Development Kit,软件开发工具包)代码以及实现sdk代码时调用的资源。
需要说明的是,第一文件包和第二文件包为不相同的两个文件包。当第一文件包基于反编译用于实现应用程序的一个或多个功能的程序包得到时,第二文件包基于反编译用于运营应用程序的平台提供的程序包得到。当第二文件包基于反编译用于实现应用程序的一个或多个功能的程序包得到时,第一文件包基于反编译用于运营应用程序的平台提供的程序包得到。
当对第二程序包执行反编译时,得到第二文件包。第二文件包中包含第二代码、第二资源和第二资源的第二索引。第二代码设置有第二索引,当第二代码被运行时通过调用其内部设置的第二索引以查询第二资源。此外,还可进一步识别出第二资源的资源类型。其中,第二文件包可以采用索引表的方式记录第二索引,以及第二索引与第二资源的映射关系。
S106,当第二资源的资源类型和第一资源的资源类型相同时,将第二文件包中的第二索引修改为预设索引,并且将第二代码中设置的第二索引修改为预设索引,得到修改后的第二文件包,预设索引与第一索引不相同。
其中,第一文件包和修改后的第二文件包用于进行合并处理,以得到应用程序的待编译包。也即是,第一文件包和修改后的第二文件包均作为合并处理的对象。
在本实施例中,预先设置预设索引,预设索引与第一索引不相同。当第二资源和第一资源的资源类型相同时,将第二文件包中第二索引修改为预设索引。同时也将第二代码中设置的第二索引修改为预设索引,以使得第二代码在被运行时通过预设索引查询对应资源。如图3所示,由于修改后的第二文件中第二索引已被修改为预设索引,因此在基于第二文件进行编译时得到的应用程序能够通过预设索引查询第二文件的第二资源,而又因为第二文件的第二代码中设置的第二索引也已被修改为预设索引,此时第二代码中的索引与第二文件中第二资源对应索引相同,应用程序可以通过运行第二代码的方式准确查询到第二资源。
本实施例中,只要第二资源和第一资源的资源类型相同,不管第一索引和第二索引是否相同,即将第二文件包中的第二索引修改为预设索引,并且将第二代码中设置的第二索引修改为预设索引。因此可省略判断第一索引和第二索引是否相同的步骤,减少冗余的操作。与判断第一索引和第二索引是否相同的操作相比,此处的直接执行将所有与第一资源相同的第二资源的第二索引进行修改的操作,能够更快速地实现系统中第一资源和第二资源的资源索引不同的效果。
此外,第一文件包和修改后的第二文件包用于进行合并处理,以得到应用程序的待编译包。其中,待编译包用于进行编译操作,以得到应用程序。如图3所示,待编译包中第一索引和预设索引不相同,因此在对待编译包进行编译时,执行将合并索引打包成资源索引文件的操作时不会发生程序出错,进而也不会导致编译得到的应用程序在后续执行资源查询时出现错误。
传统地,即将执行合并处理的两个文件包中,若两个文件包中的资源的索引相同,采用的方式是将其中的一个文件包中的索引进行丢弃处理后将两个文件包进行合并处理,得到合并后的文件包。对合并后的文件包进行编译时,针对丢弃索引的文件包生成其内资源的索引,此时生成的索引与其内部的代码中的索引不相同,使用其内部的代码进行资源查询时将导致查询失败。此时,对于丢弃索引的文件包中的资源的查询,不得不使用资源的名称进行资源查询,此种方式将会导致资源查询的性能低。
本实施例的一种应用程序的资源索引处理方法,若应用程序的第一文件包中的第一资源的资源类型和第二文件包中的第二资源的资源类型相同,则将第二文件包中的第二索引修改为预设索引,并且将第一文件包中第二代码中设置的第二索引修改为预设索引,得到修改后的第二文件包。其中,预设索引与第一索引不相同。因此,当第一文件包和修改后的第二文件包进行合并处理,得到应用程序的待编译包后,对待编译包执行编译得到应用程序时,应用程序可使用第一文件包中的第一代码执行第一资源的查询,同时还可使用第二文件包中的第二代码执行第二资源的查询,避免因两个文件包中资源的索引相同而只能采用资源名称进行资源查询导致的资源查询的性能低。
在一实施例中,上述当第二资源的资源类型和第一资源的资源类型相同时,将第二文件包中的第二索引修改为预设索引的步骤之前,还包括:读取第一索引中用于标识第一资源的资源类型的第一标识符;读取第二索引中用于标识第二资源的资源类型的第二标识符;根据第一标识符和第二标识符判断第一资源的资源类型和第二资源的资源类型是否相同。
在该实施例中,第一索引除了用于查询第一资源之外,还可用于标识第一资源的资源类型。第一索引中设置有用于标识第一资源的资源类型的第一标识符。第二索引除了用于查询第二资源之外,还可用于标识第二资源的资源类型。第二索引中设置有用于标识第二资源的资源类型的第二标识符。进而,根据第一标识符和第二标识符能够判断第一资源和第二资源的资源类型是否相同。在一实现方式中,同一应用程序采用同样的标识符进行资源类型的识别,因此将第一标识符和第二标识符进行对比,当第一标识符和第二标识符相同时,即可判断出第一资源和第二资源的资源类型相同。反之,若第一标识符和第二标识符不相同,可判断出第一资源和第二资源的资源类型不相同。因此,通过索引标识出对应资源的资源类型的方式,能够快速识别出对应资源的资源类型,同时也可避免因额外增加对应资源的资源类型的标识信息造成的系统资源浪费。
在一实施例中,第一标识符包括第一字符和第二字符,第一字符用于标识第一资源的来源,第二字符用于标识第一资源的类型,第二标识符包括第三字符和第四字符,第三字符用于标识第二资源的来源,第四字符用于标识第二资源的类型。根据第一标识符和第二标识符判断第一资源和第二资源的资源类型是否相同,包括:若第一字符和第三字符相同,且第二字符和第四字符相同,确定第一资源和第二资源的资源类型相同;若第一字符和第三字符不相同,和/或第二字符和第四字符不相同,确定第一资源和第二资源的资源类型不相同。
在该实施例中,第一索引中的第一标识符包括用于标识第一资源的来源的第一字符以及用于标识第一资源的类型的第二字符,第二索引中的第二标识符包括用于标识第二资源的来源的第三字符以及用于标识第二资源的类型的第四字符,将第一字符和第三字符进行对比可判断第一资源和第二资源的来源是否相同,将第二字符和第四字符进行对比可判断第一资源和第二资源的类型是否相同。只有第一字符和第三字符相同,且第二字符和第四字符相同的情况下,才可确定第一资源和第二资源的资源类型相同。由于应用程序的资源,可以是来源于不同的渠道的不同类型的资源,也可以是来源于相同渠道的不同类型的资源,还可以是来源于不同渠道的相同类型的资源,因此通过以上资源类型的判断方式可提高资源类型判断的准确度。
例如,应用程序的资源包括第一资源和第二资源。应用程序的资源均采用一个4字节的无符号整数作为索引,即资源ID(Identity document,唯一编码)。其中,资源ID中,最高字节表示Package ID,次高字节表示Type ID,最低两字节表示Entry ID。Package ID相当于是一个命名空间,用于限定资源的来源。安卓系统当前定义了两个资源命令空间。其中一个系统资源命令空间,它的Package ID等于0x01,另外一个是应用程序资源命令空间,它的Package ID等于0x7f。所有位于[0x01,0x7f]之间的Package ID都是合法的,而在这个范围之外的都是非法的Package ID。因此,通过Package ID可以识别出资源的来源。Type ID指资源的类型ID。资源的类型有animator、anim、color、drawable、layout、menu、raw、string和xml等,此处各种资源的类型的英文符在应用程序的资源领域具有明确的意义,属于应用程序的资源领域的惯常表达。此外,每一种类型都会被赋予一个ID。因此,通过TypeID可以识别出资源的类型。Entry ID是指每一个资源在其所属的资源类型中所出现的次序。注意,不同资源ID中Entry ID有可能是相同的,但是由于资源ID对应的资源的来源和/或类型不同,仍然可以通过其资源ID来区别对应的资源。对于Entry ID,下述实施例将会进一步说明。
在一实施例中,上述将第二文件包中的第二索引修改为预设索引,并且将第二代码中设置的第二索引修改为预设索引的步骤之前,还包括:设置预设索引。其中,预设索引的设置方式,包括:识别第一索引的第一索引设置规则;根据第一索引设置规则设置预设索引。优选地,第二资源为多个,各第二资源对应各第二索引,预设索引为多个。根据第一索引设置规则设置预设索引,包括:获取预设的第二索引设置规则,根据第二索引设置规则和第一索引设置规则确定第三索引设置规则;根据第三索引设置规则设置多个预设索引。将第二文件包中的第二索引修改为预设索引,并且将第二代码中设置的第二索引修改为预设索引,包括:将各第二资源对应的各第二索引修改为各预设索引,并且将第二代码中设置的各第二资源对应的各第二索引修改为各预设索引。
在该实施例中,当获取到第一文件中的第一索引时,识别出第一索引的第一索引设置规则。例如,当第一索引为多个时,若识别到多个第一索引为有序的索引值,则可多个索引值的序列识别出第一索引设置规则。多个索引值为0x7f010001、0x7f010002、0x7f010003、0x7f010004、0x7f010005,则可识别出第一索引设置规则为:索引值的最后四个字符为递增序列,递增序列中每次递增值为1。根据第一索引设置规则设置得到的预设索引为0x7f010006。因此,可使得对第一文件和第二文件的索引进行合并时,得到的索引满足同一规则,便于后续对合并的索引进行管理。
对于第二资源为多个、各第二资源对应各第二索引且预设索引为多个的情况,可预先设置预设索引的第二索引设置规则。如,第二索引设置规则为:多个预设索引的最后四个字符为递增序列且递增序列中每次递增值为N,N为整数。此时,根据第一索引的第一索引设置规则和预设索引的第二索引设置规则确定第三索引设置规则为:识别到第一索引设置规则中索引值的最后四个字符为递增序列且递增序列中每次递增值为1,识别到第二索引设置规则中多个预设索引的最后四个字符为递增序列且递增序列中每次递增值为N,确定第三索引设置规则为:多个预设索引的最后四个字符为递增序列且递增序列中每次递增值为1。此时,如上述实施例,多个预设索引为0x7f010006、0x7f010007、0x7f010008、0x7f010009。各个预设索引对应修改前各个第二索引指向的第二资源,同时也将第二代码中设置的各第二资源对应的各第二索引修改为各预设索引。因此,可以提高多资源场景下各个资源对应的索引的管理效率。
例如,具体操作如下:
第一索引记录在第一public.xml文件中,此处称为文件一。第二索引记录在第二public.xml文件中,此处称为文件二。public.xml文件为索引表的一种格式的文件。文件一保持不动,将文件二中的资源的索引,按照文件一中的格式逐个添加到文件一中。如文件一和文件二对应资源的类型为layout类型,文件一对应索引的索引值的最大值为:0x7f010005。将文件二中第一个索引添加到文件一中,其索引值为0x7f010006,以此类推添加,可将文件二中所有的索引均添加到文件一中。例如,文件一为研发方apk包的public.xml文件,文件二为渠道方sdk的public.xml文件。可按照上述方式将文件一和文件二中的索引进行合并。
在一实施例中,上述当第二资源的资源类型和第一资源的资源类型相同时,将第二文件包中的第二索引修改为预设索引,并且将第二代码中设置的第二索引修改为预设索引的步骤,包括:当第二资源的资源类型和第一资源的资源类型相同,且第二索引和第一索引相同时,将第二文件包中的第二索引修改为预设索引,并且将第二代码中设置的第二索引修改为预设索引。
在该实施例中,当第一资源和第二资源的资源类型相同时,进一步判断第一索引与第二索引是否相同。若是,则将第二文件包中的第二索引修改为预设索引,并且将第二代码中设置的第二索引修改为预设索引。因此,可以减少系统对第二索引的修改操作,提高系统的性能。例如,如上述实施例,通过资源ID的Package ID和Type ID判断出第一资源和第二资源的资源类型相同时,进一步判断第一资源和第二资源中的Entry ID是否相同,若是,则表明第一资源和第二资源的索引相同,将第二文件包中的第二索引修改为预设索引,并且将第二代码中设置的第二索引修改为预设索引。
在一实施例中,上述当第二资源的资源类型和第一资源的资源类型相同时,将第二文件包中的第二索引修改为预设索引,并且将第二代码中设置的第二索引修改为预设索引,包括:当第二资源的资源类型和第一资源的资源类型相同,且第一索引为常量以及第二索引为变量时,将第二文件包中的第二索引修改为预设索引,并且将第二代码中设置的第二索引修改为预设索引。优选地,第一资源为应用程序的私有资源,第二资源为应用程序的公共资源。
在该实施例中,若第一索引为常量,在后续引用到第一代码时第一代码会被优化为常量,导致修改难度及出错的可能性更高。若第二索引为变量,则后续第二代码被引用时不会被优化为常量,仍可采用第二代码的索引方式进行引用。因此,当第二资源和第一资源的资源类型相同时,对第二索引进行修改,可减少系统的运行异常情况。例如,第一文件包为使用apktool工具(apk的反编译工具)反编译第一apk包后得到的文件包,第二文件包为使用apktool工具反编译第二apk包后得到的文件包。若第一apk包为application(应用程序)模块,在编译得到第一apk包之前,被编译的代码如图4所示。被编译的代码用final参数类型对索引进行限定。对被编译的代码执行编译后,得到的第一代码如图5所示。编译后,被编译的代码被替换为常量A。也即是,A代替了图4中的被编译的代码,而常量A即作为第一代码中的第一索引,第一apk包中记录的第一资源的第一索引也就为常量A。后续若对常量A进行修改,将有可能导致修改后再次进行编译时出现系统错误,或者对常量A进行修改时还需要调整该常量A对应的其他代码,修改难度增大。若第二apk包为library(第三方的库)模块,则在编译得到第二apk包前后代码不会被优化,编译后得到的第二apk包中第二代码仍然保留了对变量的引用。
在具体的实现过程中,第一文件包为将研发方提供的第一apk包进行反编译得到的包体,第二文件包为将渠道方或发行方提供的第二apk包进行反编译得到的包体。渠道方或发行方提供的第二apk包中sdk以library方式依赖,因此第二代码中使用到渠道方或者发行方的资源之处,都是保留了R类的索引,不会是常量。其中,R类指的是第二代码中通过第二索引实现查询对应资源的类。而研发方提供的第一apk包中自身的资源,属于application模块,所以相关资源的索引为常量,需要与第一apk包中的索引表中记录的第一索引保持一致才不会在运行时发生异常。因此,对第二文件包中的第二索引进行修改,可减少系统运行异常情况。
在一实施例中,第一文件包根据反编译应用程序的研发包得到,第二文件包根据反编译应用程序的渠道包或应用程序的发行包得到,第一文件包中采用第一索引表记录第一资源的第一索引,第二文件包中采用第二索引表记录第二资源的第二索引。将第二文件包中的第二索引修改为预设索引,包括:将第二索引表中的第二索引修改为预设索引。
该实施例中,应用程序为游戏的应用程序。在游戏发行行业中,游戏的应用程序的安卓包体由游戏的研发方代码、发行方的代码以及渠道方的代码合成,采用的实现方式如图6所示。其中,smali代码是apk包中的代码部分转变后的另一种格式的代码。
首先对正常包体的R文件和资源ID进行介绍:此处正常包体包括apk包和待编译包,R文件包括包体中用于实现通过索引查询对应资源的代码的文件,资源ID为包体中资源的一种类型的索引。其中,包体指的是将代码及其资源以及资源索引进行打包后得到的文件包,R文件指的是将R类进行打包后的文件,R类指的是用于实现通过资源索引查询资源的类,资源ID指的是资源的索引。
具体地,安卓包正常构建过程中,AAPT工具(Android Asset Packaging Tool,安卓打包工具)打包应用程序中的资源文件并进行编译。资源文件包括AndroidManifest.xml文件、layout布局中的xml文件、assets文件、图片及raw文件等,并生成各资源文件的资源ID。AAPT工具编译完成之后会生成R.java文件,将所有的资源ID记录到R.java文件当中。例如,R.java文件的内容如图7所示。其中,编译之前代码中layout文件夹下的main.xml文件,编译后会生成索引的资源ID,即R.layout.main=0x7f030000。安卓包打包后,AAPT工具建立一张索引表,将资源的文件名称和对应的索引值,存放到resources.arsc文件中。将该文件在AndroidStudio工具中打开,可看出其记录索引的资源ID和路径的映射。也即是,AAPT工具编译资源时,为每个资源生成一个索引的资源ID和文件路径或者内容并保存其映射关系到resources.arsc文件中。同时将资源ID写入到R.java文件中,方便开发者通过R.java文件中的R类得到资源ID,再通过资源ID索引到对应的资源文件。即如图8所示,资源ID作为中间桥梁,使得对应代码可以查找到对应资源。
在反编译之前,apk包中代码以资源ID作为索引参数,查询得到对应的资源。在反编译过程中,apk包被转化为smali代码和各种资源文件,这时原始的apk包中的resources.arsc文件将不再存在,被处理成public.xml文件。public.xml文件中写入资源名称和资源ID的对应关系。对一个正常的apk包的反编译,若不做其他操作,如发行行业中的融合,就进行回编译。此时资源ID不会发生变化。因为在回编译过程中,还会使用AAPT工具,将public.xml文件结合资源文件,重新生成resources.arsc文件。也即是,public.xml文件是作为AAPT工具的一个输入,用于固定住资源ID。如果没有public.xml文件,则AAPT工具会为资源文件重新定义资源ID。
而该实施例中,涉及到研发包以及渠道包或发行包的文件包融合。此时,在反编译之后,得到的第一文件包包含研发方的public.xml文件,第二文件包包含渠道方或发行方的public.xml文件。以往的处理方式为:在第一文件包和第二文件包进行融合以便于后续将融合后的文件包进行回编译时,保留研发方的public.xml文件,去除渠道方或发行方的public.xml文件。然而,这样操作带来的问题是:渠道方或发行方如果使用了上述所说的R类进行资源索引时,若不保留这两房对应的public.xml文件,将导致在回编译过程中,渠道方或发行方的资源的索引重新生成,此时重新生成的资源的索引和代码R类中的索引不一致,将导致索引失败。因此,回编译后渠道方或发行方的资源的索引不能使用R类作为索引方式,而只能通过资源的资源名称作为索引。如下所示,采用方式1采用资源的索引进行资源查询,方式2采用资源的资源名称进行资源查询:
1、资源ID->索引到资源文件/内容
2、资源名称->通过在resrouces.arsc文件中查找到资源ID->再索引到资源文件
显然通过方式2多了一步,即将资源名称映射到资源ID上,因此方式2的查询性能上是比较差的。也即是,以往的处理方式将会导致回编译后应用程序的资源的查询效率低。
该实施例中,将第一文件中的第一索引表和第二索引表进行合并处理。索引表可以是public.xml格式的表格。也即是,将研发方的apk包反编译后得到的public.xml文件和渠道方或发行方的apk包反编译后的public.xml文件进行合并。在索引表合并之前,需将相同资源类型的资源的索引进行修改,以避免相同资源类型的资源的索引导致后续通过索引查询对应资源时运行异常。例如,对两个public.xml文件进行合并,此处称为文件一和文件二。文件一保持不动,将文件二中的资源ID,只取名称,按照文件一的格式逐个将文件二的资源ID添加到文件一中。如文件一中,资源ID的当前最大的值为:0x7f010005。那么文件二中第一个添加到文件一的资源ID修改为0x7f010006,以此类推添加。
索引表合并处理后,相当于固定住了回编译后resources.arsc文件中资源ID和资源文件/内容的对应关系。进一步地,按照合并后得到的索引表public.xml中资源ID修改smali代码中设置的资源ID即可。
因此,通过合并后得到的索引表public.xml固定住resources.arsc文件中渠道方或发行方的资源ID,修改了对应代码中的索引值,即对应代码中的资源ID,对应代码在被运行时可以通过其内的索引值查询到对应资源。由此,合并处理后得到应用程序的待编译包,无需使用资源名称进行资源查询,能够提高系统对资源的查询效率。
在一实施例中,本申请还提供一种应用程序的文件包合并处理方法,如图9所示,包括以下步骤:
S902,获取应用程序的待合并处理的第一文件包,第一文件包中包含第一代码、第一资源和第一资源的第一索引,第一代码中设置有第一索引,第一代码被运行时通过第一索引查询第一资源。
S904,获取应用程序的待合并处理的第二文件包,第二文件包中包含第二代码、第二资源和第二资源的第二索引,第二代码中设置有第二索引,第二代码被运行时通过第二索引查询第二资源。
S906,当第二资源和第一资源的资源类型相同时,将第二文件包中的第二索引修改为预设索引,并且将第二代码中设置的第二索引修改为预设索引,得到修改后的第二文件包,预设索引与第一索引不相同。
S908,将第一文件包和修改后的第二文件包进行合并处理,得到应用程序的待编译包。
需要说明的是,该实施例中,第一文件包和第二文件包的说明均与上述任一实施例所述的一种应用程序的资源索引处理方法内对应的说明相同。当采用上述任一实施例所述的一种应用程序的资源索引处理方法对第二文件包进行处理后,得到该实施例中的修改后的第二文件包。进一步地,将第一文件包和修改后的第二文件包进行合并处理,得到应用程序的待编译包。也即是,该实施例中,在对两个文件包进行合并处理之前,采用上述任一实施例所述的一种应用程序的资源索引处理方法对其中的第二文件包的资源索引进行处理,得到修改后的第二文件包。进而将第一文件包和修改后的第二文件包进行合并处理。相关的操作过程可参见上述任一实施例所述的一种应用程序的资源索引处理方法的内容说明,此处不再详述。
应该理解的是,虽然流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,附图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
本申请还提供一种应用程序的资源索引处理装置,如图10所示,该装置包括第一获取模块102、第二获取模块104以及修改模块106。第一获取模块102,用于获取应用程序的待合并处理的第一文件包的第一资源的资源类型和第一资源的第一索引;第二获取模块104,用于获取应用程序的待合并处理的第二文件包,第二文件包中包含第二代码、第二资源和第二资源的第二索引,第二代码中设置有第二索引,第二代码被运行时通过第二索引查询第二资源;修改模块106,用于当第二资源的资源类型和第一资源的资源类型相同时,将第二文件包中的第二索引修改为预设索引,并且将第二代码中设置的第二索引修改为预设索引,得到修改后的第二文件包,预设索引与第一索引不相同。
在其中一个实施例中,一种应用程序的资源索引处理装置还包括判断模块,用于读取第一索引中用于标识第一资源的资源类型的第一标识符;读取第二索引中用于标识第二资源的资源类型的第二标识符;根据第一标识符和第二标识符判断第一资源的资源类型和第二资源的资源类型是否相同。
在其中一个实施例中,第一标识符包括第一字符和第二字符,第一字符用于标识第一资源的来源,第二字符用于标识第一资源的类型,第二标识符包括第三字符和第四字符,第三字符用于标识第二资源的来源,第四字符用于标识第二资源的类型;根据第一标识符和第二标识符判断第一资源和第二资源的资源类型是否相同,包括:若第一字符和第三字符相同,且第二字符和第四字符相同,确定第一资源和第二资源的资源类型相同;若第一字符和第三字符不相同,和/或第二字符和第四字符不相同,确定第一资源和第二资源的资源类型不相同。
在其中一个实施例中,一种应用程序的资源索引处理装置还包括设置模块用于设置预设索引;其中,预设索引的设置方式,包括:识别第一索引的第一索引设置规则;根据第一索引设置规则设置预设索引。优选地,第二资源为多个,各第二资源对应各第二索引,预设索引为多个,根据第一索引设置规则设置预设索引,包括:获取预设的第二索引设置规则,根据第二索引设置规则和第一索引设置规则确定第三索引设置规则;根据第三索引设置规则设置多个预设索引。将第二文件包中的第二索引修改为预设索引,并且将第二代码中设置的第二索引修改为预设索引,包括:将各第二资源对应的各第二索引修改为各预设索引,并且将第二代码中设置的各第二资源对应的各第二索引修改为各预设索引。
在其中一个实施例中,当第二资源的资源类型和第一资源的资源类型相同时,将第二文件包中的第二索引修改为预设索引,并且将第二代码中设置的第二索引修改为预设索引,包括:当第二资源的资源类型和第一资源的资源类型相同,且第一索引为常量以及第二索引为变量时,将第二文件包中的第二索引修改为预设索引,并且将第二代码中设置的第二索引修改为预设索引;优选地,第一资源为应用程序的私有资源,第二资源为应用程序的公共资源。
在其中一个实施例中,第一文件包根据反编译应用程序的研发包得到,第二文件包根据反编译应用程序的渠道包或应用程序的发行包得到,第一文件包中采用第一索引表记录第一资源的第一索引,第二文件包中采用第二索引表记录第二资源的第二索引;将第二文件包中的第二索引修改为预设索引,包括:将第二索引表中的第二索引修改为预设索引。
关于一种应用程序的资源索引处理装置的具体限定可以参见上文中对于一种应用程序的资源索引处理方法的限定,在此不再赘述。上述一种应用程序的资源索引处理装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图11所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部平台连接,以接收或读取外部平台发送的程序包。该计算机程序被处理器执行时以实现一种一种应用程序的资源索引处理方法。
本领域技术人员可以理解,图11中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现以下步骤:获取应用程序的待合并处理的第一文件包的第一资源的资源类型和第一资源的第一索引;获取应用程序的待合并处理的第二文件包,第二文件包中包含第二代码、第二资源和第二资源的第二索引,第二代码中设置有第二索引,第二代码被运行时通过第二索引查询第二资源;当第二资源的资源类型和第一资源的资源类型相同时,将第二文件包中的第二索引修改为预设索引,并且将第二代码中设置的第二索引修改为预设索引,得到修改后的第二文件包,预设索引与第一索引不相同。
在其中一个实施例中,处理器执行计算机程序时还实现以下步骤:读取第一索引中用于标识第一资源的资源类型的第一标识符;读取第二索引中用于标识第二资源的资源类型的第二标识符;根据第一标识符和第二标识符判断第一资源的资源类型和第二资源的资源类型是否相同。
在其中一个实施例中,第一标识符包括第一字符和第二字符,第一字符用于标识第一资源的来源,第二字符用于标识第一资源的类型,第二标识符包括第三字符和第四字符,第三字符用于标识第二资源的来源,第四字符用于标识第二资源的类型;处理器执行计算机程序实现上述的根据第一标识符和第二标识符判断第一资源和第二资源的资源类型是否相同的步骤时,具体实现以下步骤:若第一字符和第三字符相同,且第二字符和第四字符相同,确定第一资源和第二资源的资源类型相同;若第一字符和第三字符不相同,和/或第二字符和第四字符不相同,确定第一资源和第二资源的资源类型不相同。
在其中一个实施例中,处理器执行计算机程序时还实现以下步骤:设置预设索引;其中,预设索引的设置方式,包括:识别第一索引的第一索引设置规则;根据第一索引设置规则设置预设索引;优选地,第二资源为多个,各第二资源对应各第二索引,预设索引为多个,根据第一索引设置规则设置预设索引,包括:获取预设的第二索引设置规则,根据第二索引设置规则和第一索引设置规则确定第三索引设置规则;根据第三索引设置规则设置多个预设索引。处理器执行计算机程序实现上述的将第二文件包中的第二索引修改为预设索引,并且将第二代码中设置的第二索引修改为预设索引的步骤时,具体实现以下步骤:将各第二资源对应的各第二索引修改为各预设索引,并且将第二代码中设置的各第二资源对应的各第二索引修改为各预设索引。
在其中一个实施例中,处理器执行计算机程序实现上述的当第二资源的资源类型和第一资源的资源类型相同时,将第二文件包中的第二索引修改为预设索引,并且将第二代码中设置的第二索引修改为预设索引的步骤时,具体实现以下步骤:当第二资源的资源类型和第一资源的资源类型相同,且第一索引为常量以及第二索引为变量时,将第二文件包中的第二索引修改为预设索引,并且将第二代码中设置的第二索引修改为预设索引;优选地,第一资源为应用程序的私有资源,第二资源为应用程序的公共资源。
在其中一个实施例中,第一文件包根据反编译应用程序的研发包得到,第二文件包根据反编译应用程序的渠道包或应用程序的发行包得到,第一文件包中采用第一索引表记录第一资源的第一索引,第二文件包中采用第二索引表记录第二资源的第二索引;处理器执行计算机程序实现上述的将第二文件包中的第二索引修改为预设索引的步骤时,具体实现以下步骤:将第二索引表中的第二索引修改为预设索引。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:获取应用程序的待合并处理的第一文件包的第一资源的资源类型和第一资源的第一索引;获取应用程序的待合并处理的第二文件包,第二文件包中包含第二代码、第二资源和第二资源的第二索引,第二代码中设置有第二索引,第二代码被运行时通过第二索引查询第二资源;当第二资源的资源类型和第一资源的资源类型相同时,将第二文件包中的第二索引修改为预设索引,并且将第二代码中设置的第二索引修改为预设索引,得到修改后的第二文件包,预设索引与第一索引不相同。
在其中一个实施例中,计算机程序被处理器执行时还实现以下步骤:读取第一索引中用于标识第一资源的资源类型的第一标识符;读取第二索引中用于标识第二资源的资源类型的第二标识符;根据第一标识符和第二标识符判断第一资源的资源类型和第二资源的资源类型是否相同。
在其中一个实施例中,第一标识符包括第一字符和第二字符,第一字符用于标识第一资源的来源,第二字符用于标识第一资源的类型,第二标识符包括第三字符和第四字符,第三字符用于标识第二资源的来源,第四字符用于标识第二资源的类型;计算机程序被处理器执行实现上述的根据第一标识符和第二标识符判断第一资源和第二资源的资源类型是否相同的步骤时,具体实现以下步骤:若第一字符和第三字符相同,且第二字符和第四字符相同,确定第一资源和第二资源的资源类型相同;若第一字符和第三字符不相同,和/或第二字符和第四字符不相同,确定第一资源和第二资源的资源类型不相同。
在其中一个实施例中,计算机程序被处理器执行时还实现以下步骤:设置预设索引;其中,预设索引的设置方式,包括:识别第一索引的第一索引设置规则;根据第一索引设置规则设置预设索引;优选地,第二资源为多个,各第二资源对应各第二索引,预设索引为多个,根据第一索引设置规则设置预设索引,包括:获取预设的第二索引设置规则,根据第二索引设置规则和第一索引设置规则确定第三索引设置规则;根据第三索引设置规则设置多个预设索引。计算机程序被处理器执行实现上述的将第二文件包中的第二索引修改为预设索引,并且将第二代码中设置的第二索引修改为预设索引的步骤时,具体实现以下步骤:将各第二资源对应的各第二索引修改为各预设索引,并且将第二代码中设置的各第二资源对应的各第二索引修改为各预设索引。
在其中一个实施例中,计算机程序被处理器执行实现上述的当第二资源的资源类型和第一资源的资源类型相同时,将第二文件包中的第二索引修改为预设索引,并且将第二代码中设置的第二索引修改为预设索引的步骤时,具体实现以下步骤:当第二资源的资源类型和第一资源的资源类型相同,且第一索引为常量以及第二索引为变量时,将第二文件包中的第二索引修改为预设索引,并且将第二代码中设置的第二索引修改为预设索引;优选地,第一资源为应用程序的私有资源,第二资源为应用程序的公共资源。
在其中一个实施例中,第一文件包根据反编译应用程序的研发包得到,第二文件包根据反编译应用程序的渠道包或应用程序的发行包得到,第一文件包中采用第一索引表记录第一资源的第一索引,第二文件包中采用第二索引表记录第二资源的第二索引;计算机程序被处理器执行实现上述的将第二文件包中的第二索引修改为预设索引的步骤时,具体实现以下步骤:将第二索引表中的第二索引修改为预设索引。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (10)
1.一种应用程序的资源索引处理方法,所述方法包括:
获取所述应用程序的待合并处理的第一文件包的第一资源的资源类型和所述第一资源的第一索引;
获取所述应用程序的待合并处理的第二文件包,所述第二文件包中包含第二代码、第二资源和所述第二资源的第二索引,所述第二代码中设置有所述第二索引,所述第二代码被运行时通过所述第二索引查询所述第二资源;
当所述第二资源的资源类型和所述第一资源的资源类型相同时,将所述第二文件包中的第二索引修改为预设索引,并且将所述第二代码中设置的所述第二索引修改为所述预设索引,得到修改后的第二文件包,所述预设索引与所述第一索引不相同。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
读取所述第一索引中用于标识所述第一资源的资源类型的第一标识符;
读取所述第二索引中用于标识所述第二资源的资源类型的第二标识符;
根据所述第一标识符和所述第二标识符判断所述第一资源的资源类型和所述第二资源的资源类型是否相同。
3.根据权利要求2所述的方法,其特征在于,所述第一标识符包括第一字符和第二字符,所述第一字符用于标识所述第一资源的来源,所述第二字符用于标识所述第一资源的类型,所述第二标识符包括第三字符和第四字符,所述第三字符用于标识所述第二资源的来源,所述第四字符用于标识所述第二资源的类型;
所述根据所述第一标识符和所述第二标识符判断所述第一资源和所述第二资源的资源类型是否相同,包括:
若所述第一字符和所述第三字符相同,且所述第二字符和所述第四字符相同,确定所述第一资源和所述第二资源的资源类型相同;
若所述第一字符和所述第三字符不相同,和/或所述第二字符和所述第四字符不相同,确定所述第一资源和所述第二资源的资源类型不相同。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:设置所述预设索引;
其中,所述预设索引的设置方式,包括:
识别所述第一索引的第一索引设置规则;
根据所述第一索引设置规则设置所述预设索引;
优选地,所述第二资源为多个,各所述第二资源对应各所述第二索引,所述预设索引为多个,所述根据所述第一索引设置规则设置所述预设索引,包括:
获取预设的第二索引设置规则,根据所述第二索引设置规则和所述第一索引设置规则确定第三索引设置规则;
根据所述第三索引设置规则设置多个所述预设索引;
所述将所述第二文件包中的第二索引修改为预设索引,并且将所述第二代码中设置的所述第二索引修改为所述预设索引,包括:
将各所述第二资源对应的各所述第二索引修改为各所述预设索引,并且将所述第二代码中设置的各所述第二资源对应的各所述第二索引修改为各所述预设索引。
5.根据权利要求1所述的方法,其特征在于,所述当所述第二资源的资源类型和所述第一资源的资源类型相同时,将所述第二文件包中的第二索引修改为预设索引,并且将所述第二代码中设置的所述第二索引修改为所述预设索引,包括:
当所述第二资源的资源类型和所述第一资源的资源类型相同,且所述第一索引为常量以及所述第二索引为变量时,将所述第二文件包中的第二索引修改为预设索引,并且将所述第二代码中设置的所述第二索引修改为所述预设索引;
优选地,所述第一资源为所述应用程序的私有资源,所述第二资源为所述应用程序的公共资源。
6.根据权利要求1所述的方法,其特征在于,所述第一文件包根据反编译所述应用程序的研发包得到,所述第二文件包根据反编译所述应用程序的渠道包或所述应用程序的发行包得到,所述第一文件包中采用第一索引表记录所述第一资源的第一索引,所述第二文件包中采用第二索引表记录所述第二资源的第二索引;
所述将所述第二文件包中的第二索引修改为预设索引,包括:
将所述第二索引表中的所述第二索引修改为所述预设索引。
7.一种应用程序的文件包合并处理方法,其特征在于,所述方法包括:
获取所述应用程序的待合并处理的第一文件包,所述第一文件包中包含第一代码、第一资源和所述第一资源的第一索引,所述第一代码中设置有所述第一索引,所述第一代码被运行时通过所述第一索引查询所述第一资源;
获取所述应用程序的待合并处理的第二文件包,所述第二文件包中包含第二代码、第二资源和所述第二资源的第二索引,所述第二代码中设置有所述第二索引,所述第二代码被运行时通过所述第二索引查询所述第二资源;
当所述第二资源和所述第一资源的资源类型相同时,将所述第二文件包中的第二索引修改为预设索引,并且将所述第二代码中设置的所述第二索引修改为所述预设索引,得到修改后的第二文件包,所述预设索引与所述第一索引不相同;
将所述第一文件包和所述修改后的第二文件包进行合并处理,得到所述应用程序的待编译包。
8.一种应用程序的资源索引处理装置,其特征在于,所述装置包括:
第一获取模块,用于获取所述应用程序的待合并处理的第一文件包的第一资源的资源类型和所述第一资源的第一索引;
第二获取模块,用于获取所述应用程序的待合并处理的第二文件包,所述第二文件包中包含第二代码、第二资源和所述第二资源的第二索引,所述第二代码中设置有所述第二索引,所述第二代码被运行时通过所述第二索引查询所述第二资源;
修改模块,用于当所述第二资源的资源类型和所述第一资源的资源类型相同时,将所述第二文件包中的第二索引修改为预设索引,并且将所述第二代码中设置的所述第二索引修改为所述预设索引,得到修改后的第二文件包,所述预设索引与所述第一索引不相同。
9.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至6中任一项所述方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至6中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011617047.4A CN112732644B (zh) | 2020-12-31 | 2020-12-31 | 应用程序的资源索引处理方法、计算机设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011617047.4A CN112732644B (zh) | 2020-12-31 | 2020-12-31 | 应用程序的资源索引处理方法、计算机设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112732644A true CN112732644A (zh) | 2021-04-30 |
CN112732644B CN112732644B (zh) | 2024-06-07 |
Family
ID=75611205
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011617047.4A Active CN112732644B (zh) | 2020-12-31 | 2020-12-31 | 应用程序的资源索引处理方法、计算机设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112732644B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113918164A (zh) * | 2021-10-09 | 2022-01-11 | 北京字节跳动网络技术有限公司 | 应用程序包的生成方法、装置、可读介质和电子设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105511935A (zh) * | 2015-12-09 | 2016-04-20 | 网易(杭州)网络有限公司 | 资源索引值的获取方法及装置 |
CN105786498A (zh) * | 2016-02-25 | 2016-07-20 | 广州阿里巴巴文学信息技术有限公司 | 用于修改应用程序的方法、设备和电子设备 |
CN107368292A (zh) * | 2017-03-29 | 2017-11-21 | 阿里巴巴集团控股有限公司 | 一种资源编译方法及装置 |
CN107844301A (zh) * | 2017-12-12 | 2018-03-27 | 苏州蜗牛数字科技股份有限公司 | 一种安卓应用渠道合包方法及装置 |
-
2020
- 2020-12-31 CN CN202011617047.4A patent/CN112732644B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105511935A (zh) * | 2015-12-09 | 2016-04-20 | 网易(杭州)网络有限公司 | 资源索引值的获取方法及装置 |
CN105786498A (zh) * | 2016-02-25 | 2016-07-20 | 广州阿里巴巴文学信息技术有限公司 | 用于修改应用程序的方法、设备和电子设备 |
CN107368292A (zh) * | 2017-03-29 | 2017-11-21 | 阿里巴巴集团控股有限公司 | 一种资源编译方法及装置 |
CN107844301A (zh) * | 2017-12-12 | 2018-03-27 | 苏州蜗牛数字科技股份有限公司 | 一种安卓应用渠道合包方法及装置 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113918164A (zh) * | 2021-10-09 | 2022-01-11 | 北京字节跳动网络技术有限公司 | 应用程序包的生成方法、装置、可读介质和电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN112732644B (zh) | 2024-06-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109474578B (zh) | 报文消息校验方法、装置、计算机设备和存储介质 | |
JP3689368B2 (ja) | データ処理リソースを備えたマルチアプリケーション組込システムにアプリケーションをローディングする方法、対応するシステムおよび実行方法 | |
CN109032662B (zh) | 代码文件生成方法、装置、计算机设备和存储介质 | |
CN108614702B (zh) | 字节码优化方法及装置 | |
CN110135129B (zh) | 代码段保护方法、装置、计算机设备和存储介质 | |
CN110601880B (zh) | 一种云平台、业务处理方法、命令接口及计算机设备 | |
CN111176717B (zh) | 生成安装包的方法、装置及电子设备 | |
CN110059002B (zh) | 测试数据的生成方法、测试设备、存储介质及装置 | |
CN111967017A (zh) | 生成依赖关系的方法、装置、终端设备及存储介质 | |
CN111694613A (zh) | 应用程序模块间的解耦方法、电子装置及存储介质 | |
CN113672224A (zh) | 小程序页面代码生成方法、装置及计算机设备 | |
CN111857860A (zh) | 一种安全加载插件的实现方法及系统 | |
CN112732644B (zh) | 应用程序的资源索引处理方法、计算机设备和存储介质 | |
CN111338716A (zh) | 基于规则引擎的数据处理方法、装置及终端设备 | |
CN112416612B (zh) | 服务调用方法、装置、计算机设备和可读存储介质 | |
CN111324645B (zh) | 区块链的数据处理方法及装置 | |
CN115421699A (zh) | 类继承关系分析方法、装置、计算机设备和存储介质 | |
CN115756484A (zh) | 预编译目标代码仓库确定方法及装置、存储介质 | |
CN111143790B (zh) | 代码混淆方法、装置、设备及存储介质 | |
WO2022116342A1 (zh) | 事件推送方法、系统、区块链平台、合约调用端及介质 | |
CN114416057A (zh) | 项目代码打包方法、装置、终端设备及存储介质 | |
CN112631613A (zh) | 基于区块链平台的智能合约部署和调用方法及相关设备 | |
CN110569644B (zh) | 调用请求的处理、功能函数的调用方法、装置及设备 | |
CN111736806A (zh) | 控件注入方法、装置及终端设备 | |
CN113821829B (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 | ||
GR01 | Patent grant |