公开/公告号CN103324514A
专利类型发明专利
公开/公告日2013-09-25
原文格式PDF
申请/专利权人 TCL通讯(宁波)有限公司;
申请/专利号CN201310237439.1
发明设计人 史豪君;
申请日2013-06-17
分类号G06F9/45;G06F9/44;
代理机构深圳市君胜知识产权代理事务所;
代理人刘文求
地址 315100 浙江省宁波市高新区扬帆路999弄5号6楼
入库时间 2024-02-19 20:34:51
法律状态公告日
法律状态信息
法律状态
2017-01-25
授权
授权
2017-01-04
专利申请权的转移 IPC(主分类):G06F9/45 登记生效日:20161213 变更前: 变更后: 申请日:20130617
专利申请权、专利权的转移
2014-01-01
实质审查的生效 IPC(主分类):G06F9/45 申请日:20130617
实质审查的生效
2013-09-25
公开
公开
技术领域
本发明涉及Android系统开发领域,尤其涉及一种分离java归档文件的方法及系统。
背景技术
Android系统是谷歌推出的一种智能的移动终端操作系统。在Android系统的framework(框架)开发过程中,会加入大量的自定义的类和方法,久而久之,在编译framework模块的时候就有可能出现接口数量超额的错误。其原因是:Android特有的dex文件(Android平台可执行文件的类型)最大可容纳65535个接口,超过这个接口数,就可能出现错误。
现有技术中,在遇到framework中接口数量超额的情况时,就会将原有的framework分成两个java归档文件(简称jar包):framework.jar(A)和framework_ext.jar(B),这两个jar包容易形成相互依赖的关系,即framework.jar中的某些java文件在调用framework_ext.jar中的某些java文件,而且framework_ext.jar中的某些java文件在调用framework.jar中的一些java文件,如图1所示,形成了A依赖于B,同时B依赖于A的关系,所以这种相互依赖的关系导致java编译系统是无法编译通过的。
因此,现有技术还有待于改进和发展。
发明内容
鉴于上述现有技术的不足,本发明的目的在于提供一种分离java归档文件的方法及系统,旨在解决现有技术中jar包相互依赖无法编译通过的问题。
本发明的技术方案如下:
一种分离java归档文件的方法,其中,包括步骤:
A、在编译目标文件时,将编译所需的java源码从源码目录中引用到编译过程中,并与目标代码一起进行编译,在编译过程中,记录参与编译的java源码;
B、将参与编译的java源码编译出的字节码文件剔除,并将剩下的字节码文件打包成最终的java归档文件。
所述的分离java归档文件的方法,其中,所述步骤A具体包括:
A1、在编译目标文件时,从源码目录中获取编译所需的java源码;
A2、将java源码与目标代码一起进行编译;
A3、记录参与编译的java源码,以区分目标代码与java源码。
所述的分离java归档文件的方法,其中,所述步骤B具体包括:
B1、将java源码与目标代码编译出的字节码文件区分开来;
B2、剔除由java源码编译出的字节码文件;
B3、将剩余的字节码文件打包成最终的java归档文件。
所述的分离java归档文件的方法,其中,所述步骤A3中,通过一变量记录所有的java类以及java类的子类。
一种分离java归档文件的系统,其中,包括:
参与编译模块,用于在编译目标文件时,将编译所需的java源码从源码目录中引用到编译过程中,并与目标代码一起进行编译,在编译过程中,记录参与编译的java源码;
选择打包模块,用于将参与编译的java源码编译出的字节码文件剔除,并将剩下的字节码文件打包成最终的java归档文件。
所述的分离java归档文件的系统,其中,所述参与编译模块包括:
获取单元,用于在编译目标文件时,从源码目录中获取编译所需的java源码;
编译单元,用于将java源码与目标代码一起进行编译;
记录单元,用于记录参与编译的java源码,以区分目标代码与java源码。
所述的分离java归档文件的系统,其中,所述选择打包模块包括:
区分单元,用于将java源码与目标代码编译出的字节码文件区分开来;
剔除单元,用于剔除由java源码编译出的字节码文件;
打包单元,用于将剩余的字节码文件打包成最终的java归档文件。
所述的分离java归档文件的系统,其中,所述记录单元通过一变量记录所有的java类以及java类的子类。
有益效果:本发明通过在编译目标文件时,引入java源码与目标代码一起编译,并且在编译后将java源码编译出的字节码文件剔除,从而使得java归档文件的分离更加方便和灵活,增加了编译时引入的功能,解决了jar包需要相互依赖的问题。
附图说明
图1为现有技术中Android平台编译系统的结构框图。
图2为本发明一种分离java归档文件的方法较佳实施例的流程图。
图3为本发明中Android平台编译系统的结构框图。
图4为图2所示方法中步骤S101的具体流程图。
图5为图2所示方法中步骤S102的具体流程图。
图6为本发明一种分离java归档文件的系统较佳实施例的结构框图。
图7为图6所示系统中参与编译模块的具体结构框图。
图8为图6所示系统中选择打包模块的具体结构框图。
具体实施方式
本发明提供一种分离java归档文件的方法及系统,为使本发明的目的、技术方案及效果更加清楚、明确,以下对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
请参阅图2,图2为本发明分离java归档文件的方法较佳实施例的流程图,如图所示,其包括步骤:
S101、在编译目标文件时,将编译所需的java源码从源码目录中引用到编译过程中,并与目标代码一起进行编译,在编译过程中,记录参与编译的java源码;
S102、将参与编译的java源码编译出的字节码文件剔除,并将剩下的字节码文件打包成最终的java归档文件。
在本实施例中,为了解决背景技术中提到的两个jar包相互依赖的问题,本发明修改了传统的关于java部分的编译和打包的功能,即在编译java文件的阶段增加“java引用(Java Include)”的功能,而在打包成jar包的阶段增加“分离字节码文件”的功能,利用相当于参与编译和选择打包的功能结合Android系统的jar包支持单向依赖的功能,如图3所示,从而使java编译系统能够在接口数量超额的情况下也能编译通过。
下面具体描述本实施例的方法的流程。
在步骤S101中,就是在编译目标文件时,将编译所需的java源码引用到编译过程,一起进行编译,如图4所示,步骤S101可细化为如下步骤:
S201、在编译目标文件时,从源码目录中获取编译所需的java源码;
S202、将java源码与目标代码一起进行编译;
S203、记录参与编译的java源码,以区分目标代码与java源码。
在参与编译的结构中包括:include.mk,该文件用来描述和执行Java Include,此文件一般存放在参与编译的源码目录下,用于指明此源码目录下的所有文件会被参与编译,此文件的内容由4部分组成:1、工具get-relative-dir,2、工具all-java-includes-under,3、LOCAL_JAVA_INCLUDES,4、LOCAL_SRC_FILES。下面对4个部分分别进行说明:
1、工具get-relative-dir,用于获取源码目录相对于目标代码所在的目录的相对目录,是用shell脚本写成,如下:
define get-relative-dir
$(subst$(space),/,$(wordlist $(words $(subst/,,$(LOCAL_PATH)/suffix)),\
$(words $(subst/,,$(THIS_DIR))),$(subst/,,$(THIS_DIR))))
endef
2、工具all-java-includes-under,此工具用于获取当前目录下的所有java文件,通过此工具获得的信息包括java文件的完整包名和文件名,也是用shell脚本写成,如下:
define all-java-includes-under
$(patsubst ./%,%,\
$(shell cd$(1);\
find.-name”*.jjava” –and –not –name “.*”)*”)\
)
endef
3、LOCAL_JAVA_INCLUDES,用于记录所有的java类以及java类的子类,记录在这个变量中的类将会在选择打包时被剔除。
4、LOCAL_SRC_FILES,用于记录要参与编译的java文件。
一个完整的include.mk文件的内容,举例如下:
THIS_DIR:=$(call my-dir)
RELATIVE_DIR:=$(call get-relative-dir)
JAVA_INCLUDES:=%(call all-java-includes-under, $(THIS_DIR)/core/java/)
LOCAL_JAVA_INCLUDES +=$(JAVA_INCLUDES:.java=.class)
LOCAL_JAVA_INCLUDES +=$(JAVA_INCLUDES:.java=\$$*.class)
LOCAL_SRC_FILES +=$(addprefix $(RELATIVE_DIR)/core/java/,/(JAVA_INCLUDES))
若目标代码需要某些java源码参与编译,那么只需在目标代码自己的Android.mk中导入参与编译代码的include.mk文件即可。
在参与编译时,还需在现有的编译系统中增加新的机制,使编译的目标文件除了原有的单向依赖外,还需要对Java Include文件依赖,这样做的目的是使编译系统能够知道哪些代码是属于参与编译的源码,哪些目标代码,从而为后续的选择打包做好准备。这种新的机制可在build/core/base_rules.mk中增加,内容如下:
Ifneq(“$(LOCAL_JAVA_INCLUDES)”,””)
$(LOCAL_INTERMEDIATE_TARGETS):PRIVATE_JAVA_INCLUDES:=$(LOCAL_JAVA_INCLUDES)
Else
PRIVATE_JAVA_INCLUDES:=
endif
在步骤S102中,在编译过程中形成的中间文件即字节码文件会有一部分被剔除,具体来说,如图5所示,步骤S102可细化为如下步骤:
S301、将java源码与目标代码编译出的字节码文件区分开来;
S302、剔除由java源码编译出的字节码文件;
S303、将剩余的字节码文件打包成最终的java归档文件。
因为在前述步骤中已经记录了PRIVATE_JAVA_INLCUDE,所以在打包之前只需删除此部分内容即可,实现的代码放在build/core/definitions.mk的函数compile-java中,在此就不一一例举了。
基于上述方法,本发明还提供一种分离java归档文件的系统,如图6所示,其包括:
参与编译模块100,用于在编译目标文件时,将编译所需的java源码从源码目录中引用到编译过程中,并与目标代码一起进行编译,在编译过程中,记录参与编译的java源码;
选择打包模块200,用于将参与编译的java源码编译出的字节码文件剔除,并将剩下的字节码文件打包成最终的java归档文件。
进一步,如图7所示,所述参与编译模块100包括:
获取单元110,用于在编译目标文件时,从源码目录中获取编译所需的java源码;
编译单元120,用于将java源码与目标代码一起进行编译;
记录单元130,用于记录参与编译的java源码,以区分目标代码与java源码。
进一步,如图8所示,所述选择打包模块200包括:
区分单元210,用于将java源码与目标代码编译出的字节码文件区分开来;
剔除单元220,用于剔除由java源码编译出的字节码文件;
打包单元230,用于将剩余的字节码文件打包成最终的java归档文件。
进一步,所述记录单元通过一变量记录所有的java类以及java类的子类。关于上述模块单元的技术细节在前面的方法中已有详述,故不再赘述。
综上所述,本发明通过在编译目标文件时,引入java源码与目标代码一起编译,并且在编译后将java源码编译出的字节码文件剔除,从而使得java归档文件的分离更加方便和灵活,增加了编译时引入的功能,解决了jar包需要相互依赖的问题。
应当理解的是,本发明的应用不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。
机译: 自动解决与Java一起使用的Java归档文件的依赖关系的系统和方法
机译: 用于更新java归档文件以对文件系统增量进行编码的方法,装置和程序
机译: 用于分离至少一种气体和至少一种lquiquido混合物的混合物,该混合物以主要包含lecquido的重馏分和主要包含气体的轻馏分的分离。进料系统,用于预处理至少一种气体和l的混合物至少一种用于分离的馏分,馏分主要包含重馏分和轻馏分,主要馏分包含气体,进气系统和系统EMA或进气系统的操作方法