CN111752548A - 一种sdk嵌入方法及装置、计算机可读存储介质 - Google Patents
一种sdk嵌入方法及装置、计算机可读存储介质 Download PDFInfo
- Publication number
- CN111752548A CN111752548A CN202010442806.1A CN202010442806A CN111752548A CN 111752548 A CN111752548 A CN 111752548A CN 202010442806 A CN202010442806 A CN 202010442806A CN 111752548 A CN111752548 A CN 111752548A
- Authority
- CN
- China
- Prior art keywords
- sdk
- embedding
- information
- plug
- project
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种SDK嵌入方法,所述方法包括:将辅助嵌入插件部署至项目工程中;在项目工程的编译阶段运行所述辅助嵌入插件,以获取所述项目工程的编译信息;当所述项目工程的编译信息出错时,所述辅助嵌入插件触发中断编译,并发出异常信息。本发明还提供了一种SDK嵌入装置、计算机可读存储介质。本发明提供的SDK嵌入装置、计算机可读存储介质,可以在SDK嵌入阶段定位并排查SDK嵌入过程中的问题,避免APP上线以后并提供给最终用户下载并安装运行以后才能发现异常。
Description
技术领域
本发明涉及通信技术领域,特别涉及一种SDK嵌入方法及装置、计算机可读存储介质。
背景技术
软体开发工具包(Software Development Kit,SDK)是用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。有了SDK以后,应用软件(Application,APP)开发者不需要再对产品的每个功能进行开发,只需要将SDK嵌入APP中,就可以迅速的在APP中集成某项功能。
APP开发者在将SDK嵌入到APP过程中可能会存在各种问题,如果这些问题在嵌入阶段无法被定位出来,就有可能导致上线的APP也是有问题的。有鉴于此,有必要提供一种可在SDK嵌入阶段就把异常定位出来的SDK嵌入方法。
发明内容
为了解决现有技术中的问题,本发明实施例提供一种SDK嵌入方法及装置,以解决现有技术中无法在SDK嵌入阶段把异常定位出来的问题。所述技术方案如下:
第一方面,提供了一种SDK嵌入方法,所述方法包括:
将辅助嵌入插件部署至项目工程中;
在所述项目工程的编译阶段运行所述辅助嵌入插件,以获取所述项目工程的编译信息;
当所述项目工程的编译信息出错时,所述辅助嵌入插件触发中断编译,并发出异常信息。
可选的,所述将辅助嵌入插件部署至项目工程中的步骤具体包括:
将SDK业务层代码的归档文件拷贝到所述项目工程的libs目录下;
在所述项目工程的bulid.gradle目录添加所述辅助嵌入插件的归档文件的依赖路径;
在app目录下的build.gradle子目录通过apply plugin的方式引入所述辅助嵌入插件。
可选的,所述项目工程的编译阶段包括:将java源文件转换为java字节码文件,然后再将java字节码文件转换成Dalvik字节码文件。
可选的,在将所述java源文件转换为所述java字节码文件之前运行所述辅助嵌入插件。
可选的,所述编译信息包括:SDK版本信息、Gradle插件信息,以及工程信息中的一者或多者。
可选的,所述工程信息包括:
通过iml文件获取的工程结构和引入的第三方库;
通过build.gradle文件获取的项目工程插件引入信息;
通过proguard-rules.pro文件获取的混淆配置信息;以及
通过AndroidManifest.xml文件获取的权限配置信息中的一者或多者。
可选的,所述方法还包括将所述异常信息保存至编译日志的步骤。
可选的,所述方法还包括在运行所述辅助嵌入插件之后,所述辅助嵌入插件检查是否按照嵌入文档要求的顺序进行SDK嵌入的步骤。
第二方面,提供了一种SDK嵌入装置,所述SDK嵌入装置包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现上述SDK嵌入方法。
第三方面,提供了一种计算机可读存储介质,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现上述SDK嵌入方法。
本发明实施例提供的技术方案带来的有益效果是:
本发明实施例在SDK嵌入阶段,特别是在将java源文件转换为java字节码文件之前,通过在项目工程中引入辅助嵌入插件,以检查项目工程的编译信息是否出现异常,并在检查到异常时停止编译,发出异常信息,并将异常信息写入到编译日志中。如此一来,无论是SDK开发者还是APP开发者都可以通过编译日志在SDK嵌入阶段定位并排查SDK嵌入过程中的问题,避免APP上线以后并提供给最终用户下载并安装运行以后才能发现异常。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例中SDK嵌入方法的示意图;
图2是本发明实施例中SDK嵌入装置的示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
通常而言,SDK开发者可以根据APP开发者所提出的业务需求,开发出与业务需求功能一致的SDK提供给APP开发者嵌入APP中。SDK开发者可以通过Android Studio或者Eclipse开发工具,将SDK打包为jar(Java Archive)包或者aar(Android Archive)包,连同SDK示例代码和SDK嵌入文档上传至SDK开发者网站供APP开发者下载。APP开发者下载SDK后,同样通过Android Studio或者Eclipse开发工具将SDK嵌入APP。比如可以通过Eclipse开发工具中导入jar包,并安装adt(Android Development Tools)插件,使得Eclipse开发工具可以和SDK建立连接。然后,按照SDK嵌入文档修改配置文件后,即可完成SDK嵌入APP。
APP开发者在将SDK嵌入APP时,如果没有按照嵌入文档的要求进行嵌入,或者配置编译信息异常(包括SDK版本信息、Gradle插件信息,以及工程信息中的一者或多者),均会导致SDK嵌入出错或者在APP的运行过程中出现异常。由于SDK通常至少包括业务层代码和插件,本发明实施例在SDK的插件部分部署有辅助嵌入插件,在编译阶段检查项目工程的编译信息是否出现异常,并在检查到异常时收集异常信息,写入到编译日志中,APP开发者可以通过编译日志排查嵌入过程中的问题。
请参阅图1,本发明实施例提供的SDK嵌入方法包括如下步骤:
S101,将辅助嵌入插件部署至项目工程中;
在一个可选的实施例中,项目工程指APP开发者使用的代码工程环境,以AndroidStudio开发工具为例,项目工程是以目录的形式进行表征,每一个目录就是一个文件夹,每个目录下还可以包含子目录(也称作模块)。Android Studio下的项目工程通常至少包括.gradle、.idea、app、build、build.gradle等目录,.gradle和.idea目录存放的是AndroidStudio自动生成的文件,build存放的是编译时自动生成的文件,build.gradle存放的是项目全局的gradle构建脚本,app目录存放的是项目中的代码、资源等内容。app目录通常又至少包含libs子目录和build.gradle子目录,libs子目录存放的是第三方的jar包,build.gradle存放的是app模块的gradle构建脚本,该子目录中指定有与项目构建相关的配置。
本实施例中,辅助嵌入插件可以是基于自动存储管理(Automatic StorageManagement,ASM)编写的Gradle插件。所述Gradle插件在编译过程中可以执行代码并影响编译结果,当然也可以是其它插件,本发明对此不作限定。ASM技术为Java字节码的操纵框架,因此所述辅助嵌入插件可以读取Java字节码中的类,并可以改变类在Java字节码中的行为,以及分析类的Java字节码信息,还可以生成自定义的新类。辅助嵌入插件可以打包成为Jar包或者aar包。
将辅助嵌入插件部署至项目工程中的具体过程可以为:首先将SDK的业务层代码的归档文件(可以是jar包或者aar包)拷贝到项目工程的libs目录下,然后在项目工程的bulid.gradle目录添加辅助嵌入插件的归档文件的依赖路径,最后在app目录下的build.gradle子目录通过apply plugin的方式引入辅助嵌入插件。辅助嵌入插件部署至APP开发者的项目工程后,在所述项目工程中扫描APP开发者的代码执行过程与代码工程环境。
S102,在项目工程的编译阶段运行辅助嵌入插件,以获取项目工程的编译信息;
在SDK嵌入的过程中,需要通过编译器对SDK文件进行编译并打包,具体过程为先将java源文件(后缀为.java)转换为java字节码文件(后缀为.class),然后再将java字节码文件转换成Dalvik字节码文件(后缀为.dex),最后再打包成安卓安装包(后缀为.apk)。
本发明实施例中,在将java源文件转换为java字节码文件之前就开始触发辅助嵌入插件运行以获取项目工程的编译信息。辅助嵌入插件运行以后,如果检测到异常,则发出RunTime异常信息,编译器收到RunTime异常信息之后就中断编译,促使APP开发者关注到异常提示信息并解决异常,不会像现有的编译流程,在SDK编译完成APP,并在线上发布以后并使用以后才发现异常,也就能从根本上把异常杜绝在SDK嵌入刚开始的阶段。
在一个可选的实施例中,编译信息至少包括:SDK版本信息、Gradle插件信息,以及工程信息中的一者或多者。工程信息可以包括工程配置信息、项目工程插件引入信息、混淆配置信息,以及权限配置信息中的一者或多者。
SDK版本信息是通过transform的方式扫描SDK的字节码获取,然后比对SDK版本信息,以确认SDK版本是否匹配,如果版本不匹配则发出RunTime异常,并在编译日志中记录该异常信息。具体而言,由于一个SDK可能包含了多个业务,每一个业务由对应的程序包和插件组成,所以一个SDK也可能包含多个程序包和插件,而不同业务的程序包或者插件之间可能有版本依赖关系;当APP开发者所使用的第三方插件或第三方程序包的版本与SDK的程序包和插件的版本不对应时,会导致SDK嵌入出错或者在APP的运行过程中出现异常,因此需要获取SDK版本信息进行比对。由于本步骤在编译开始之前,就获取SDK版本信息进行比对,就可以避免在APP上线并使用以后才发现,也就避免了SDK开发者在APP运行出现问题以后需要反复与APP开发者之间的反复沟通。因此,在本步骤中,如果二者的版本不一致则进入步骤S103。
在SDK的嵌入过程中,通常需要通过Gradle插件构建编译环境,如果SDK开发者所使用的Gradle插件版本和APP开发者SDK所使用的Gradle插件的版本不一致,就可能导致在SDK嵌入过程中会出现异常。因此本实施例中可以通过嵌入辅助插件,在编译阶段提前获取项目工程的Gradle插件信息,如果二者的版本不一致则进入步骤S103。
工程配置信息通常在iml文件中描述或者定义,工程配置信息可以包含工程结构和引入的第三方库。iml文件是由IntelliJ IDEA自动创建的模块文件,当APP开发者的工程配置信息出错,则进入步骤S103。
项目工程插件引入信息可以在build.gradle文件中描述或者定义。例如,当APP开发者没有按照嵌入文档要求的顺序引入SDK插件,或定义SDK插件的配置项异常,则进入步骤S103。
混淆配置信息在proguard-rules.pro文件中描述及定义;APP开发者在APP打包过程中,会对APP进行混淆,如果没有按照proguard-rules.pro文件中的混淆配置信息进行混淆,比如将SDK源代码一起混淆,就会导致混淆后的APP出现异常;因此在本步骤中,可以通过辅助嵌入插件在编译阶段,检测项目工程的SDK混淆配置是否异常,如果异常则进入步骤S103。
权限配置信息在AndroidManifest.xml文件中描述或者定义。APP开发者在APP打包过程中,需要获取一定的访问权限(比如访问外部存储路径、访问网络等),如果没有给APP配置相应的权限,就会导致APP在运行时才发现,因此本实施例可以通过辅助嵌入插件在编译阶段提前发现权限配置是否异常,如果异常则进入步骤S103。
在一个可选的实施例中,如果APP开发者在将SDK嵌入到APP过程中,如果没有按照嵌入文档要求的顺序进行SDK嵌入,所打包的APP在运行过程中也会出现异常。因此,还可以通过辅助嵌入插件检查是否按照嵌入文档执行嵌入,如果没有按照嵌入文档执行嵌入,也会被判定为异常,并进入步骤S103。
S103,当项目工程的编译信息出错时,辅助嵌入插件触发中断编译,并发出异常信息。
在步骤S102中,只要辅助嵌入插件检查出异常,都会触发中断编译,并发出异常信息。在一个可选的实施例中,在发出异常信息之后,还可以将异常信息保存到编译日志,编译日志可以作为后续排查异常的依据。如果触发异常以后,APP开发者无法根据发出的异常信息解决异常,需要SDK开发者介入协助用户排查原因,SDK开发者可以根据所保存的编译日志,模拟与APP开发者的开发环境进行复现和排查。
本发明实施例提供的SDK嵌入方法,可以在SDK嵌入阶段,特别是在将java源文件转换为java字节码文件之前,通过在项目工程中引入辅助嵌入插件,以检查项目工程的编译信息是否出现异常,并在检查到异常时停止编译,发出异常信息,并将异常信息写入到编译日志中。如此一来,无论是SDK开发者还是APP开发者都可以通过编译日志在SDK嵌入阶段定位并排查SDK嵌入过程中的问题,避免APP上线以后并提供给最终用户下载并安装运行以后才能发现异常。
图2是本发明实施例提供的SDK嵌入装置的结构示意图。该SDK嵌入装置1100可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上中央处理器1122(例如,一个或一个以上处理器)和存储器1132,一个或一个以上存储应用程序1142或数据1144的存储介质1130(例如一个或一个以上海量存储设备)。其中,存储器1132和存储介质1130可以是短暂存储或持久存储。存储在存储介质1130的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对SDK嵌入装置1100中的一系列指令操作。更进一步地,中央处理器1122可以设置为与存储介质1130通信,在SDK嵌入装置1100上执行存储介质1130中的一系列指令操作。
SDK嵌入装置1100还可以包括一个或一个以上电源1129,一个或一个以上有线或无线网络接口1150,一个或一个以上输入输出接口1158,一个或一个以上键盘1156,和/或,一个或一个以上操作系统1141,例如Windows Server,Mac OS X,Unix,Linux,FreeBSD等等。
SDK嵌入装置1100可以包括有存储器,以及一个或者一个以上的程序,其中一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理器执行所述一个或者一个以上程序包含用于进行上述SDK嵌入特征的指令。
本发明实施例提供的SDK嵌入装置可以实现如图1所示的SDK嵌入方法相同的技术效果,在此不再赘述。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种SDK嵌入方法,其特征在于,所述方法包括:
将辅助嵌入插件部署至项目工程中;
在所述项目工程的编译阶段运行所述辅助嵌入插件,以获取所述项目工程的编译信息;
当所述项目工程的编译信息出错时,所述辅助嵌入插件触发中断编译,并发出异常信息。
2.根据权利要求1所述的方法,其特征在于,所述将辅助嵌入插件部署至项目工程中的步骤具体包括:
将SDK业务层代码的归档文件拷贝到所述项目工程的libs目录下;
在所述项目工程的bulid.gradle目录添加所述辅助嵌入插件的归档文件的依赖路径;
在app目录下的build.gradle子目录通过apply plugin的方式引入所述辅助嵌入插件。
3.根据权利要求1所述的方法,其特征在于,所述项目工程的编译阶段包括:将java源文件转换为java字节码文件,然后再将java字节码文件转换成Dalvik字节码文件。
4.根据权利要求3所述的方法,其特征在于,在将所述java源文件转换为所述java字节码文件之前运行所述辅助嵌入插件。
5.根据权利要求1所述的方法,其特征在于,所述编译信息包括:SDK版本信息、Gradle插件信息,以及工程信息中的一者或多者。
6.根据权利要求5所述的方法,其特征在于,所述工程信息包括:
通过iml文件获取的工程结构和引入的第三方库;
通过build.gradle文件获取的项目工程插件引入信息;
通过proguard-rules.pro文件获取的混淆配置信息;以及
通过AndroidManifest.xml文件获取的权限配置信息中的一者或多者。
7.根据权利要求1所述的方法,其特征在于,还包括将所述异常信息保存至编译日志的步骤。
8.根据权利要求1所述的方法,其特征在于,还包括在运行所述辅助嵌入插件之后,所述辅助嵌入插件检查是否按照嵌入文档要求的顺序进行SDK嵌入的步骤。
9.一种SDK嵌入装置,其特征在于,所述SDK嵌入装置包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如权利要求1至8任一项所述的SDK嵌入方法。
10.一种计算机可读存储介质,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现如权利要求1至8任一项所述的SDK嵌入方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010442806.1A CN111752548A (zh) | 2020-05-22 | 2020-05-22 | 一种sdk嵌入方法及装置、计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010442806.1A CN111752548A (zh) | 2020-05-22 | 2020-05-22 | 一种sdk嵌入方法及装置、计算机可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111752548A true CN111752548A (zh) | 2020-10-09 |
Family
ID=72673690
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010442806.1A Pending CN111752548A (zh) | 2020-05-22 | 2020-05-22 | 一种sdk嵌入方法及装置、计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111752548A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113064820A (zh) * | 2021-03-26 | 2021-07-02 | 深圳依时货拉拉科技有限公司 | 更新a/b实验sdk的方法、设备和计算机可读存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107122200A (zh) * | 2016-02-25 | 2017-09-01 | 博雅网络游戏开发(深圳)有限公司 | 加载插件sdk的方法、系统及客户端 |
WO2017151546A1 (en) * | 2016-03-01 | 2017-09-08 | 650 Industries, Inc. | Method and apparatus for loading multiple differing versions of a native library into a native environment |
CN108073406A (zh) * | 2018-01-05 | 2018-05-25 | 世纪龙信息网络有限责任公司 | 生成主Dex的方法及装置 |
CN111176722A (zh) * | 2019-12-30 | 2020-05-19 | 腾讯音乐娱乐科技(深圳)有限公司 | 第三方库的文件版本检测方法、装置及存储介质 |
-
2020
- 2020-05-22 CN CN202010442806.1A patent/CN111752548A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107122200A (zh) * | 2016-02-25 | 2017-09-01 | 博雅网络游戏开发(深圳)有限公司 | 加载插件sdk的方法、系统及客户端 |
WO2017151546A1 (en) * | 2016-03-01 | 2017-09-08 | 650 Industries, Inc. | Method and apparatus for loading multiple differing versions of a native library into a native environment |
CN108073406A (zh) * | 2018-01-05 | 2018-05-25 | 世纪龙信息网络有限责任公司 | 生成主Dex的方法及装置 |
CN111176722A (zh) * | 2019-12-30 | 2020-05-19 | 腾讯音乐娱乐科技(深圳)有限公司 | 第三方库的文件版本检测方法、装置及存储介质 |
Non-Patent Citations (1)
Title |
---|
余亮: "深入理解Android编译原理—自定义Gradle的插件", pages 1 - 6, Retrieved from the Internet <URL:https://zhuanlan.zhihu.com/p/104534757> * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113064820A (zh) * | 2021-03-26 | 2021-07-02 | 深圳依时货拉拉科技有限公司 | 更新a/b实验sdk的方法、设备和计算机可读存储介质 |
CN113064820B (zh) * | 2021-03-26 | 2022-09-16 | 深圳依时货拉拉科技有限公司 | 更新a/b实验sdk的方法、设备和计算机可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP2549380B1 (en) | Information processing device, virtual machine generation method, and application software distribution system | |
CN111367510B (zh) | 一种安卓功能模块开发的方法及装置 | |
US8843921B1 (en) | System and method for controlling installed third party software components | |
CN110727440B (zh) | 一种软件封装方法 | |
CN110321275B (zh) | 程序监控方法、装置、计算设备以及存储介质 | |
EP3296906A1 (en) | Method for protecting dex file from being decompiled in android system | |
US20060161898A1 (en) | Method and system for project library dependency management | |
CN112433747B (zh) | 一种适用于软件开发工具包sdk的差分升级方法及系统 | |
US20150074657A1 (en) | Runtime detection of software configurations and upgrades | |
CN111078229A (zh) | 一种应用程序处理方法、装置、存储介质及电子设备 | |
CN103713902A (zh) | 一种基于Android系统的BOA编译方法和系统 | |
CN112148297A (zh) | 一种服务器智能加密打包方法和装置 | |
CN111880894A (zh) | 一种前端容器镜像的生成方法及系统 | |
CN112286543B (zh) | 一种应用服务部署方法及装置 | |
CN118012453A (zh) | 软件部署方法、装置、电子设备、存储介质和程序产品 | |
CN117075960B (zh) | 程序重构方法、应用跨平台迁移方法、装置与计算设备 | |
CN111752548A (zh) | 一种sdk嵌入方法及装置、计算机可读存储介质 | |
CN117707543A (zh) | 一种应用安装包制作和安装方法、计算设备及存储介质 | |
CN111352631B (zh) | 一种接口兼容性检测方法及装置 | |
CN112559980A (zh) | 一种可内嵌众多任意app的小程序运行时 | |
CN106778270B (zh) | 一种恶意应用程序的检测方法及系统 | |
CN113641389B (zh) | 基于OpenCPU的软件升级方法、装置及设备 | |
CN113342660B (zh) | 文件测试方法、装置、系统、电子设备及可读存储介质 | |
CN113220314A (zh) | App资源加载及apk生成方法、装置、设备及介质 | |
US20090089779A1 (en) | Apparatus system and method for customizing a computing environment |
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 |