CN103324514B - 一种分离java归档文件的方法及系统 - Google Patents

一种分离java归档文件的方法及系统 Download PDF

Info

Publication number
CN103324514B
CN103324514B CN201310237439.1A CN201310237439A CN103324514B CN 103324514 B CN103324514 B CN 103324514B CN 201310237439 A CN201310237439 A CN 201310237439A CN 103324514 B CN103324514 B CN 103324514B
Authority
CN
China
Prior art keywords
java
source code
compiling
code
files
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
Application number
CN201310237439.1A
Other languages
English (en)
Other versions
CN103324514A (zh
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.)
TCL Mobile Communication Technology Ningbo Ltd
Original Assignee
TCL Mobile Communication Technology Ningbo 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 TCL Mobile Communication Technology Ningbo Ltd filed Critical TCL Mobile Communication Technology Ningbo Ltd
Priority to CN201310237439.1A priority Critical patent/CN103324514B/zh
Publication of CN103324514A publication Critical patent/CN103324514A/zh
Application granted granted Critical
Publication of CN103324514B publication Critical patent/CN103324514B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Abstract

本发明公开一种分离java归档文件的方法及系统,其中,所述方法包括步骤:在编译目标文件时,将编译所需的java源码从源码目录中引用到编译过程中,并与目标代码一起进行编译,在编译过程中,记录参与编译的java源码;将参与编译的java源码编译出的字节码文件剔除,并将剩下的字节码文件打包成最终的java归档文件。本发明使得java归档文件的分离更加方便和灵活,增加了编译时引入的功能,解决了jar包需要相互依赖的问题。

Description

一种分离java归档文件的方法及系统
技术领域
本发明涉及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包需要相互依赖的问题。
应当理解的是,本发明的应用不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。

Claims (8)

1.一种分离java归档文件的方法,其特征在于,包括步骤:
A、在编译目标文件时,将编译所需的java源码从源码目录中引用到编译过程中,并与目标代码一起进行编译,在编译过程中,记录参与编译的java源码,在java源码参与编译时,还需在现有的编译系统中增加新的机制,所述新的机制可在build/core/base_rules.mk中增加,内容如下:
Ifneq(“$(LOCAL_JAVA_INCLUDES)”, “”)
$(LOCAL_INTERMEDIATE_TARGETS):PRIVATE_JAVA_INCLUDES:=$(LOCAL_JAVA_INCLUDES)
Else
PRIVATE_JAVA_INCLUDES:=
endif;
B、将参与编译的java源码编译出的字节码文件剔除,并将剩下的字节码文件打包成最终的java归档文件。
2.根据权利要求1所述的分离java归档文件的方法,其特征在于,所述步骤A具体包括:
A1、在编译目标文件时,从源码目录中获取编译所需的java源码;
A2、将java源码与目标代码一起进行编译;
A3、记录参与编译的java源码,以区分目标代码与java源码。
3.根据权利要求1所述的分离java归档文件的方法,其特征在于,所述步骤B具体包括:
B1、将java源码与目标代码编译出的字节码文件区分开来;
B2、剔除由java源码编译出的字节码文件;
B3、将剩余的字节码文件打包成最终的java归档文件。
4.根据权利要求2所述的分离java归档文件的方法,其特征在于,所述步骤A3中,通过一变量记录所有的java类以及java类的子类。
5.一种分离java归档文件的系统,其特征在于,包括:
参与编译模块,用于在编译目标文件时,将编译所需的java源码从源码目录中引用到编译过程中,并与目标代码一起进行编译,在编译过程中,记录参与编译的java源码,在java源码参与编译时,还需在现有的编译系统中增加新的机制,所述新的机制可在build/core/base_rules.mk中增加,内容如下:
Ifneq(“$(LOCAL_JAVA_INCLUDES)”, “”)
$(LOCAL_INTERMEDIATE_TARGETS):PRIVATE_JAVA_INCLUDES:=$(LOCAL_JAVA_INCLUDES)
Else
PRIVATE_JAVA_INCLUDES:=
endif;
选择打包模块,用于将参与编译的java源码编译出的字节码文件剔除,并将剩下的字节码文件打包成最终的java归档文件。
6.根据权利要求5所述的分离java归档文件的系统,其特征在于,所述参与编译模块包括:
获取单元,用于在编译目标文件时,从源码目录中获取编译所需的java源码;
编译单元,用于将java源码与目标代码一起进行编译;
记录单元,用于记录参与编译的java源码,以区分目标代码与java源码。
7.根据权利要求5所述的分离java归档文件的系统,其特征在于,所述选择打包模块包括:
区分单元,用于将java源码与目标代码编译出的字节码文件区分开来;
剔除单元,用于剔除由java源码编译出的字节码文件;
打包单元,用于将剩余的字节码文件打包成最终的java归档文件。
8.根据权利要求6所述的分离java归档文件的系统,其特征在于,所述记录单元通过一变量记录所有的java类以及java类的子类。
CN201310237439.1A 2013-06-17 2013-06-17 一种分离java归档文件的方法及系统 Active CN103324514B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310237439.1A CN103324514B (zh) 2013-06-17 2013-06-17 一种分离java归档文件的方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310237439.1A CN103324514B (zh) 2013-06-17 2013-06-17 一种分离java归档文件的方法及系统

