CN116521144A - 一种程序封装方法、装置及电子设备 - Google Patents

一种程序封装方法、装置及电子设备 Download PDF

Info

Publication number
CN116521144A
CN116521144A CN202310410385.8A CN202310410385A CN116521144A CN 116521144 A CN116521144 A CN 116521144A CN 202310410385 A CN202310410385 A CN 202310410385A CN 116521144 A CN116521144 A CN 116521144A
Authority
CN
China
Prior art keywords
resource
software development
file
main program
development kits
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
Application number
CN202310410385.8A
Other languages
English (en)
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.)
AlipayCom Co ltd
Original Assignee
AlipayCom 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 AlipayCom Co ltd filed Critical AlipayCom Co ltd
Priority to CN202310410385.8A priority Critical patent/CN116521144A/zh
Publication of CN116521144A publication Critical patent/CN116521144A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation

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

本说明书实施例公开了程序封装方法、装置及电子设备。方案包括:获取主程序调用的多个软件开发工具包,所述多个软件开发工具包用于实现所述主程序的辅助功能;对所述主程序进行编译,得到编译文件;当所述编译文件中的资源ID与所述多个软件开发工具包中的资源ID发生冲突时,根据所述编译文件中的资源ID修改所述多个软件开发工具包中的资源ID,以使一个所述资源ID标识的资源文件是唯一的;对所述主程序和修改后的所述多个软件开发工具包进行封装。

Description

