CN111694730B - 一种消除错误引用控件资源的方法及装置 - Google Patents
一种消除错误引用控件资源的方法及装置 Download PDFInfo
- Publication number
- CN111694730B CN111694730B CN202010366682.3A CN202010366682A CN111694730B CN 111694730 B CN111694730 B CN 111694730B CN 202010366682 A CN202010366682 A CN 202010366682A CN 111694730 B CN111694730 B CN 111694730B
- Authority
- CN
- China
- Prior art keywords
- control
- searching
- carrier
- identification
- code
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3628—Software debugging of optimised code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/366—Software debugging using diagnostics
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE 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/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
Abstract
本发明实施例提供了一种消除错误引用控件资源的方法及装置,该方法包括:获取通过Java文件编译生成的初始字节码;调整所述初始字节码中的根据控件标识查找控件的规则;其中,调整后的规则包括:在未查找到控件时,调整控件标识再次查找控件;每次查找所使用的控件标识指示的控件具有相同的名称;根据调整后的所述初始字节码生成可执行文件。本发明通过调整字节码,能够达到与修改源码同样的目的,从而避免侵入源码。在存在同名控件资源时,可以消除错误引用带来的影响;在根据可执行文件生成的应用程序运行之前,提前解决错误引用的问题。
Description
技术领域
本发明涉及应用程序开发领域,尤其涉及一种消除错误引用控件资源的方法及装置。
背景技术
安卓(Android)是一种基于Linux的自由及开放源代码的操作***,也是移动端最常用的操作***之一。应用于Android中的应用程序(Application,简称APP)通常被称为Android APP。在传统Android APP的开发过程中,通常将同一Android APP的所有业务数据打包到一个安卓应用程序包(Android application package,简称APK)中。用户只需下载安装该APK即可。
目前一种新的Android App开发,编译和发布机制广为流行,即Android APPBundle。可以将Android App打包为多个APK。例如一个基础(Base)APK、多个动态化构建模式(Dynamic Feature)APK。其中,Base APK是首次安装的APK,其中包括公共代码和资源;Dynamic Feature APK是基于Base APK的无需首次安装就加载的模块。用户在首次下载安装应用程序时,仅需要安装Base APK即可,从而大幅度减少了应用体积。
无论是在传统Android App开发过程中,还是在Android APP Bundle机制下的开发过程中,不同资源通常具有不同的资源名。但由于多种原因,可能会存在具有相同资源名的资源。这样在对具有相同资源名的资源引用时,极易出现引用错误。但传统Android App开发过程会对所有资源进行合并处理,从而即使在对具有相同资源名的资源引用时出现引用错误,在Android App运行时也不会出现问题。
然而Android APP Bundle机制下,多个APK的资源之间并未做合并处理。这就使得在开发过程中,在对具有相同资源名的资源引用时,若出现引用错误,将造成Android APP运行时崩溃。如图1所示,Base APK和Dynamic Feature APK中均具有资源名为ID_A和ID_B的资源,Dynamic Feature APK的某一布局文件中需要使用Dynamic Feature APK中资源名为ID_A的资源。但在引用过程中由于开发人员的疏忽,误引用了Base APK中资源名为ID_A的资源。这样,在Dynamic Feature APK运行时会出现崩溃。目前唯一的解决办法是通过专业的开发人员侵入源码进行修改。
发明内容
本发明实施例提供一种消除错误引用控件资源的方法及装置,以解决现有技术中人工侵入源码对错误引用进行修改的方式,不仅对操作人员具有较高的要求,同时也无法在应用程序运行之前提前解决错误引用的问题。
第一方面,本发明实施例提供了一种消除错误引用控件资源的方法,所述方法包括:
获取通过Java文件编译生成的初始字节码;
调整所述初始字节码中的根据控件标识查找控件的规则;其中,调整后的规则包括:在未查找到控件时,调整控件标识再次查找控件;每次查找所使用的控件标识指示的控件具有相同的名称;
根据调整后的所述初始字节码生成可执行文件。
可选地,调整所述初始字节码中的根据控件标识查找控件的规则的步骤包括:
获取所述初始字节码中的目标方法被调用时的载体和用于指示控件标识的引用代码;其中,所述目标方法用于根据所述引用代码指示的控件标识在所述载体中查找控件;
根据所述引用代码指示的控件标识,在所述载体中查找控件;
在未查找到控件时,根据所述引用代码中的控件名称重新确定控件标识;根据重新确定的控件标识再次在所述载体中查找控件;
将查找到的控件的控件标识作为所述目标方法的返回值。
可选地,根据所述引用代码中的控件名称重新确定控件标识的步骤包括:
通过Java的反射机制在基础安卓应用程序包资源库中,查找所述引用代码中的控件名称对应的控件标识;
将查找到的所述引用代码中的控件名称对应的控件标识作为重新确定的控件标识。
可选地,在所述根据重新确定的控件标识再次在所述载体中查找控件的步骤之后,所述方法还包括:
再次在所述载体中未查找到控件时,在所有动态化构建模式安卓应用程序包资源库中查找所述引用代码中的控件名称对应的控件标识;
根据查找到的控件标识再次在所述载体中查找控件。
可选地,在所述载体中查找控件的步骤包括:
根据所述载体的类型,调用不同类型下的findViewById方法在载体中查找控件;其中,所述载体的类型至少包括:弹窗、视图以及窗口。
可选地,在所述获取所述初始字节码中的目标方法被调用时的载体和用于指示控件标识的引用代码的步骤之前,所述方法还包括:
遍历所述初始字节码中的信息,确定所述目标方法。
第二方面,本发明实施例还提供一种消除错误引用控件资源的装置,所述装置包括:
获取模块,用于获取通过Java文件编译生成的初始字节码;
调整模块,用于调整所述初始字节码中的根据控件标识查找控件的规则;其中,调整后的规则包括:在未查找到控件时,调整控件标识再次查找控件;每次查找所使用的控件标识指示的控件具有相同的名称;
生成模块,用于根据调整后的所述初始字节码生成可执行文件。
可选地,所述调整模块包括:
获取单元,用于获取所述初始字节码中的目标方法被调用时的载体和用于指示控件标识的引用代码;其中,所述目标方法用于根据所述引用代码指示的控件标识在所述载体中查找控件;
第一查找单元,用于根据所述引用代码指示的控件标识,在所述载体中查找控件;
第二查找单元,用于在未查找到控件时,根据所述引用代码中的控件名称重新确定控件标识;根据重新确定的控件标识再次在所述载体中查找控件;
返回单元,用于将查找到的控件的控件标识作为所述目标方法的返回值。
可选地,所述第二查找单元,具体用于通过Java的反射机制在基础安卓应用程序包Base APK资源库中,查找所述引用代码中的控件名称对应的控件标识;将查找到的所述引用代码中的控件名称对应的控件标识作为重新确定的控件标识。
可选地,所述装置还包括:
第三查找单元,用于再次在所述载体中未查找到控件时,在所有动态化构建模式安卓应用程序包Dynamic Feature APK资源库中查找所述引用代码中的控件名称对应的控件标识;根据查找到的控件标识再次在所述载体中查找控件。
可选地,所述第一查找单元,具体用于根据所述载体的类型,调用不同类型下的findViewById方法在载体中查找控件;其中,所述载体的类型至少包括:弹窗、视图以及窗口。
可选地,所述装置还包括:
遍历模块,用于遍历所述初始字节码中的信息,确定所述目标方法。
第三方面,本发明实施例还提供一种电子设备,该电子设备包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上所述的消除错误引用控件资源的方法中的步骤。
第四方面,本发明实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上所述的消除错误引用控件资源的方法中的步骤。
在本发明实施例中,获取通过Java文件编译生成的初始字节码;然后调整初始字节码中的根据控件标识查找控件的规则。通过对初始字节码进行调整,可以避免侵入源码。并且调整后的规则包括:在未查找到控件时,调整控件标识再次查找控件。每次查找所使用的控件标识指示的控件具有相同的名称,即调整前后的控件标识指示的控件具有相同的名称。使得错误引用同名的控件资源之后,通过再次查找可以找到控件,避免后续生成的可执行文件在执行时崩溃。根据调整后的初始字节码生成可执行文件。调整后的初始字节码已经消除了,因错误引用同名的控件资源带来的影响。因此可执行文件在执行时不会因错误引用同名的控件资源而发生崩溃,在根据可执行文件生成的应用程序运行之前,提前解决了错误引用的问题。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为错误引用控件资源的场景示意图;
图2为本发明实施例提供的消除错误引用控件资源的方法的步骤流程图;
图3为本发明实施例提供的调整初始字节码中的根据控件标识查找控件的规则的步骤流程图;
图4为本发明实施例提供的消除错误引用控件资源的方法的处理流程图;
图5为本发明实施例提供的消除错误引用控件资源的装置的结构框图;
图6为本发明实施例提供的调整模块的结构框图;
图7为本发明实施例提供的电子设备的结构框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
应理解,说明书通篇中提到的“一个实施例”或“一实施例”意味着与实施例有关的特定特征、结构或特性包括在本发明的至少一个实施例中。因此,在整个说明书各处出现的“在一个实施例中”或“在一实施例中”未必一定指相同的实施例。此外,这些特定的特征、结构或特性可以任意适合的方式结合在一个或多个实施例中。
在本发明的各种实施例中,应理解,下述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
参见图2,本发明实施例提供了一种消除错误引用控件资源的方法,应用于Android APP Bundle机制下的Dynamic Feature模式下,该方法包括:
步骤201,获取通过Java文件编译生成的初始字节码。
应当说明的是,Java文件编译生成的Java class,也可以被称为class文件,即初始字节码。其中class文件的数量为多个,较佳的,可以获取所有的class文件,即获取通过Java文件编译生成的所有初始字节码。
由于传统方法中,很难在Java文件的编译的过程中对Java文件或class文件的内容进行修改。因此在不侵入源码的情况下,可以通过字节码修改技术,对已生成的class文件的内容进行修改,从而达到与修改源码一样的目的。
步骤202,调整初始字节码中的根据控件标识查找控件的规则。
应当说明的是,调整后的规则包括:在未查找到控件时,调整控件标识再次查找控件;每次查找所使用的控件标识指示的控件具有相同的名称。当然若查找到控件则返回被查找到的控件的标识,该标识为控件的唯一标识,不同控件的标识一定不同。较佳的,可以通过字节码修改技术对初始字节码的内容进行修改,从而调整初始字节码中的根据控件标识查找控件的规则。
步骤203,根据调整后的初始字节码生成可执行文件。
应当说明的是,可执行文件为可以被安卓平台虚拟机识别、加载和执行的文件,即dex文件。具体的,调整后的初始字节码通过dx命令,生成dex文件。
本发明实施例中,获取通过Java文件编译生成的初始字节码;然后调整初始字节码中的根据控件标识查找控件的规则。通过对初始字节码进行调整,可以避免侵入源码。并且调整后的规则包括:在未查找到控件时,调整控件标识再次查找控件。每次查找所使用的控件标识指示的控件具有相同的名称,即调整前后的控件标识指示的控件具有相同的名称。使得错误引用同名的控件资源之后,通过再次查找可以找到控件,避免后续生成的可执行文件在执行时崩溃。根据调整后的初始字节码生成可执行文件。调整后的初始字节码已经消除了,因错误引用同名的控件资源带来的影响。因此可执行文件在执行时不会因错误引用同名的控件资源而发生崩溃,在根据可执行文件生成的应用程序运行之前,提前解决了错误引用的问题。
如图3所示,在上述发明实施例的基础上,本发明实施例中,调整初始字节码中的根据控件标识查找控件的规则的步骤包括:
步骤301,获取初始字节码中的目标方法被调用时的载体和用于指示控件标识的引用代码。
应当说明的是,可以通过遍历的方式先确定目标方法,即遍历初始字节码中的信息,确定目标方法。目标方法用于根据引用代码指示的控件标识在载体中查找控件。例如该目标方法可以为findViewById方法。执行引用代码将会获得其指示的控件标识。例如引用代码为base.R.id.textview1,则执行该引用代码时将会获得一控件名称为textview1对应的控件标识。其中,同一控件的控件名称与控件标识具有对应关系。
载体可以为某一视图、某一弹窗或者某一窗口。该目标方法就是要在某一视图、某一弹窗或者某一窗口中查找具有引用代码指示的控件标识的控件,并返回查找到的控件。
在实现获取目标方法被调用时的载体和引用代码时,可以拦截目标方法的调用栈,然后再获取目标方法的参数,即载体和引用代码。
步骤302,根据引用代码指示的控件标识,在载体中查找控件。
应当说明的是,若查找到控件,则将查找到的控件的控件标识作为目标方法的返回值。载体中将存在多个控件,每个控件具有不同的控件标识;在载体中查找控件,即为在载体中的多个控件中,查找某一控件,该控件的控件标识与引用代码指示的控件标识相同。
较佳的,在载体中查找控件时,可以根据载体的类型,调用不同类型下的findViewById方法在载体中查找控件;其中,载体的类型至少包括:弹窗、视图以及窗口。当然载体的类型还可以为安卓四大组件之一的Activity,但不限于此。
步骤303,在未查找到控件时,根据引用代码中的控件名称重新确定控件标识,根据重新确定的控件标识再次在载体中查找控件。
应当说明的是,在不同控件具有相同控件名称的情形下,由于不同控件的控件标识一定不同,因此在使用某一控件标识在载体中无法查找到对应控件时,可以根据该控件标识确定控件的名称,然后利用确定的控件名称查找同名的控件资源的控件标识。
在重新确定控件标识时,由于需要使重新确定的控件标识与首次查找时的控件标识均对应同一控件名称,因此需要先确定控件名称。可以根据引用代码中包含的控件名称,如引用代码为base.R.id.textview1时,控件名称为textview1;当然也可以直接在初始字节码中查找对应的控件名称。
通过控件名称确定控件标识时,可以利用Java的反射机制。较佳的,根据引用代码中的控件名称重新确定控件标识的步骤包括:
通过Java的反射机制在Base APK资源库中,查找引用代码中的控件名称对应的控件标识;将查找到的引用代码中的控件名称对应的控件标识作为重新确定的控件标识。
若仍未找到控件,还可以调整控件标识继续查找。具体的,在根据重新确定的控件标识再次在载体中查找控件的步骤之后,该方法还包括:
再次在载体中未查找到控件时,在所有Dynamic Feature APK资源库中查找引用代码中的控件名称对应的控件标识;根据查找到的控件标识再次在载体中查找控件。利用Java的反射机制在所有Dynamic Feature APK资源库中查找引用代码中的控件名称对应的控件标识。
步骤304,将查找到的控件的控件标识作为目标方法的返回值。
应当说明的是,可以将原目标方法的返回值参数替换为利用调整后的规则查找到的控件的控件标识。
参见图4,为本发明的又一实施例的一种消除错误引用控件资源的方法的处理流程图。其中,在Dynamic Feature模式下,将通过Java文件编译生成的class文件转换成dex文件;即将class0、class1…转换为dex0、dex1…。在转换过程中,遍历每个class文件,利用字节码修改技术,获取findViewById方法的调用,并修改成插件实现的findViewById。也可以理解为拦截每个findViewById方法的调用栈,替换成预先设置好的插件。
插件实现的findViewById具体为:获取被调用的findViewById方法中携带的参数。其中参数包括载体、控件标识(Identity document,简称ID)以及控件名称。然后根据载体的类型进行分发处理。载体的类型至少包括Activity、Dialog(弹窗)、Window(窗口)、View(视图)。并且每种载体类型对应各自的findViewById方法。
以载体类型为Activity为例,调用Activity对应的findViewById方法,在载体中查找控件标识对应的控件。若查找到对应的控件,则返回查找到的控件的控件标识。若未查找到对应的控件,则根据控件名称在Base APK中反射获取控件标识,然后继续调用Activity对应的findViewById方法,根据反射获取的控件标识在载体中继续查找对应的控件。若查找到对应的控件,则返回查找到的控件的控件标识。若未查找到对应的控件,则根据控件名称在所有Dynamic Feature APK中反射获取控件标识,然后继续调用Activity对应的findViewById方法,根据反射获取的控件标识在载体中继续查找对应的控件。载体的类型为Dialog、Window、View时,处理过程与载体的类型为Activity时的处理过程类似,在此不再赘述。
以上介绍了本发明实施例提供的消除错误引用控件资源的方法,下面将结合附图介绍本发明实施例提供的消除错误引用控件资源的装置。
参见图5和图6,本发明实施例还提供了一种消除错误引用控件资源的装置,该装置包括:
获取模块51,用于获取通过Java文件编译生成的初始字节码;
调整模块52,用于调整初始字节码中的根据控件标识查找控件的规则;其中,调整后的规则包括:在未查找到控件时,调整控件标识再次查找控件;每次查找所使用的控件标识指示的控件具有相同的名称;
生成模块53,用于根据调整后的初始字节码生成可执行文件。
可选地,调整模块52包括:
获取单元521,用于获取初始字节码中的目标方法被调用时的载体和用于指示控件标识的引用代码;其中,目标方法用于根据引用代码指示的控件标识在载体中查找控件;
第一查找单元522,用于根据引用代码指示的控件标识,在载体中查找控件;
第二查找单元523,用于在未查找到控件时,根据引用代码中的控件名称重新确定控件标识;根据重新确定的控件标识再次在载体中查找控件;
返回单元524,用于将查找到的控件的控件标识作为目标方法的返回值。
可选地,第二查找单元523,具体用于通过Java的反射机制在Base APK资源库中,查找引用代码中的控件名称对应的控件标识;将查找到的引用代码中的控件名称对应的控件标识作为重新确定的控件标识。
可选地,该装置还包括:
第三查找单元,用于再次在载体中未查找到控件时,在所有Dynamic Feature APK资源库中查找引用代码中的控件名称对应的控件标识;根据查找到的控件标识再次在载体中查找控件。
可选地,第一查找单元522,具体用于根据载体的类型,调用不同类型下的findViewById方法在载体中查找控件;其中,载体的类型至少包括:弹窗、视图以及窗口。
可选地,该装置还包括:
遍历模块,用于遍历初始字节码中的信息,确定目标方法。
本发明实施例提供的消除错误引用控件资源的装置能够实现图2和图3的方法实施例中消除错误引用控件资源的方法实现的各个过程,为避免重复,这里不再赘述。
在本发明实施例中,获取模块,用于获取通过Java文件编译生成的初始字节码。调整模块,用于调整初始字节码中的根据控件标识查找控件的规则。通过对初始字节码进行调整,可以避免侵入源码。并且调整后的规则包括:在未查找到控件时,调整控件标识再次查找控件。每次查找所使用的控件标识指示的控件具有相同的名称,即调整前后的控件标识指示的控件具有相同的名称。使得错误引用同名的控件资源之后,通过再次查找可以找到控件,避免后续生成的可执行文件在执行时崩溃。生成模块,用于根据调整后的初始字节码生成可执行文件。调整后的初始字节码已经消除了,因错误引用同名的控件资源带来的影响。因此可执行文件在执行时不会因错误引用同名的控件资源而发生崩溃,在根据可执行文件生成的应用程序运行之前,提前解决了错误引用的问题。
另一方面,本发明实施例还提供了一种电子设备,包括存储器、处理器、总线以及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述消除错误引用控件资源的方法中的步骤。
举个例子如下,图7示出了一种电子设备的实体结构示意图。
如图7所示,该电子设备可以包括:处理器(processor)710、通信接口(Communications Interface)720、存储器(memory)730和通信总线740,其中,处理器710,通信接口720,存储器730通过通信总线740完成相互间的通信。处理器710可以调用存储器730中的逻辑指令,以执行如下方法:
获取通过Java文件编译生成的初始字节码;
调整所述初始字节码中的根据控件标识查找控件的规则;其中,调整后的规则包括:在未查找到控件时,调整控件标识再次查找控件;每次查找所使用的控件标识指示的控件具有相同的名称;
根据调整后的所述初始字节码生成可执行文件。
此外,上述的存储器730中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
再一方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各实施例提供的消除错误引用控件资源的方法,例如包括:
获取通过Java文件编译生成的初始字节码;
调整所述初始字节码中的根据控件标识查找控件的规则;其中,调整后的规则包括:在未查找到控件时,调整控件标识再次查找控件;每次查找所使用的控件标识指示的控件具有相同的名称;
根据调整后的所述初始字节码生成可执行文件。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (8)
1.一种消除错误引用控件资源的方法,其特征在于,应用于Android APP Bundle机制下的Dynamic Feature模式下,所述方法包括:
获取通过Java文件编译生成的初始字节码;
调整所述初始字节码中的根据控件标识查找控件的规则;其中,调整后的规则包括:在未查找到控件时,调整控件标识再次查找控件;每次查找所使用的控件标识指示的控件具有相同的名称;
根据调整后的所述初始字节码生成可执行文件;
调整所述初始字节码中的根据控件标识查找控件的规则的步骤包括:
获取所述初始字节码中的目标方法被调用时的载体和用于指示控件标识的引用代码;其中,所述目标方法用于根据所述引用代码指示的控件标识在所述载体中查找控件;
根据所述引用代码指示的控件标识,在所述载体中查找控件;
在未查找到控件时,根据所述引用代码中的控件名称重新确定控件标识;根据重新确定的控件标识再次在所述载体中查找控件;
将查找到的控件的控件标识作为所述目标方法的返回值。
2.根据权利要求1所述的方法,其特征在于,根据所述引用代码中的控件名称重新确定控件标识的步骤包括:
通过Java的反射机制在基础安卓应用程序包Base APK资源库中,查找所述引用代码中的控件名称对应的控件标识;
将查找到的所述引用代码中的控件名称对应的控件标识作为重新确定的控件标识。
3.根据权利要求1所述的方法,其特征在于,在所述根据重新确定的控件标识再次在所述载体中查找控件的步骤之后,所述方法还包括:
再次在所述载体中未查找到控件时,在所有动态化构建模式安卓应用程序包DynamicFeatureAPK资源库中查找所述引用代码中的控件名称对应的控件标识;
根据查找到的控件标识再次在所述载体中查找控件。
4.根据权利要求1所述的方法,其特征在于,在所述载体中查找控件的步骤包括:
根据所述载体的类型,调用不同类型下的findViewById方法在载体中查找控件;其中,所述载体的类型至少包括:弹窗、视图以及窗口。
5.根据权利要求1所述的方法,其特征在于,在所述获取所述初始字节码中的目标方法被调用时的载体和用于指示控件标识的引用代码的步骤之前,所述方法还包括:
遍历所述初始字节码中的信息,确定所述目标方法。
6.一种消除错误引用控件资源的装置,其特征在于,应用于Android APP Bundle机制下的Dynamic Feature模式下,所述装置包括:
获取模块,用于获取通过Java文件编译生成的初始字节码;
调整模块,用于调整所述初始字节码中的根据控件标识查找控件的规则;其中,调整后的规则包括:在未查找到控件时,调整控件标识再次查找控件;每次查找所使用的控件标识指示的控件具有相同的名称;
生成模块,用于根据调整后的所述初始字节码生成可执行文件;
所述调整模块包括:
获取单元,用于获取所述初始字节码中的目标方法被调用时的载体和用于指示控件标识的引用代码;其中,所述目标方法用于根据所述引用代码指示的控件标识在所述载体中查找控件;
第一查找单元,用于根据所述引用代码指示的控件标识,在所述载体中查找控件;
第二查找单元,用于在未查找到控件时,根据所述引用代码中的控件名称重新确定控件标识;根据重新确定的控件标识再次在所述载体中查找控件;
返回单元,用于将查找到的控件的控件标识作为所述目标方法的返回值。
7.一种电子设备,包括处理器、存储器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述计算机程序被所述处理器执行时实现如权利要求1至5中任一项所述的消除错误引用控件资源的方法的步骤。
8.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储计算机程序,所述计算机程序被处理器执行时实现如权利要求1至5中任一项所述的消除错误引用控件资源的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010366682.3A CN111694730B (zh) | 2020-04-30 | 2020-04-30 | 一种消除错误引用控件资源的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010366682.3A CN111694730B (zh) | 2020-04-30 | 2020-04-30 | 一种消除错误引用控件资源的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111694730A CN111694730A (zh) | 2020-09-22 |
CN111694730B true CN111694730B (zh) | 2023-07-25 |
Family
ID=72476903
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010366682.3A Active CN111694730B (zh) | 2020-04-30 | 2020-04-30 | 一种消除错误引用控件资源的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111694730B (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103186740A (zh) * | 2011-12-27 | 2013-07-03 | 北京大学 | 一种Android恶意软件的自动化检测方法 |
CN110674025A (zh) * | 2018-07-03 | 2020-01-10 | 百度在线网络技术(北京)有限公司 | 交互行为监测方法、装置以及计算机设备 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7533141B2 (en) * | 2003-01-24 | 2009-05-12 | Sun Microsystems, Inc. | System and method for unique naming of resources in networked environments |
US7376534B2 (en) * | 2004-05-21 | 2008-05-20 | Bea Systems, Inc. | Watches and notifications |
CN103970514B (zh) * | 2013-01-28 | 2018-04-06 | 腾讯科技(深圳)有限公司 | 安卓应用程序安装包的信息获取方法和装置 |
CN107092494B (zh) * | 2016-02-18 | 2020-09-01 | 腾讯科技(深圳)有限公司 | 访问apk资源的方法和装置 |
CN106569880B (zh) * | 2016-11-07 | 2020-12-22 | Tcl科技集团股份有限公司 | 一种Android应用间动态共享资源的方法及*** |
-
2020
- 2020-04-30 CN CN202010366682.3A patent/CN111694730B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103186740A (zh) * | 2011-12-27 | 2013-07-03 | 北京大学 | 一种Android恶意软件的自动化检测方法 |
CN110674025A (zh) * | 2018-07-03 | 2020-01-10 | 百度在线网络技术(北京)有限公司 | 交互行为监测方法、装置以及计算机设备 |
Also Published As
Publication number | Publication date |
---|---|
CN111694730A (zh) | 2020-09-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20190324772A1 (en) | Method and device for processing smart contracts | |
EP3128421B1 (en) | Method, device, and system for achieving java application installation by cloud compilation | |
CN107967139B (zh) | 游戏的热更新方法及装置 | |
CN113467980B (zh) | 日志输出方法、装置及***和嵌入式设备 | |
CN111679852B (zh) | 一种冲突依赖库的检测方法及装置 | |
CN112612502A (zh) | 补丁生成方法、装置、设备及存储介质 | |
CN112882732A (zh) | 一种软件开发工具包sdk中功能代码的更新方法和装置 | |
CN112668008A (zh) | 一种基于lsm来实现动态的***调用劫持的方法 | |
CN111625225A (zh) | 一种程序指定数据输出方法和装置 | |
CN113220326B (zh) | 智能合约升级方法及区块链*** | |
US20040216138A1 (en) | Method and system for processing input from a command line interface | |
CN110688320B (zh) | 全局变量的检测方法、装置及终端设备 | |
CN111694730B (zh) | 一种消除错误引用控件资源的方法及装置 | |
CN113641389B (zh) | 基于OpenCPU的软件升级方法、装置及设备 | |
CN116342283A (zh) | 可信智能合约实现方法、装置、设备及可读存储介质 | |
CN113220327B (zh) | 智能合约升级方法及区块链*** | |
CN112148318B (zh) | 应用包发布方法、应用方法、装置、介质、服务器及设备 | |
CN114706586A (zh) | 代码编译、代码运行方法、装置、计算机设备及存储介质 | |
CN114253615B (zh) | 一种引导程序设置方法、装置、电子设备及存储介质 | |
CN114371852B (zh) | 一种编译方法及装置 | |
CN111506301B (zh) | 绕过***限制反射调用的方法及相关设备 | |
CN113672238B (zh) | 基于实时操作***模块化管理的运行方法、装置及设备 | |
CN114416219B (zh) | ***函数调用方法、装置、电子设备及可读介质 | |
CN112256324B (zh) | 安卓应用程序构建过程中对文件的处理方法及装置 | |
CN111045657B (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 | ||
GR01 | Patent grant |