Publications (2)

Publication Number Publication Date
CN103324514A CN103324514A (zh) 2013-09-25
CN103324514B true CN103324514B (zh) 2017-01-25

Family

ID=49193279

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310237439.1A Active CN103324514B (zh) 2013-06-17 2013-06-17 一种分离java归档文件的方法及系统

Country Status (1)

Country Link
CN (1) CN103324514B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103645926B (zh) * 2013-11-14 2017-01-25 乐视致新电子科技(天津)有限公司 一种调用关联模块的方法和装置
CN103645927B (zh) * 2013-11-14 2017-01-11 乐视致新电子科技(天津)有限公司 一种调用关联模块的方法和装置
CN104731581B (zh) * 2015-02-03 2018-02-13 惠州Tcl移动通信有限公司 一种基于Android系统的框架代码修改方法及装置

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102722370A (zh) * 2012-05-24 2012-10-10 南京华设科技股份有限公司 Android模块化开发方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7185323B2 (en) * 2003-05-16 2007-02-27 Sun Microsystems, Inc. Using value speculation to break constraining dependencies in iterative control flow structures

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102722370A (zh) * 2012-05-24 2012-10-10 南京华设科技股份有限公司 Android模块化开发方法

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
maven打包时过滤文件及排除依赖包;cyzero;《http://blog.csdn.net/cyzero/article/details/8251643》;20121203;第1-2页 *
使用ant从多个Source Folder的项目中导出jar包;binbinxyz;《http://blog.csdn.net/binbinxyz/article/details/7367892》;20120319;第1-3页 *
工作中Android编译几乎遇不到的问题,接口分离;oyzhizhong;《http://blog.csdn.net/oyzhizhong/article/details/8246531》;20121201;全文 *

Also Published As

Publication number Publication date
CN103324514A (zh) 2013-09-25

Similar Documents

Publication Publication Date Title
CN109918055B (zh) 一种应用程序的生成方法及设备
CN105068818B (zh) 生成渠道包的方法、装置与批量生成渠道包的方法、系统
CN105511911B (zh) 系统固件升级包的生成方法及装置
CN103324514B (zh) 一种分离java归档文件的方法及系统
US20130111451A1 (en) Program Log Record Optimization
CN105224370A (zh) 一种加载elf文件的方法和装置
CN107066266A (zh) 安卓应用中支持Unity的数据处理方法及装置
CN103019787A (zh) 函数调用关系确定方法、热补丁升级方法及装置
CN104899016A (zh) 调用堆栈关系获取方法及装置
CN103544298A (zh) 组件的日志分析方法和分析装置
CN105094941B (zh) 一种实现多语言的方法及装置
CN105488405A (zh) 一种基于pdb调试信息的恶意代码分析方法及系统
CN110333872A (zh) 一种应用的处理方法、装置、设备和介质
CN110209983A (zh) 一种网页web项目的部署方法及装置
CN109324792A (zh) 一种基于编程语言的路由构建自动化方法及电子设备
CN105005497A (zh) 一种Java卡虚拟机中本地函数的调用方法及装置
CN107391099B (zh) 一种资源预处理方法及装置
CN111240987B (zh) 移植程序检测方法、装置、电子设备及计算机可读存储介质
CN105677297A (zh) 套锁实现方法及装置
CN107766048B (zh) 一种页面编译方法及装置
CN102609482A (zh) 一种json数据格式的封装方法
CN102710433A (zh) 一种在线升级处理方法、相关装置和系统
CN105260224A (zh) 一种lua脚本扩展系统及其运行方法
CN107423096A (zh) 一种实现软件安装的方法及装置
CN102892047A (zh) 一种流媒体协议的扩展方法及装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C41 Transfer of patent application or patent right or utility model
TA01 Transfer of patent application right

Effective date of registration: 20161213

Address after: 315100 Zhejiang city of Ningbo province high tech Zone to 999 Lane Road No. 5 10 floor

Applicant after: TCL mobile communication technology (Ningbo) Co., Ltd.

Address before: 315100 6th Floor, No. 5, Lane 999, Yangfan Road, High-tech Zone, Ningbo City, Zhejiang Province

Applicant before: TCL COMMUNICATION (NINGBO) Co.,Ltd.

C14 Grant of patent or utility model
GR01 Patent grant