一种程序封装方法、装置及电子设备
技术领域
本申请涉及计算机技术领域,尤其涉及一种程序封装方法、装置及电子设备。
背景技术
现有技术中,应用APP在向第三方应用提供某个服务时,第三方应用往往需要调用应用APP中多个软件开发工具包(SoftwareDevelopmentKit,SDK)来共同完成该服务,而多个SDK之间往往不相关,因此,第三方应用的开发人员需要学习每个SDK的具体内容和编程逻辑,从而给第三方应用带来过多的资源消耗,降低了接入效率。
因此,需要提供更快速或者更可靠的程序封装方案。
发明内容
有鉴于此,本申请实施例提供了一种程序封装方法、装置及电子设备,用于提高应用程序的接入效率。
为解决上述技术问题,本说明书实施例是这样实现的:
本说明书实施例提供的一种程序封装方法,包括:
获取主程序调用的多个软件开发工具包,所述多个软件开发工具包用于实现所述主程序的辅助功能;
对所述主程序进行编译,得到编译文件;
当所述编译文件中的资源ID与所述多个软件开发工具包中的资源ID发生冲突时,根据所述编译文件中的资源ID修改所述多个软件开发工具包中的资源ID,以使一个所述资源ID标识的资源文件是唯一的;
对所述主程序和修改后的所述多个软件开发工具包进行封装。
本说明书实施例提供的另一种程序封装方法,包括:
获取主程序调用的多个软件开发工具包,所述多个软件开发工具包用于实现所述主程序的辅助功能;
对所述主程序进行编译,得到编译文件;
当所述编译文件中的资源ID与所述多个软件开发工具包中的资源ID发生冲突时,修改所述编译文件中的资源ID和所述多个软件开发工具包中的资源ID,以使一个所述资源ID标识的资源文件是唯一的;
对修改后的所述编译文件和修改后的所述多个软件开发工具包进行封装。
本说明书实施例提供的一种程序封装装置,包括:
软件开发工具包获取模块,用于获取主程序调用的多个软件开发工具包,所述多个软件开发工具包用于实现所述主程序的辅助功能;
主程序编译模块,用于对所述主程序进行编译,得到编译文件;
资源ID修改模块,用于当所述编译文件中的资源ID与所述多个软件开发工具包中的资源ID发生冲突时,根据所述编译文件中的资源ID修改所述多个软件开发工具包中的资源ID,以使一个所述资源ID标识的资源文件是唯一的;
程序封装模块,用于对所述主程序和修改后的所述多个软件开发工具包进行封装。
本说明书实施例提供的另一种程序封装装置,包括:
软件开发工具包获取模块,用于获取主程序调用的多个软件开发工具包,所述多个软件开发工具包用于实现所述主程序的辅助功能;
主程序编译模块,用于对所述主程序进行编译,得到编译文件;
资源ID修改模块,用于当所述编译文件中的资源ID与所述多个软件开发工具包中的资源ID发生冲突时,修改所述编译文件中的资源ID和所述多个软件开发工具包中的资源ID,以使一个所述资源ID标识的资源文件是唯一的;
程序封装模块,用于对修改后的所述编译文件和修改后的所述多个软件开发工具包进行封装。
本说明书实施例提供的一种电子设备,包括:
至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够:
获取主程序调用的多个软件开发工具包,所述多个软件开发工具包用于实现所述主程序的辅助功能;
对所述主程序进行编译,得到编译文件;
当所述编译文件中的资源ID与所述多个软件开发工具包中的资源ID发生冲突时,根据所述编译文件中的资源ID修改所述多个软件开发工具包中的资源ID,以使一个所述资源ID标识的资源文件是唯一的;
对所述主程序和修改后的所述多个软件开发工具包进行封装。
本说明书实施例提供的另一种电子设备,包括:
至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够:
获取主程序调用的多个软件开发工具包,所述多个软件开发工具包用于实现所述主程序的辅助功能;
对所述主程序进行编译,得到编译文件;
当所述编译文件中的资源ID与所述多个软件开发工具包中的资源ID发生冲突时,修改所述编译文件中的资源ID和所述多个软件开发工具包中的资源ID,以使一个所述资源ID标识的资源文件是唯一的;
对修改后的所述编译文件和修改后的所述多个软件开发工具包进行封装。
本说明书实施例提供的一种计算机可读介质,其上存储有计算机可读指令,所述计算机可读指令可被处理器执行以实现上述方法。
本说明书实施例采用的上述至少一个技术方案能够达到以下有益效果:
本说明书实施例提供的程序封装方法,将支持服务功能实现的多个软件开发工具包和主程序进行合并后再输出,接入方的开发人员只需要学习一个合并程序的内容即可,无需对多个软件开发工具包分别进行学习,减少了接入方对接入服务的学习过程,提高了应用程序的接入效率。
另外,将多个软件开发工具包进行封装,可能会面临一个资源ID对应多个资源文件的情况,因此本方案将多个软件开发工具包和主程序中的资源文件的资源ID重新进行命名,从而避免一个资源ID对应多个资源文件引起的资源文件引用冲突问题的发生。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1为本说明书实施例提供的一种程序封装方法的实施例一的流程示意图;
图2为本说明书实施例提供的一种程序封装方法的实施例二的流程示意图;
图3为本说明书实施例提供的对应于图1的一种程序封装装置的结构示意图;
图4为本说明书实施例提供的对应于图2的一种程序封装装置的结构示意图;
图5为本说明书实施例提供的一种电子设备的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
当一个应用APP(接入方)需要接入另一个应用(输出方)的某项服务(如付款码服务)时,就需要调用输出方提供的该项服务的SDK,接入方的开发人员通过对该SDK进行解压,并学习该SDK的逻辑之后,就可以实现该SDK的功能。
但是,在一些情况下,输出方的开发平台的功能比较多,为了方便开发人员的编程,会把一些经常用到的实现基础功能的程序进行封装,生成基础SDK。开发人员在开发某项服务,需要实现某项功能时只需调用这些基础SDK来实现即可,无需再重新进行编程。因此,一些服务除了主程序之外,还包括调用的多个基础SDK。由于主程序和基础SDK不是一体的,在对外输出的时候,就需要将主程序和基础SDK分别进行输出,接入方的开发人员在接收到该主程序和基础SDK之后,就需要分别学习该主程序和基础SDK的编程语言和编程逻辑。这无形中增加了接入方的接入成本,降低了接入效率。
为了提高接入效率,本说明书实施例将主程序和基础SDK进行打包后,再进行输出,接入方的开发人员只需对打包后的SDK统一进行学习就可以了。但是,在打包的时候需要解决多个SDK中资源文件的资源ID发生冲突的问题。本说明书实施例对发生冲突的资源文件的资源ID进行修改,统一主程序和所述基础SDK中的资源ID,以达到一个资源ID对应一个资源文件,从而解决了资源ID冲突的问题。
以下结合附图,详细说明本申请各实施例提供的技术方案。
实施例一
图1为本说明书实施例提供的一种程序封装方法的实施例一的流程示意图。从程序角度而言,流程的执行主体可以为搭载于应用服务器的程序或应用客户端。
如图1所示,该流程可以包括以下步骤:
步骤102:获取主程序调用的多个软件开发工具包,所述多个软件开发工具包用于实现所述主程序的辅助功能。
软件开发工具包可以理解为SDK,某一个服务在实现的时候,往往需要调用多个基础SDK来共同完成。基础SDK可以理解为某个平台上提供的模块化的程序包,可以通过直接调用以实现某项基础功能,无需开发人员再进行编程。
如付款码服务,依赖6个基础SDK,分别为UTDID、无限保镖SDK、收银台SDK、付款码SDK、登录SDK和风控SDK。
其中,UTDID是用于生成通用唯一识别码(UniversallyUniqueIDentifier,UUID)的库。
无限保镖SDK是一套保障移动平台应用完整性、应用执行环境可信性、数据机密性的专业完整的安全解决方案,包含安全存储、安全加密、安全签名、人机识别四大核心功能。客户端提供SDK类型的安全组件供开发者接入,通过实现多层次的安全机制打造安全沙箱环境来防止应用被黑客或木马所攻击。
收银台SDK又叫无线快捷支付SDK,用于提供支付通道。
付款码SDK用于提供付款码的服务
登录SDK用于用户的登录。
风控SDK用于进行付款码服务的风险控制。
这里可以理解为,主程序可以理解为实现某项服务的程序代码,以付款码服务为例,主程序为付款码SDK内的程序,主程序在执行过程中还需要调用一些基础SDK来支撑付款码的这个服务,这些基础SDK为UTDID、无限保镖、收银台SDK、付款码SDK和登录SDK。
另外,需要注意的是,这些基础SDK可能与所述主程序存储在同一个服务器或者客户端,也可能存在于不同的服务器或客户端。
例如,开发人员A在服务器A上执行该步骤102,主程序以源代码的形式出现,而基础SDK可能存在于服务器A上的某个数据库中,也可能存在于服务器M中,其中服务器M用于存储所有的基础SDK,当调用基础SDK的时候,均需要从服务器M中调取。
需要说明的是,基础SDK的存储形式可以为打包状态,即以二进制代码的形式保存。
步骤104:对所述主程序进行编译,得到编译文件。
在本实施例中,主程序可以是以源代码的形式存在,源代码是用汇编语言和高级语言写出来的代码,如Java、C、Python、PHP、C++、C#、JavaScript、R、Go、OC、Swift等。
源代码中包括多种资源文件,所有可以从源代码中读取出需要的资源的文件,可以称之为“资源文件”。资源文件的类型可以是图片、音频、视频、文字资源,或者其他可以在计算机中展示的内容等等。由专门的程序接口去读取,并在应用程序中根据需要向用户展示。
将某一种程序设计语言写的程序翻译成等价的另一种语言写成的程序的程序,称之为编译程序。编译是利用编译程序从源语言编写的源程序产生目标程序的过程,编译也可以理解用编译程序产生目标程序的动作。
简单一点来讲,编译就是把人类可以读懂的高级语言变成计算机可以识别的语言,由于计算机只认识1和0,那么编译程序把人们熟悉的语言换成二进制的代码。
编译可以采用编译器来实现,编译程序把一个源程序翻译成目标程序的工作过程分为五个阶段:词法分析;语法分析;语义检查和中间代码生成;代码优化;目标代码生成。
在对主程序进行编译的时候,就是一个对代码和资源文件进行打包的过程,除了由源代码到目标代码的变化,伴随这编译的而过程,生产一些文件,可以称为编译文件。
步骤106:当所述编译文件中的资源ID与所述多个软件开发工具包中的资源ID发生冲突时,根据所述编译文件中的资源ID修改所述多个软件开发工具包中的资源ID,以使一个所述资源ID标识的资源文件是唯一的。
资源文件会在编译过程中被打包进APK中(res文件夹)或者被打包成独立的资源APK包(比如framework-res.apk)。但是这些资源文件都会被赋予独一无二的ID即资源索引来方便系统访问。其中,gen目录下的R.java文件是编译器自动生成的,它无需开发人员对其进行维护。R.java会自动收录当前应用中所有的资源文件,并根据这些资源文件建立对应的ID,包括:布局资源、控件资源、String资源、Drawable资源等。可以简单的把R.java理解成是当前Android应用的资源字典。
资源文件的资源ID只能以小写字母和下划线做首字母,随后的名字中只能出现“a-z”和“0-9”这些字符。如一个资源ID可以用“0x7f030000”表示。
由于每个软件开发工具包中均包括一个R.java文件,R.java文件中的资源ID是自动生成的,由于包括多个R.java文件,只能保证在一个R.java文件中,不存在资源ID冲突的问题。但是,可能会存在一个资源ID存在于多个R.java文件中,也就是说,一个资源ID在不同的SDK中均有对应的资源文件,这样在通过该资源ID调用对应的资源文件的时候就会发生调用冲突。因此,需要修改该资源ID对应的多个资源文件的资源ID,以避免调用冲突的问题出现。
本实施例提供了一种修改资源ID的方法,可以根据编译文件中的资源ID修改多个软件开发工具包中的资源ID。如果发生资源ID冲突,可以只修改软件开发工具包中的资源ID,而不修主程序编译后的资源文件的资源ID。例如,一个资源ID“0x7f030000”对应多个资源文件a、b和c。其中,a位于所述主程序中,b位于SDK1中,c位于SDK2中。为了避免资源文件调用冲突,可以只修改b和c的资源ID,如,b的资源ID可以修改为“0x7f030001”,c的资源ID可以修改为“0x7f030002”。
需要注意的是,这里只需要修改冲突资源文件的资源ID,从而令所述资源ID标识的资源文件是唯一的,具体的如何对冲突资源文件的资源ID进行修改,这里不做限定。
步骤108:对所述主程序和修改后的所述多个软件开发工具包进行封装。
解决了资源ID冲突的问题,就可以将主程序和多个需要输出的SDK进行打包封装。在进行封装的过程中,需要将所有的程序(classes)、资源文件和一些属性文件(如R.java文件、manifest)分别进行合并,然后进行打包封装。将打包后的SDK输入至接入方,接入方就可以实现接入服务。
图1中的方法,通过将支持服务功能实现的多个软件开发工具包和主程序进行合并后再输出,接入方的开发人员只需要学习一个合并程序的内容即可,无需对多个软件开发工具包分别进行学习,减少了接入方对接入服务的学习过程,提高了应用程序的接入效率。
另外,将多个软件开发工具包进行封装,可能会面临一个资源ID对应多个资源文件的情况,因此本实施例将发生冲突的多个SDK中的资源文件的资源ID重新进行命名,从而避免一个资源ID对应多个资源文件引起的资源文件引用冲突问题的发生。
基于图1的方法,本说明书实施例还提供了该方法的一些具体实施方式,下面进行说明。
本实施例为了提高资源ID的修改效率,还提供了一种修改资源ID的具方法:所述根据所述编译文件中的资源ID修改所述多个软件开发工具包中的资源ID,具体可以包括:
从所述多个软件开发工具包中的资源文件中筛选与所述编译文件中的资源ID相同的资源文件;
根据已有的资源ID,对所述筛选出来的资源文件重新进行资源ID命名。
在本说明书的一个或者多个实施例中,首先要筛选出资源ID相同的资源文件。可以采取如下方法:对于任意一个资源ID,可以从所有SDK中的R.java文件中进行查找,看该资源ID一共出现了几次。如果只出现了一次,那么就可以说明该资源ID对应唯一的资源文件。如果该资源ID出现了的次数为两次或者大于两次,就说明该资源ID出现在多个R.java文件中。因此就需要对其他SDK中的R.java文件的与该资源ID相同的资源ID进行修改。
需要说明的是,本实施例只需要对多个SDK中的资源文件的资源ID进行修改,因此,需要首先确定多个SDK中发生资源ID冲突的资源文件,然后再对这些资源文件重新进行命名。重新命名可以设置一些特定的规则,这里不做具体限定。
为了准确对资源文件进行调用,所述根据所述编译文件中的资源ID修改所述多个软件开发工具包中的资源ID,还可以包括:
将所述多个软件开发工具包中的R.java文件中的资源ID替换为修改后的资源ID;
将所述软件开发工具包中的资源文件引用语句中的资源ID替换为修改后的资源ID。
在具体应用的时候,R.java文件中记载了资源文件与资源ID的对应关系,需要对R.java文件中资源ID进行修改,修改了R.java文件中的资源ID就是修改了资源文件与资源ID的对应关系。因此,为了能够准确对资源文件进行调用,对应的还要修改代码中对资源文件进行调用的程序语句。
例如,在java程序中引用资源文件,按照java的语法来引用即:R.resource_type.resource_name,注意:resource_name不需要文件的后缀名。如果资源文件的资源ID由“0x7f030000”修改为“0x7f030001”,那么资源文件的引用语句就需要由“R.resource_type.0x7f030000”修改为“0x7f030001”。
另外,由于要对主程序和多个SDK进行合并,但是不同的SDK中的Android组件可能运行在不同的进程中,因此在实现一个服务的时候,往往需要多个进程并行,从而浪费系统资源。为了减少系统资源的浪费,在所述对所述主程序和修改后的所述多个软件开发工具包进行封装之前,所述方法还可以包括:
解压所述多个软件开发工具包,得到多个manifest文件;
将所述多个manifest文件中的进程名以及所述主程序的manifest文件中的进程名修改为相同的进程名;
合并所述多个manifest文件以及所述主程序的manifest文件,生成合并后的manifest文件。
在Android系统中,存在四大组件,分别为:有Activity(显示界面),Service(服务),ContentProvIDer(数据通信),BroadcastReceiver(广播)。
Activities是用户和应用程序交互的窗口,一个Activity相当于实际的一个网页,当打开一个屏幕时,之前的那一个屏幕会被置为暂停状态,并且被压入历史堆栈中,用户可以通过回退操作返回到以前打开过的屏幕。
Service是一种程序,它可以运行很长的时间,相当于后台的一个服务。Service组件运行时不可见,但它负责更新数据源和可见的Activity,以及触发通知。当你的Activity已经不处于激活状态或不可见时,它们常用来执行一些需要持续运行的处理。
ContentProvIDer是内容提供者,提供共享的数据存储。可用来管理和共享应用程序的数据库,可通过它来共享自己的数据给外部调用,给第三方应用数据访问的接口。
BroadcastReceiver:接收一种或者多种Intent作为触发时间,接收相关消息,做一些简单处理,转换成一条Notification,统一了Android的事件广播模型。通过创建和注册一个BroadcastReceiver,应用程序可以监听符合特定条件的广播的Intent。BroadcastReceiver会自动的启动你的Android应用程序去响应新来的Intent。
Android系统中的manifest文件可以理解为应用清单,每个应用的根目录中都必须包含一个,并且文件名必须一模一样。这个文件中包含了SDK的配置信息,系统需要根据里面的内容运行SDK的代码,显示界面。
manifest文件主要有以下作用:
1、为应用的Java软件包命名。软件包名称充当应用的唯一标识符。这就是我们的apk的名字,通常我们的名字都是类似"com.Android.gles3jni"这种,和Java类名类似,目的是确定使其成为一个唯一值。
2、描述应用的各个组件,包括构成应用的Activity、服务、广播接收器和内容提供程序。它还为实现每个组件的类命名并发布其功能,例如它们可以处理的Intent消息。这些声明向Android系统告知有关组件以及可以启动这些组件的条件的信息。
3、确定托管应用组件的进程。
4、声明应用必须具备哪些权限才能访问API中受保护的部分并与其他应用交互。还声明其他应用与该应用组件交互所需具备的权限
5、列出Instrumentation类,这些类可在应用运行时提供分析和其他信息。这些声明只会在应用处于开发阶段时出现在清单中,在应用发布之前将移除。
6、声明应用所需的最低AndroidAPI级别
7、列出应用必须链接到的库。
因此,想要修改进程名,就需要得到每个SDK的manifest文件。在本实施例中,调用的SDK是以打包的形式存在的,因此需要首先对SDK进行解压,得到manifest文件。然后,将所有manifest文件里面的进程名均修改为相同的进程名,然后再将所有manifest文件进行合并。这样,打包后的SDK在编译运行时,只需要建立一个进程就可以完成,无需建立多个进程,从而减少了系统资源的浪费。
对于进程名的修改,可以采用原来就有的进程名,也可以采用新的进程名。
在本说明书的一个或者多个实施例中,将所述多个manifest文件中的进程名以及所述主程序的manifest文件中的进程名修改为相同的进程名,具体可以包括:
获取所述主程序的manifest文件中的多个进程名和所述多个manifest文件中的多个进程名;
确定主进程名,所述主进程名为所述主程序的manifest文件中的多个进程名中的一个,或者,所述主进程名为所述多个manifest文件中的多个进程名中的一个;
将所述主程序的manifest文件中的多个进程名修改为所述主进程名;
将所述多个manifest文件中的多个进程名修改为所述主进程名。
上述的实施例中,提供了一种修改manifest文件中进程名的方法,可以随机的选择所述主程序的manifest文件中的多个进程名中的一个,或者,所述多个manifest文件中的多个进程名中的一个作为主进程名。然后在将所述主程序的manifest文件中的多个进程名和所述多个manifest文件中的多个进程名全部修改为主进程名。
需要注意的是,一个manifest文件中可能存在多个进程名,这是因为一个SDK可能包括多个Android的组件,而不同的组件也可能运行在不同的进程中。因此,需要对一个manifest文件中的多个进程名全部进行修改。
除了统一manifest文件和manifest文件中的进程名之后,所述对所述主程序和修改后的所述多个软件开发工具包进行封装,具体可以包括:
合并所述主程序的源代码和所述多个软件开发工具包的源代码,生成合并后的源代码;
对所述合并后的源代码进行统一混淆。
在本实施例中,主程序和多个SDK可以采用Java语言进行编辑开发。Java是一种跨平台的、解释型语言,Java源代码编译成中间“字节码”存储于class文件中。由于跨平台的需要,Java字节码中包括了很多源代码信息,如变量名、方法名,并且通过这些名称来访问变量和方法,这些符号带有许多语义信息,很容易被反编译成Java源代码。为了防止这种现象,可以使用Java混淆器对Java字节码进行混淆。
混淆就是对发布出去的程序进行重新组织和处理,使得处理后的代码与处理前代码完成相同的功能,而混淆后的代码很难被反编译,即使反编译成功也很难得出程序的真正语义。被混淆过的程序代码,仍然遵照原来的档案格式和指令集,执行结果也与混淆前一样,只是混淆器将代码中的所有变量、函数、类的名称变为简短的英文字母代号,在缺乏相应的函数名和程序注释的情况下,即使被反编译,也将难以阅读。同时混淆是不可逆的,在混淆的过程中一些不影响正常运行的信息将永久丢失,这些信息的丢失使程序变得更加难以理解。
混淆器的作用不仅仅是保护代码,它也有精简编译后程序大小的作用。由于以上介绍的缩短变量和函数名以及丢失部分信息的原因,编译后jar文件体积大约能减少25%,这对当前费用较贵的无线网络传输是有一定意义的。
本实施例将主程序和多个SDK进行打包后,统一进行混淆,避免了多个SDK采用多种混淆规则进行代码混淆的现象出现,提高了接入效率。
实施例二
图2为本说明书实施例提供的一种程序封装方法的实施例二的流程示意图。从程序角度而言,流程的执行主体可以为搭载于应用服务器的程序或应用客户端。
如图2所示,该流程可以包括以下步骤:
步骤202:获取主程序调用的多个软件开发工具包,所述多个软件开发工具包用于实现所述主程序的辅助功能。
步骤204:对所述主程序进行编译,得到编译文件。
步骤206:当所述编译文件中的资源ID与所述多个软件开发工具包中的资源ID发生冲突时,修改所述编译文件中的资源ID和所述多个软件开发工具包中的资源ID,以使一个所述资源ID标识的资源文件是唯一。
步骤208:对修改后的所述编译文件和修改后的所述多个软件开发工具包进行封装。
实施例二和实施例一的大部分实施例是相同的,因此不再赘述,这里只着重说明实施例二与实施例一的区别。
实施例二和实施例一的区别在于,在对资源ID修改的时候,不仅仅修改多个SDK中的资源ID,还要修改主程序编译文件中的资源ID。因此,可以不区分发生资源ID冲突的资源文件是位于主程序中,还是位于所述多个SDK中。只要资源ID发生冲突,其对应的资源文件的资源ID都需要修改。
需要注意的是,这里只需要修改冲突资源文件的资源ID,从而令所述资源ID标识的资源文件是唯一的,具体的如何对冲突资源文件的资源ID进行修改,这里不做限定。
图2中的方法,通过将支持服务功能实现的多个软件开发工具包和主程序进行合并后再输出,接入方的开发人员只需要学习一个合并程序的内容即可,无需对多个软件开发工具包分别进行学习,减少了接入方对接入服务的学习过程,提高了应用程序的接入效率。
另外,将多个软件开发工具包进行封装,可能会面临一个资源ID对应多个资源文件的情况,因此本实施例将多个软件开发工具包和主程序中的资源文件的资源ID重新进行命名,从而避免一个资源ID对应多个资源文件引起的资源文件引用冲突问题的发生。
基于图2的方法,本说明书实施例还提供了该方法的一些具体实施方式,下面进行说明。
本实施例为了提高资源ID的修改效率,还提供了一种修改资源ID的具方法:所述修改所述编译文件中的资源ID和所述多个软件开发工具包中的资源ID,具体可以包括:
从所述多个软件开发工具包中的资源文件和所述主程序中的资源文件中筛选出具有相同资源ID的多个资源文件;
对筛选出来的所述多个资源文件重新进行资源ID命名。
在本说明书的一个或者多个实施例中,首先要筛选出资源ID相同的资源文件。可以采取如下方法:对于任意一个资源ID,可以从所有的SDK中的R.java文件中进行查找,看该资源ID一共出现了几次。如果只出现了一次,那么就可以说明该资源ID不存在冲突,因此该资源ID对应唯一的资源文件。如果该资源ID出现了的次数为两次或者大于两次,就说明该资源ID出现在多个R.java文件中,因此就需要该资源ID对应的全部资源文件的资源ID进行修改。
例如,一个资源ID“0x7f050000”对应多个资源文件a、b和c。其中,a位于所述主程序中,b位于SDK1中,c位于SDK2中。为了避免资源文件调用冲突,需要修改a、b和c的资源ID,a的资源ID可以修改为“0x7f050001”b的资源ID可以修改为“0x7f050002”,c的资源ID可以修改为“0x7f050002”。
需要说明的是,本申请不用判断发生冲突的资源文件存在于何处,只要发生资源ID冲突,就需要该资源ID对应的资源文件的资源ID,而不用判断是否应该保留哪个资源文件的资源ID,因此,提高了资源ID修改的效率。
另外,本实施例只需要对发生冲突的资源文件的资源ID重新进行命名。重新命名可以设置一些特定的规则,这里不做具体限定。
为了准确对资源文件进行调用,所述修改所述编译文件中的资源ID和所述多个软件开发工具包中的资源ID,还可以包括:
将所述主程序的R.java文件中的资源ID和所述多个软件开发工具包中的R.java文件中的资源ID替换为修改后的资源ID;
将所述主程序和所述软件开发工具包中的资源文件引用语句中的资源ID替换为修改后的资源ID。
在具体应用的时候,R.java文件中记载了资源文件与资源ID的对应关系,需要对R.java文件中资源ID进行修改,修改了R.java文件中的资源ID就是修改了资源文件与资源ID的对应关系。因此,为了能够准确对资源文件进行调用,对应的还要修改代码中对资源文件进行调用的程序语句。
由于本实施例修改了主程序和多个SDK中的资源文件的资源ID,因此,需要对主程序和多个SDK中调用了修改了资源ID的资源文件的引用语句全部进行修改。
可选的,在所述对修改后的所述编译文件和修改后的多个软件开发工具包进行封装之前,所述方法还可以包括:
解压所述多个软件开发工具包,得到多个manifest文件;
将所述多个manifest文件中的进程名以及所述主程序的manifest文件中的进程名修改为相同的进程名;
合并所述多个manifest文件以及所述主程序的manifest文件,生成合并后的manifest文件。
可选的,将所述多个manifest文件中的进程名以及所述主程序的manifest文件中的进程名修改为相同的进程名,具体可以包括:
获取所述主程序的manifest文件中的多个进程名和所述多个manifest文件中的多个进程名;
确定主进程名,所述主进程名为所述主程序的manifest文件中的多个进程名中的一个,或者,所述主进程名为所述多个manifest文件中的多个进程名中的一个;
将所述主程序的manifest文件中的多个进程名修改为所述主进程名;
将所述多个manifest文件中的多个进程名修改为所述主进程名。
可选的,所述将所述主程序和所述多个软件开发工具包进行封装,具体可以包括:
合并所述主程序的源代码和所述多个软件开发工具包的源代码,生成合并后的源代码;
对所述合并后的源代码进行统一混淆。
基于同样的思路,本说明书实施例还提供了上述方法对应的装置。图3为本说明书实施例提供的对应于图1的一种程序封装装置的结构示意图。如图3所示,该装置可以包括:
软件开发工具包获取模块301,用于获取主程序调用的多个软件开发工具包,所述多个软件开发工具包用于实现所述主程序的辅助功能;
主程序编译模块302,用于对所述主程序进行编译,得到编译文件;
资源ID修改模块303,用于当所述编译文件中的资源ID与所述多个软件开发工具包中的资源ID发生冲突时,根据所述编译文件中的资源ID修改所述多个软件开发工具包中的资源ID,以使一个所述资源ID标识的资源文件是唯一的;
程序封装模块304,用于对所述主程序和修改后的所述多个软件开发工具包进行封装。
图3中的装置,通过将支持服务功能实现的多个软件开发工具包和主程序进行合并后再输出,接入方的开发人员只需要学习一个合并程序的内容即可,无需对多个软件开发工具包分别进行学习,减少了接入方对接入服务的学习过程,提高了应用程序的接入效率。
另外,将多个软件开发工具包进行封装,可能会面临一个资源ID对应多个资源文件的情况,因此本实施例将发生冲突的多个软件开发工具包中的资源文件的资源ID重新进行命名,从而避免一个资源ID对应多个资源文件引起的资源文件引用冲突问题的发生。
可选的,所述资源ID修改模块303,具体可以包括:
筛选单元,用于从所述多个软件开发工具包中的资源文件中筛选与所述编译文件中的资源ID相同的资源文件;
第一修改单元,用于根据已有的资源ID,对所述筛选出来的资源文件重新进行资源ID命名。
可选的,所述资源ID修改模块303,还可以包括:
第二单元,用于将所述多个软件开发工具包中的R.java文件中的资源ID替换为修改后的资源ID;
第三单元,用于将所述软件开发工具包中的资源文件引用语句中的资源ID替换为修改后的资源ID。
可选的,所述装置还可以包括:
解压模块,用于解压所述多个软件开发工具包,得到多个manifest文件;
进程名修改模块,用于将所述多个manifest文件中的进程名以及所述主程序的manifest文件中的进程名修改为相同的进程名;
合并模块,用于合并所述多个manifest文件以及所述主程序的manifest文件,生成合并后的manifest文件。
可选的,所述进程名修改模块,具体可以包括:
进程名获取单元,用于获取所述主程序的manifest文件中的多个进程名和所述多个manifest文件中的多个进程名;
主进程名确定单元,用于确定主进程名,所述主进程名为所述主程序的manifest文件中的多个进程名中的一个,或者,所述主进程名为所述多个manifest文件中的多个进程名中的一个;
第一进程名修改单元,用于将所述主程序的manifest文件中的多个进程名修改为所述主进程名;
第二进程名修改单元,用于将所述多个manifest文件中的多个进程名修改为所述主进程名。
可选的,所述程序封装模块304,具体可以包括:
合并单元,用于合并所述主程序的源代码和所述多个软件开发工具包的源代码,生成合并后的源代码;
混淆单元,用于对所述合并后的源代码进行统一混淆。
基于同样的思路,本说明书实施例还提供了上述方法对应的装置。图4为本说明书实施例提供的对应于图2的一种程序封装装置的结构示意图。如图4所示,该装置可以包括:
软件开发工具包获取模块401,用于获取主程序调用的多个软件开发工具包,所述多个软件开发工具包用于实现所述主程序的辅助功能;
主程序编译模块402,用于对所述主程序进行编译,得到编译文件;
资源ID修改模块403,用于当所述编译文件中的资源ID与所述多个软件开发工具包中的资源ID发生冲突时,修改所述编译文件中的资源ID和所述多个软件开发工具包中的资源ID,以使一个所述资源ID标识的资源文件是唯一的;
程序封装模块404,用于对修改后的所述编译文件和修改后的所述多个软件开发工具包进行封装。
图4中的装置,通过将支持服务功能实现的多个软件开发工具包和主程序进行合并后再输出,接入方的开发人员只需要学习一个合并程序的内容即可,无需对多个软件开发工具包分别进行学习,减少了接入方对接入服务的学习过程,提高了应用程序的接入效率。
另外,将多个软件开发工具包进行封装,可能会面临一个资源ID对应多个资源文件的情况,因此本实施例将多个软件开发工具包和主程序中的资源文件的资源ID重新进行命名,从而避免一个资源ID对应多个资源文件引起的资源文件引用冲突问题的发生。
可选的,所述资源ID修改模块303,具体可以包括:
筛选单元,用于从所述多个软件开发工具包中的资源文件和所述主程序中的资源文件中筛选出具有相同资源ID的多个资源文件;
第一修改单元,用于对筛选出来的所述多个资源文件重新进行资源ID命名。
可选的,所述资源ID修改模块303,还可以包括:
第二修改单元,用于将所述主程序的R.java文件中的资源ID和所述多个软件开发工具包中的R.java文件中的资源ID替换为修改后的资源ID;
第三修改单元,用于将所述主程序和所述软件开发工具包中的资源文件引用语句中的资源ID替换为修改后的资源ID。
可选的,所述装置还可以包括:
解压模块,用于解压所述多个软件开发工具包,得到多个manifest文件;
进程名修改模块,用于将所述多个manifest文件中的进程名以及所述主程序的manifest文件中的进程名修改为相同的进程名;
合并模块,用于合并所述多个manifest文件以及所述主程序的manifest文件,生成合并后的manifest文件。
可选的,所述进程名修改模块,具体可以包括:
进程名获取单元,用于获取所述主程序的manifest文件中的多个进程名和所述多个manifest文件中的多个进程名;
主进程名确定单元,用于确定主进程名,所述主进程名为所述主程序的manifest文件中的多个进程名中的一个,或者,所述主进程名为所述多个manifest文件中的多个进程名中的一个;
第一进程名修改单元,用于将所述主程序的manifest文件中的多个进程名修改为所述主进程名;
第二进程名修改单元,用于将所述多个manifest文件中的多个进程名修改为所述主进程名。
可选的,所述程序封装模块404,具体可以包括:
合并单元,用于合并所述主程序的源代码和所述多个软件开发工具包的源代码,生成合并后的源代码;
混淆单元,用于对所述合并后的源代码进行统一混淆。
基于同样的思路,本说明书实施例还提供了上述方法对应的设备。
图5为本说明书实施例提供的一种电子设备的结构示意图。如图5所示,设备500可以包括:
至少一个处理器510;以及,
与所述至少一个处理器通信连接的存储器530;其中,
所述存储器530存储有可被所述至少一个处理器510执行的指令520,所述指令被所述至少一个处理器510执行,以使所述至少一个处理器510能够:
获取主程序调用的多个软件开发工具包,所述多个软件开发工具包用于实现所述主程序的辅助功能;
对所述主程序进行编译,得到编译文件;
当所述编译文件中的资源ID与所述多个软件开发工具包中的资源ID发生冲突时,根据所述编译文件中的资源ID修改所述多个软件开发工具包中的资源ID,以使一个所述资源ID标识的资源文件是唯一的;
对所述主程序和修改后的所述多个软件开发工具包进行封装。
或者,以使所述至少一个处理器510能够:
获取主程序调用的多个软件开发工具包,所述多个软件开发工具包用于实现所述主程序的辅助功能;
对所述主程序进行编译,得到编译文件;
当所述编译文件中的资源ID与所述多个软件开发工具包中的资源ID发生冲突时,修改所述编译文件中的资源ID和所述多个软件开发工具包中的资源ID,以使一个所述资源ID标识的资源文件是唯一的;
对修改后的所述编译文件和修改后的所述多个软件开发工具包进行封装。
本说明书实施例提供的一种计算机可读介质,其上存储有计算机可读指令,所述计算机可读指令可被处理器执行以实现上述方法。
在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(Programmable LogicDevice,PLD)(例如现场可编程门阵列(FieldProgrammableGateArray,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logiccompiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(HardwareDescription Language,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(Advanced BooleanExpressionLanguage)、AHDL(AlteraHardwareDescriptionLanguage)、Confluence、CUPL(CornellUniversityProgrammingLanguage)、HDCal、JHDL(JavaHardwareDescriptionLanguage)、Lava、Lola、MyHDL、PALASM、RHDL(RubyHardwareDescriptionLanguage)等,目前最普遍使用的是VHDL(Very-High-SpeedIntegratedCircuitHardwareDescriptionLanguage)与Verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(ApplicationSpecific IntegratedCircuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC625D、AtmelAT91SAM、Microchip PIC18F26K20以及SiliconeLabsC8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flashRAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带式磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

Claims (20)

1.一种程序封装方法,包括:
获取主程序调用的多个软件开发工具包,所述多个软件开发工具包用于实现所述主程序的辅助功能;
对所述主程序进行编译,得到编译文件;
当所述编译文件中的资源ID与所述多个软件开发工具包中的资源ID发生冲突时,根据所述编译文件中的资源ID修改所述多个软件开发工具包中的资源ID,以使一个所述资源ID标识的资源文件是唯一的;
对所述主程序和修改后的所述多个软件开发工具包进行封装。
2.如权利要求1所述的方法,判断编译文件中的资源ID与所述多个软件开发工具包中的资源ID是否发生冲突,具体包括:
获取所述资源ID在所述软件开发工具包中出现的次数;
根据所述次数判断所述资源ID是否为发生冲突的资源ID;
当所述次数大于或者等于两次时,所述资源ID为发生冲突的资源ID。
3.如权利要求1所述的方法,所述根据所述编译文件中的资源ID修改所述多个软件开发工具包中的资源ID,具体包括:
从所述多个软件开发工具包中的资源文件中筛选与所述编译文件中的资源ID相同的资源文件;
根据已有的资源ID,对筛选出来的资源文件重新进行资源ID命名。
4.如权利要求3所述的方法,所述根据所述编译文件中的资源ID修改所述多个软件开发工具包中的资源ID,还包括:
将所述多个软件开发工具包中的R.java文件中的资源ID替换为修改后的资源ID;
将所述软件开发工具包中的资源文件引用语句中的资源ID替换为修改后的资源ID。
5.如据权利要求1所述的方法,所述根据所述编译文件中的资源ID修改所述多个软件开发工具包中的资源ID,具体包括:
修改多个软件开发工具包和主程序编译文件中的资源ID。
6.如权利要求1所述的方法,在所述对所述主程序和修改后的所述多个软件开发工具包进行封装之前,所述方法还包括:
解压所述多个软件开发工具包,得到多个manifest文件;
将所述多个manifest文件中的进程名以及所述主程序的manifest文件中的进程名修改为相同的进程名;
合并所述多个manifest文件以及所述主程序的manifest文件,生成合并后的manifest文件。
7.如权利要求6所述的方法,将所述多个manifest文件中的进程名以及所述主程序的manifest文件中的进程名修改为相同的进程名,具体包括:
获取所述主程序的manifest文件中的多个进程名和所述多个manifest文件中的多个进程名;
确定主进程名,所述主进程名为所述主程序的manifest文件中的多个进程名中的一个,或者,所述主进程名为所述多个manifest文件中的多个进程名中的一个;
将所述主程序的manifest文件中的多个进程名修改为所述主进程名;
将所述多个manifest文件中的多个进程名修改为所述主进程名。
8.如权利要求1所述的方法,所述对所述主程序和修改后的所述多个软件开发工具包进行封装,具体包括:
合并所述主程序的源代码和所述多个软件开发工具包的源代码,生成合并后的源代码;
对所述合并后的源代码进行统一混淆。
9.一种程序封装方法,包括:
获取主程序调用的多个软件开发工具包,所述多个软件开发工具包用于实现所述主程序的辅助功能;
对所述主程序进行编译,得到编译文件;
当所述编译文件中的资源ID与所述多个软件开发工具包中的资源ID发生冲突时,修改所述编译文件中的资源ID和所述多个软件开发工具包中的资源ID,以使一个所述资源ID标识的资源文件是唯一的;
对修改后的所述编译文件和修改后的所述多个软件开发工具包进行封装。
10.如权利要求9所述的方法,判断编译文件中的资源ID与所述多个软件开发工具包中的资源ID是否发生冲突,具体包括:
获取所述资源ID在所述软件开发工具包中出现的次数;
根据所述次数判断所述资源ID是否为发生冲突的资源ID;
当所述次数大于或者等于两次时,所述资源ID为发生冲突的资源ID。
11.如权利要求9所述的方法,所述修改所述编译文件中的资源ID和所述多个软件开发工具包中的资源ID,具体包括:
从所述多个软件开发工具包中的资源文件和所述主程序中的资源文件中筛选出具有相同资源ID的多个资源文件;
对筛选出来的所述多个资源文件重新进行资源ID命名。
12.如权利要求9所述的方法,所述修改所述编译文件中的资源ID和所述多个软件开发工具包中的资源ID,还包括:
将所述主程序的R.java文件中的资源ID和所述多个软件开发工具包中的R.java文件中的资源ID替换为修改后的资源ID;
将所述主程序和所述软件开发工具包中的资源文件引用语句中的资源ID替换为修改后的资源ID。
13.如权利要求9所述的方法,所述根据所述编译文件中的资源ID修改所述多个软件开发工具包中的资源ID,具体包括:
修改多个软件开发工具包和主程序编译文件中的资源ID。
14.如权利要求9所述的方法,在所述对修改后的所述编译文件和修改后的多个软件开发工具包进行封装之前,所述方法还包括:
解压所述多个软件开发工具包,得到多个manifest文件;
将所述多个manifest文件中的进程名以及所述主程序的manifest文件中的进程名修改为相同的进程名;
合并所述多个manifest文件以及所述主程序的manifest文件,生成合并后的manifest文件。
15.如权利要求9所述的方法,所述对修改后的所述编译文件和修改后的所述多个软件开发工具包进行封装,具体包括:
合并所述主程序的源代码和所述多个软件开发工具包的源代码,生成合并后的源代码;
对所述合并后的源代码进行统一混淆。
16.一种程序封装装置,包括:
软件开发工具包获取模块,用于获取主程序调用的多个软件开发工具包,所述多个软件开发工具包用于实现所述主程序的辅助功能;
主程序编译模块,用于对所述主程序进行编译,得到编译文件;
资源ID修改模块,用于当所述编译文件中的资源ID与所述多个软件开发工具包中的资源ID发生冲突时,根据所述编译文件中的资源ID修改所述多个软件开发工具包中的资源ID,以使一个所述资源ID标识的资源文件是唯一的;
程序封装模块,用于对所述主程序和修改后的所述多个软件开发工具包进行封装。
17.一种程序封装装置,包括:
软件开发工具包获取模块,用于获取主程序调用的多个软件开发工具包,所述多个软件开发工具包用于实现所述主程序的辅助功能;
主程序编译模块,用于对所述主程序进行编译,得到编译文件;
资源ID修改模块,用于当所述编译文件中的资源ID与所述多个软件开发工具包中的资源ID发生冲突时,修改所述编译文件中的资源ID和所述多个软件开发工具包中的资源ID,以使一个所述资源ID标识的资源文件是唯一的;
程序封装模块,用于对修改后的所述编译文件和修改后的所述多个软件开发工具包进行封装。
18.一种电子设备,包括:
至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够:
获取主程序调用的多个软件开发工具包,所述多个软件开发工具包用于实现所述主程序的辅助功能;
对所述主程序进行编译,得到编译文件;
当所述编译文件中的资源ID与所述多个软件开发工具包中的资源ID发生冲突时,根据所述编译文件中的资源ID修改所述多个软件开发工具包中的资源ID,以使一个所述资源ID标识的资源文件是唯一的;
对所述主程序和修改后的所述多个软件开发工具包进行封装。
19.一种电子设备,包括:
至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够:
获取主程序调用的多个软件开发工具包,所述多个软件开发工具包用于实现所述主程序的辅助功能;
对所述主程序进行编译,得到编译文件;
当所述编译文件中的资源ID与所述多个软件开发工具包中的资源ID发生冲突时,修改所述编译文件中的资源ID和所述多个软件开发工具包中的资源ID,以使一个所述资源ID标识的资源文件是唯一的;
对修改后的所述编译文件和修改后的所述多个软件开发工具包进行封装。
20.一种计算机可读介质,其上存储有计算机可读指令,所述计算机可读指令可被处理器执行以实现权利要求1至15中任一项所述的程序封装方法。
CN202310410385.8A 2019-12-12 2019-12-12 一种程序封装方法、装置及电子设备 Pending CN116521144A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310410385.8A CN116521144A (zh) 2019-12-12 2019-12-12 一种程序封装方法、装置及电子设备

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CN201911275691.5A CN111090425B (zh) 2019-12-12 2019-12-12 一种程序封装方法、装置及电子设备
CN202310410385.8A CN116521144A (zh) 2019-12-12 2019-12-12 一种程序封装方法、装置及电子设备

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
CN201911275691.5A Division CN111090425B (zh) 2019-12-12 2019-12-12 一种程序封装方法、装置及电子设备

Publications (1)

Publication Number Publication Date
CN116521144A true CN116521144A (zh) 2023-08-01

Family

ID=70396345

Family Applications (2)

Application Number Title Priority Date Filing Date
CN202310410385.8A Pending CN116521144A (zh) 2019-12-12 2019-12-12 一种程序封装方法、装置及电子设备
CN201911275691.5A Active CN111090425B (zh) 2019-12-12 2019-12-12 一种程序封装方法、装置及电子设备

Family Applications After (1)

Application Number Title Priority Date Filing Date
CN201911275691.5A Active CN111090425B (zh) 2019-12-12 2019-12-12 一种程序封装方法、装置及电子设备

Country Status (1)

Country Link
CN (2) CN116521144A (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114115868A (zh) * 2020-08-31 2022-03-01 北京新氧科技有限公司 文件处理的方法及装置、电子设备及计算机可读存储介质
CN113778451B (zh) * 2020-11-17 2024-06-18 北京沃东天骏信息技术有限公司 文件加载方法、装置、计算机系统和计算机可读存储介质
CN113934460B (zh) * 2021-10-12 2024-09-13 郑州阿帕斯数云信息科技有限公司 一种资源提供方法及装置

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9632770B2 (en) * 2015-04-28 2017-04-25 Google Inc. Infrastructure for hosting and publishing software packages
CN109542445A (zh) * 2017-08-01 2019-03-29 北京京东尚科信息技术有限公司 一种Android插件化开发的方法和装置
CN107844301A (zh) * 2017-12-12 2018-03-27 苏州蜗牛数字科技股份有限公司 一种安卓应用渠道合包方法及装置
CN110457045B (zh) * 2019-08-16 2023-05-16 百度在线网络技术(北京)有限公司 组件化合并编译方法、装置、设备和存储介质
CN110502239A (zh) * 2019-08-19 2019-11-26 武汉蓝星科技股份有限公司 一种车载系统sdk的开发制作方法及装置

Also Published As

Publication number Publication date
CN111090425A (zh) 2020-05-01
CN111090425B (zh) 2023-05-05

Similar Documents

Publication Publication Date Title
CN110580147B (zh) 一种应用程序的开发方法和装置
CN111090425B (zh) 一种程序封装方法、装置及电子设备
CN110502222B (zh) 外发依赖内部基础库的aar方法、装置、介质和设备
CN107045438B (zh) 一种应用顶层视图处理方法、装置及组件
CN110007920B (zh) 一种获取代码依赖关系的方法、装置及电子设备
CN107092475B (zh) 一种交互控件的调用方法及装置
CN107506181A (zh) 业务处理、数据处理方法、装置以及电子设备
CN107786630B (zh) 一种web应用包处理方法、装置及设备
CN110059456B (zh) 代码保护方法、代码保护装置、存储介质与电子设备
CN112733158B (zh) Android系统漏洞检测方法、电子设备及存储介质
CN109947643B (zh) 一种基于a/b测试的实验方案的配置方法、装置及设备
CN107479868B (zh) 一种界面加载方法、装置及设备
CN111399840A (zh) 一种模块开发方法及装置
CN114547024A (zh) 一种sql语句风险检测方法、装置、设备及介质
CN111797387B (zh) 拦截外挂插件的方法及装置
CN112114810A (zh) 编译处理方法及装置
CN110941443B (zh) 修改sdk中文件名的方法、装置及电子设备
CN111190692A (zh) 一种基于鲲鹏处理器的监控方法、系统及可读介质
CN111443944B (zh) 一种程序构建方法、装置及设备
CN114546639A (zh) 服务调用处理方法及装置
CN110046052A (zh) 一种服务调用方法及装置
CN109409037B (zh) 一种数据混淆规则的生成方法、装置及设备
CN113835748B (zh) 基于html5的应用程序的打包方法、系统和可读介质
CN113342399B (zh) 应用项目的结构配置方法、装置及可读存储介质
CN113448588B (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