CN105373406B - 基于Android平台的应用布局动态切换方法及系统 - Google Patents
基于Android平台的应用布局动态切换方法及系统 Download PDFInfo
- Publication number
- CN105373406B CN105373406B CN201510876577.3A CN201510876577A CN105373406B CN 105373406 B CN105373406 B CN 105373406B CN 201510876577 A CN201510876577 A CN 201510876577A CN 105373406 B CN105373406 B CN 105373406B
- Authority
- CN
- China
- Prior art keywords
- layout
- bundle
- file
- activity
- topology file
- 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
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44536—Selecting among different versions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44568—Immediately runnable code
- G06F9/44578—Preparing or optimising for loading
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44594—Unloading
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了基于Android平台的应用布局动态切换方法及系统,所述方法包括:获取该Android终端设备的分辨率,从云端下载对应分辨率默认的bundle布局文件,并调用BundleContext来安装该bundle布局文件,最后在该应用数据库中更新状态。通过应用设置界面与用户交互,用户可从备选的布局列表中选择,当选择确定后,应用从云端下载与用户选择对应的bundle布局文件并加载,同时卸载当前bundle布局文件,最后更新应用数据库。本发明可实现同一应用可适应不同分辨率Android终端设备,针对同一Android终端设备,提供各种布局供用户选择,并根据用户选择动态变换布局。
Description
技术领域
本发明涉及Android应用开发技术领域,尤其涉及基于Android平台的应用布局动态切换方法及系统。
背景技术
为了更好地管理Android应用的用户界面里面的各个控件,Android提供了布局管理器,使各个控件能在不同的设备的屏幕上都能运行良好,现在Android共有线性布局(Linear Layout)、表格布局(Table Layout)、帧布局(Frame Layout)、相对布局(RelativeLayout)和绝对布局(Absolute Layout)5种布局。
但是上述5种布局方式都是预先通过代码或者在软件发行包APK(AndroidPackage,即Android安装包)的Layout目录下通过XML布局文件中定义好各个界面的布局方式然后通过代码引用显示,layout目录的内容在APK软件包发行后是无法修改的,也就是有多少个布局方式就要预先定义好多个布局文件,对于想要根据用户意愿来动态变动布局的情况在传统方式下是难以实现。布局确定以后如果发现在某种显示设备的显示界面效果不好或对布局效果不满意,只能是通过开发人员再次去修改相关的代码以适应之。
现有技术中有开发两套相同功能但不同布局的应用,来实现布局的切换,这个方法无疑增加开发者的工作。或者是通过建立远程平台,通过远程管理平台管理不同终端的布局,来实现布局的切换,这个方法除了增加开发者的工作外,还需要建立远程平台,增加成本。另外有时候需要开发针对不同屏幕尺寸的设备,比如手机与电视,由于分辨率不同,采用的布局文件不同,增加重复工作。总之,现有技术中的布局切换程序麻烦,成本高,给用户切换布局带来了不便。
因此,现有技术还有待于改进和发展。
发明内容
鉴于现有技术的不足,本发明目的在于提供一种基于Android平台的应用布局动态切换方法及系统,旨在解决现有技术中的当设备的分辨率不同时,要重新设计布局文件,布局文件切换不方便缺陷。
本发明的技术方案如下:
一种基于Android平台的应用布局动态切换方法,其中,方法包括:
A、根据需要切换布局的界面名称及切换后的布局名称查询数据库,获取需要切换布局的界面的Activity加载的布局;
B、判断需要切换布局的界面的Activity加载的布局与当前Activity加载的布局是否一致,如果不一致,则根据查询数据库的结果获取当前Activity加载的第一布局ID;
C、获取终端分辨率,根据分辨率从云端下载与切换后的布局名称及与需要切换布局的界面的Activity名称一致的bundle布局文件;
D、安装bundle布局文件,获取安装后的bundle布局文件对应的第二布局ID和bundle布局文件的符号名称和版本号;
E、卸载第一布局,更新数据库。
所述的基于Android平台的应用布局动态切换方法,其中,所述步骤A之前还包括:
S1、根据系统接口获取设备分辨率及默认Activity名称;
S2、终端根据分辨率与主Activity名称请求云端获取该Activity默认布局的bundle布局文件;
S3、安装并启动默认Activity布局文件,并更新数据库。
所述的基于Android平台的应用布局动态切换方法,其中,所述步骤S1之前还包括:
S0、预先在云端针对同一分辨率生成不同风格的bundle布局文件并存储。
所述的基于Android平台的应用布局动态切换方法,其中,所述bundle布局文件生成具体包括:
S11、通过在xml文件中用相应的类定义标签,根据类进行编码生成jar文件;
S21、在jar文件中加入特定元数据生成bundle布局文件。
所述的基于Android平台的应用布局动态切换方法,其中,所述特定元数据包括可读信息、bundle识别信息和代码可见性信息。
一种基于Android平台的应用布局动态切换系统,其中,系统包括:
查询模块,用于根据需要切换布局的界面名称及切换后的布局名称查询数据库,获取需要切换布局的界面的Activity加载的布局;
判断与获取模块,用于判断需要切换布局的界面的Activity加载的布局与当前Activity加载的布局是否一致,如果不一致,则根据查询数据库的结果获取当前Activity加载的第一布局ID;
下载模块,用于获取终端分辨率,根据分辨率从云端下载与切换后的布局名称及与需要切换布局的界面的Activity名称一致的bundle布局文件;
安装模块,用于安装bundle布局文件,获取安装后的bundle布局文件对应的第二布局ID和bundle布局文件的符号名称和版本号;
卸载与更新模块,用于卸载第一布局,更新数据库。
所述的基于Android平台的应用布局动态切换系统,其中,所述系统还包括:
分辨率获取模块,用于根据系统接口获取设备分辨率及默认Activity名称;
请求模块,用于终端根据分辨率与主Activity名称请求云端获取该Activity默认布局的bundle布局文件;
安装与更新模块,用于安装并启动默认Activity布局文件,并更新数据库。
所述的基于Android平台的应用布局动态切换系统,其中,所述系统还包括:
预先存储模块,用于预先在云端针对同一分辨率生成不同风格的bundle布局文件并存储。
所述的基于Android平台的应用布局动态切换系统,其中,所述系统还包括:
编码模块,用于通过在xml文件中用相应的类定义标签,根据类进行编码生成jar文件;
bundle布局文件生成模块,用于在jar文件中加入特定元数据生成bundle布局文件。
所述的基于Android平台的应用布局动态切换系统,其中,所述特定元数据包括可读信息、bundle识别信息和代码可见性信息。
有益效果:本发明提供了一种基于Android平台的应用布局动态切换方法及系统,可实现同一应用可适应不同分辨率Android终端设备,针对同一Android终端设备,提供各种布局供用户选择,并根据用户选择动态变换布局。
附图说明
图1为本发明的一种基于Android平台的应用布局动态切换方法的较佳实施例的流程图。
图2为本发明的一种基于Android平台的应用布局动态切换方法的具体应用实施例的应用初始化的细化步骤流程图。
图3为本发明的一种基于Android平台的应用布局动态切换方法的具体应用实施例的布局动态变换的细化步骤流程图。
图4为本发明的一种基于Android平台的应用布局动态切换系统的较佳实施例的功能原理框图。
具体实施方式
为使本发明的目的、技术方案及效果更加清楚、明确,以下对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明实施例中涉及OSGI、bundle布局文件等。因此对OSGI服务及bundle布局文件进行介绍。
OSGI(Open Service Gateway Initiative)是一种面向JAVA的动态模型系统,而OSGI服务平台由两部分组成:OSGI框架和OSGI标准服务。OSGI框架是实现并提供OSGI功能的运行环境,OSGI标准服务定义了很多用于执行常见任务的可重用API。OSGI框架和标准服务的规范由OSGI联盟管理。OSGI框架在创建基于OSGI的应用时起着核心作用,因为它是应用的执行环境。
OSGI联盟在OSGI框架规范中定义了框架的正确行为,这样就可以基于一个定义清晰的API进行编程。这个框架是依据OSGI规范中定义的三个概念层设计的:
模块层:关注于打包和共享代码。
生命周期层:关注于提供执行时模块管理和对底层OSGI框架的访问。
服务层:关注于模块,特别是模块内的组件间的交互和通信。
模块层定义了OSGI模块的概念,并将之称为一个bundle。bundle是一个包含元数据(关于数据的数据)的jar文件,由类文件和相关资源组成。它是构成一个特定应用程序的多个逻辑模块。
生命周期层定义了在OSGI框架中是如何动态安装和管理来的。生命周期层定义了bundle生命周期的操作(如安装、更新、启动、停止和卸载)。这些生命周期的操作使得可以用一种定义明确的方式动态地提供、管理和改进应用程序。
服务层支持和促成了一个灵活的应用编程模型。主要涉及面向服务的发布、查找和绑定交互模式,即服务提供者将服务发布到服务注册中心,然后服务客户端通过搜索服务注册中心,查找可供使用的服务。
而bundle是OSGI中的模块模型。标准Java平台的jar包中包含有class文件以及相应的资源文件,bundle可以简单地理解为是增加了元数据的jar包。一个bundle中包含了java类和一些其他的数据资源,这些数据可以是HTML文件、帮助文档以及图标等。
便于描述,将模块定义为:一个从逻辑上封装实现类的集合,一个基于实现类子集的可选公共API,以及一个对外部代码依赖关系的集合。
从用户层可以把bundle理解为一个功能模块。bundle可以从项目中导入导出,并且能够与项目中的其他bundle共享jar文件。bundle为OSGI框架提供服务,是OSGI服务框架中唯一需要部署的实体。bundle一旦开始运行,就会通过OSGI框架向框架中其他bundle提供功能和服务。
便于描述,本提案将bundle定义为:一个模块化的物理单元,以jar文件形式包含代码、资源和元数据,其中jar文件的边界也作为执行时逻辑模块化的封装边界。
众所周知,Android的.apk文件实际上就是一个zip压缩文件,可以直接使用压缩包管理器打开,比如winrar。该文件包括一个META-INF目录、一个res目录、一个AndroidManifest.xml文件和一个classes.dex。
其中,AndroidManifest.xml是每个应用都必须定义和包含的,它描述了应用的名字、版本、权限、引用的库文件等等信息。META-INF目录下存放的是签名信息,用来保证apk包的完整性和系统的安全。编译生成一个apk包时,会对所有要打包的文件做一个校验计算,并把计算结果放在META-INF目录下。而在Android平台上安装apk包时,应用管理器会按照同样的算法对包里的文件做校验,如果校验结果与META-INF下的内容不一致,系统就不会安装这个apk。这就保证了apk包里的文件不能被随意替换。classes.dex是java源码编译后生成的java字节码文件。res目录存放资源文件。esources.arsc是编译后的二进制资源文件。
dex2jar是一个工具,可将.dex格式转换到Android的Java类的格式。通过如下命令,可将apk反编译获取到.jar文件:
dex2jar xxx.apk
Android中Activity加载的布局就是各种view,而创建view有三种方式,利用三种方式创建view,然后利用Activity的public void setContentView(View view)方法更新view。
第一种方式,直接通过传统的setContentView(R.layout.*)来加载,例如:
setContentView(R.layout.activity_main);其中activity_main.xml是布局文件。
第二种方式,通过LayoutInflater来间接加载,例如:
LayoutInflater mInflater=LayoutInflater.from(this);
View contentView=mInflater.inflate(R.layout.activity_main,null);
其中activity_main.xml是布局文件。
第三种方式,xml文件中的任何标签,都是有相应的类来定义的,根据这些类来动态创建所需的UI界面,示例如下:
LinearLayout layout=newLinearLayout(this);
TextView text=new TextView(this);
text.setText("Hello World");
text.setLayoutParams(new ViewGroup.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
layout.addView(text);
setContentView(layout);
以上前两种方式都是通过xml文件来定义,最后一种是通过动态创建UI界面。本发明实施例中采用动态编码创建布局文件,即通过编码最后生成各种布局jar文件。
本发明提供了一种基于Android平台的应用布局动态切换方法的较佳实施例的流程图,如图1所示,所述方法包括:
步骤S100、根据需要切换布局的界面名称及切换后的布局名称查询数据库,获取需要切换布局的界面的Activity加载的布局。
具体实施时,用户根据提示输入需要切换布局的界面名称,以及切换后的布局名称。根据用户输入的界面名称,查询数据库,对应该界面的Activity加载的布局。
步骤S200、判断需要切换布局的界面的Activity加载的布局与当前Activity加载的布局是否一致,如果不一致,则根据查询数据库的结果获取当前Activity加载的第一布局ID。
具体实施时,判断用户选择的布局与当前Activity加载的布局是否相同,如果不相同则根据数据库查询结果获取当前Activity加载的布局bundle ID,如果相同,则不处理。
步骤S300、获取终端分辨率,根据分辨率从云端下载与切换后的布局名称及与需要切换布局的界面的Activity名称一致的bundle布局文件。
具体实施时,获取终端分辨率,根据分辨率从云端下载与用户选择布局名称以及Activity名称一致的bundle布局文件。
在OSGI服务平台中,生命周期层由Bundle、BundleContext和BundleActivator这三个核心接口构成。Android平台模块动态加载框架中生命周期层核心部分仍然由这三个接口组成,但接口中的方法需要进行删减和扩充。进行删减的原因是这些方法在Android平台的框架中使用不到,将多余的方法删除使框架更加轻量级。同时还需要添加新的方法使得接口能够获取Android平台模块特有的一些属性,如:图标、主Activity、包信息等。
Bundle接口代表了一个已安装到框架中的bundle,允许对其执行状态操作。
在OSGI框架中每个Bundle实体都对应一个Bundle对象,Bundle对象是对Bundle实体的抽象。每个Bundle都对应一个唯一的并且在生命周期中保持不变的ID号码,该ID由框架进行分配。Bundle接口中定义了Bundle的基本信息的获取方法,包括:状态的获取、版本的获取、ID的获取等,还定义了Bundle的管理方法,包括:更新、卸载、启动、停止等。
BundleContext接口为应用提供执行时操作OSGI框架的方法。
BundleContext是指模块在框架中运行时的上下文,该上下文提供了模块与框架进行交互的方法。启动模块时,框架会创建一个对应的BundleContext对象,但该对象不能在模块之间进行传递,这是为了保障模块的安全和资源的正确分配。
BundleActivator接口捕获模块的开始和停止事件。BundleActivator接口只有start和stop这两个方法。
实现了BundleActivator接口的类就是一个Activator。Activator需要在模块配置文件中的Bundle-Activator这一项中进行设置,一个模块最多只能有一个对应的Activator。
为了便于描述,本提案将在Android系统中嵌入OSGI框架称为OSGIFramework。将该OSGIFramework实现为Android系统中的服务,即Servie。便于描述,bundle指bundle布局文件,Bundle指OSGI框架接口。其中OSGI框架的服务启动方法如下:
1.实现运行OSGI框架的服务,如建立GetFramework继承自Android中的服务(Service);
2.在该服务中获取OSGI框架实例,通过FrameWork Factory.new FrameWork()获取框架实例;
3.通过startService在Android系统中启动OSGI框架服务,即启动GetFramework服务。在OSGI框架服务初始化时启动框架实例,如Framework.start()方法。
步骤S400、安装bundle布局文件,获取安装后的bundle布局文件对应的第二布局ID和bundle布局文件的符号名称和版本号。
具体实施时,通过调用BundleContext.install(String location)方法安装bundle布局文件,通过调用安装成功返回的Bundle的getBundleId()方法来获取当前Bundle的ID,并通过调用Bundle的getSymbolicName()方法和getVersion()分别获取到该bundle的符号名称和版本号。
步骤S500、卸载第一布局,更新数据库。
具体实施时,调用BundleContext.uninstall(id),其中id为步骤S400获取的bundle ID,卸载第一布局。更新系统数据库。
进一步的,所述步骤S100之前还包括:
步骤S110、根据系统接口获取设备分辨率及默认Activity名称;
步骤S120、终端根据分辨率与主Activity名称请求云端获取该Activity默认布局的bundle布局文件;
步骤S130、安装并启动默认Activity布局文件,并更新数据库。
进一步地,所述步骤S110之前还包括:
S0、预先在云端针对同一分辨率生成不同风格的bundle布局文件并存储。
具体实施时,预生成针对不同分辨率的设备的布局jar文件,且同一分辨率的设备每一界面预生成不同风格形式的布局jar文件,将这些布局jar文件转化为bundle布局文件,并部署于云端保存。
其中,所述bundle布局文件生成具体包括:
S101、通过在xml文件中用相应的类定义标签,根据类进行编码生成jar文件;
S102、在jar文件中加入特定元数据生成bundle布局文件。
具体实施时,所述步骤S102中所述特定元数据包括可读信息、bundle识别信息和代码可见性信息。标准Java平台的jar包中包含有class文件以及相应的资源文件,bundle可以简单地理解为是增加了元数据的jar包。一个bundle中包含了java类和一些其他的数据资源,这些数据可以是HTML文件、帮助文档以及图标等。
bundle是添加了特定元数据的jar文件。要将jar文件转化成bundle,需要为jar文件增加相应的元数据,元数据包括可读信息、bundle识别信息和代码可见性信息。
1.可读信息:为使用者提供该bundle的相关帮助信息;
Bundle-Name:作为bundle的一个缩写名;
Bundle-Description:描述bundle的功能;
Bundle-DocURL:提供有关bundle的文档;
Bundle-Category:定义了一组由逗号分隔的分类名;
Bundle-Vendor:有关bundle提供商的信息;
Bundle-ContactAddress:有关bundle提供商的信息;
Bundle-Copyright:有关bundle提供商的信息;
2.bundle识别信息:识别bundle的必要信息
安装到OSGI框架中的每个bundle都必须有一个唯一标识,这个标识由bundle符号名称和bundle版本号两部分组成;
Bundle-SymbolicName:符号名称,它和java中包命名方法一致。可直接采用包名作为符号名称;
Bundle-Version:版本号,OSGI规范约定的bundle的版本号格式为:主版本号.次版本号.微版本号.限定符;
Bundle-ManifestVersion:OSGI框架根据此元数据信息确定采用哪个版本的OSGI规范来处理bundle;
3.代码可见性信息:代码内部可见和哪些代码外部可见的必要信息;
Export-Package:导出内部代码,一个为了与其他bundle共享而公开的、由逗号分隔的内部bundle包;
Import-Package:导入外部代码,内部bundle代码需要的、来自其他bundle并由逗号分隔的一组包。
本发明实施例中,,每一个bundle布局文件都是相对独立的,因此将前文生成的布局jar文件转换为bundle布局文件,仅添加可读信息和bundle识别信息。云端bundle布局文件命名格式:所在设备分辨率_所在Activity名称_布局风格名称,其中布局风格名称与用户选择的布局风格名称一致。
本发明还提供一种基于Android平台的应用布局动态切换方法的具体应用实施例的应用初始化的细化步骤流程图,如图2所示,方法包括:
步骤S1、绑定服务框架获取BundleContex;具体地将第三方应用APK转换为bundle布局文件,并设置以下属性:
Bundle-Activator="xxx.xxx.xxx.MainActivity",即将该应用的主Activity设置为Bundle-Activator,当应用执行时启动主Activity;
步骤S2、根据系统接口获取设备分辨率;
步骤S3、BundleActivator获取主Activity名称;
步骤S4、根据分辨率和主Activity名称请求云端获取该Activity默认布局bundle文件;
具体地,通过调用BundleContext.install(String location)方法安装步骤S4中的bundle布局文件,其中参数location是该bundle布局文件存放路径。当安装成功后,会返回已安装的Bundle ID(Bundle Identifier)。Bundle ID是运行期最常用的标识符。它是由OSGI框架自动分配的一个长整型数字,在Bundle整个生命周期内(包括Bundle更新、卸载之后)都不会改变,甚至在OSGI框架重启后都能保留下来。Bundle ID是在Bundle安装过程中由OSGI框架根据Bundle安装时间的先后次序,由小到大进行分配的。可以通过Bundle接口的getBundleId()方法来获取当前Bundle的ID;
此时,通过调用安装成功返回的Bundle的getBundleId()方法来获取当前Bundle的ID。并通过调用Bundle的getSymbolicName()方法和getVersion()分别获取到该bundle的符号名称和版本号,建立数据库存储每一个bunlde的符号名称、版本号、Bundle ID、bundle布局文件包名、载体Activity名称和界面名称属性;
步骤S5、BundleContext安装并启动主Activity布局文件;
步骤S6、更新数据库;
步骤S7、结束。
本发明还提供了一种基于Android平台的应用布局动态切换方法的具体应用实施例的布局动态变换的细化步骤流程图,如图3所示,方法包括:
步骤S11、用户根据提示输入需要切换布局的界面名称,以及切换后的布局名称;
步骤S12、根据用户输入的界面名称,查询数据库,对应该界面的Activity加载的布局;
步骤S13、判断用户选择的布局与当前Activity加载的布局是否相同,如果不相同,则跳至
步骤S14,否则,跳至步骤S21;
步骤S14、根据数据库查询结果获取当前Activity加载的布局bundle ID;
步骤S15、获取系统分辨率;
步骤S16、根据分辨率从云端下载与用户选择布局名称以及Activity名称一致的布局文件;步骤S17、通过调用BundleContext.install(String location)方法安装步骤6中的bundle布局文件;
步骤S18、通过调用安装成功返回的Bundle的getBundleId()方法来获取当前Bundle的ID。并通过调用Bundle的getSymbolicName()方法和getVersion()分别获取到该bundle的符号名称和版本号;
步骤S19、BundleContext.uninstall(id),其中id为步骤S14获取的bundle ID;
步骤S20、更新系统数据库;
步骤S21、结束。
由以上方法实施例可知,本发明提供了一种基于Android平台的应用布局动态切换方法,获取该Android终端设备的分辨率,从云端下载对应分辨率默认的bundle布局文件,并调用BundleContext来安装该bundle布局文件,最后在该应用数据库中更新状态。通过应用设置界面与用户交互,用户可从备选的布局列表中选择,当选择确定后,应用从云端下载与用户选择对应的bundle布局文件并加载,同时卸载当前bundle布局文件,最后更新应用数据库。本发明可实现同一应用布局可适应不同分辨率Android终端设备,针对同一Android终端设备,提供各种布局供用户选择,并根据用户选择动态变换布局。
在上述方法实施例的基础上,本发明还提供了一种基于Android平台的应用布局动态切换系统的较佳实施例的功能原理框图,如图4所示,所述系统包括:
查询模块100,用于根据需要切换布局的界面名称及切换后的布局名称查询数据库,获取需要切换布局的界面的Activity加载的布局;具体如上所述。
判断与获取模块200,用于判断需要切换布局的界面的Activity加载的布局与当前Activity加载的布局是否一致,如果不一致,则根据查询数据库的结果获取当前Activity加载的第一布局ID;具体如上所述。
下载模块300,用于获取终端分辨率,根据分辨率从云端下载与切换后的布局名称及与需要切换布局的界面的Activity名称一致的bundle布局文件;具体如上所述。
安装模块400,用于安装bundle布局文件,获取安装后的bundle布局文件对应的第二布局ID和bundle布局文件的符号名称和版本号;具体如上所述。
卸载与更新模块500,用于卸载第一布局,更新数据库;具体如上所述。
所述的基于Android平台的应用布局动态切换系统,其中,所述系统还包括:
分辨率获取模块,用于根据系统接口获取设备分辨率及默认Activity名称;具体如上所述。
请求模块,用于终端根据分辨率与主Activity名称请求云端获取该Activity默认布局的bundle布局文件;具体如上所述。
安装与更新模块,用于安装并启动默认Activity布局文件,并更新数据库;具体如上所述。
所述的基于Android平台的应用布局动态切换系统,其中,所述系统还包括:
预先存储模块,用于预先在云端针对同一分辨率生成不同风格的bundle布局文件并存储;
具体如上所述。
所述的基于Android平台的应用布局动态切换系统,其中,所述系统还包括:
编码模块,用于通过在xml文件中用相应的类定义标签,根据类进行编码生成jar文件;具体如上所述。
bundle布局文件生成模块,用于在jar文件中加入特定元数据生成bundle布局文件;具体如上所述。
所述的基于Android平台的应用布局动态切换系统,其中,所述特定元数据包括可读信息、bundle识别信息和代码可见性信息;具体如上所述。
综上所述,本发明提供了一种基于Android平台的应用布局动态切换方法及系统,所述方法包括:获取该Android终端设备的分辨率,从云端下载对应分辨率默认的bundle布局文件,并调用BundleContext来安装该bundle布局文件,最后在该应用数据库中更新状态。
通过应用设置界面与用户交互,用户可从备选的布局列表中选择,当选择确定后,应用从云端下载与用户选择对应的bundle布局文件并加载,同时卸载当前bundle布局文件,最后更新应用数据库。本发明可实现同一应用可适应不同分辨率Android终端设备,针对同一Android终端设备,提供各种布局供用户选择,并根据用户选择动态变换布局。
应当理解的是,本发明的应用不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。
Claims (6)
1.一种基于Android平台的应用布局动态切换方法,其特征在于,方法包括:
A、根据用户输入的需要切换布局的界面名称及切换后的布局名称查询数据库,获取需要切换布局的界面的Activity加载的布局;
B、判断需要切换布局的界面的Activity加载的布局与当前Activity加载的布局是否一致,如果不一致,则根据查询数据库的结果获取当前Activity加载的第一布局ID;
C、获取终端分辨率,根据分辨率从云端下载与切换后的布局名称及与需要切换布局的界面的Activity名称一致的bundle布局文件;
D、安装bundle布局文件,获取安装后的bundle布局文件对应的第二布局ID和bundle布局文件的符号名称和版本号;
E、卸载第一布局,更新数据库;
所述步骤A之前还包括:
S0、预先在云端针对同一分辨率生成不同风格的bundle布局文件并存储;
S1、根据系统接口获取设备分辨率及默认Activity名称;
S2、终端根据分辨率与主Activity名称请求云端获取该Activity默认布局的bundle布局文件;
S3、安装并启动默认Activity布局文件,并更新数据库;
预生成针对不同分辨率的设备的布局jar文件,且同一分辨率的设备每一界面预生成不同风格形式的布局jar文件,将这些布局jar文件转化为bundle布局文件,并部署于云端保存。
2.根据权利要求1所述的基于Android平台的应用布局动态切换方法,其特征在于,所述bundle布局文件生成具体包括:
S11、通过在xml文件中用相应的类定义标签,根据类进行编码生成jar文件;S21、在jar文件中加入特定元数据生成bundle布局文件。
3.根据权利要求2所述的基于Android平台的应用布局动态切换方法,其特征在于,所述特定元数据包括可读信息、bundle识别信息和代码可见性信息。
4.一种基于Android平台的应用布局动态切换系统,其特征在于,系统包括:查询模块,用于根据用户输入的需要切换布局的界面名称及切换后的布局名称查询数据库,获取需要切换布局的界面的Activity加载的布局;判断与获取模块,用于判断需要切换布局的界面的Activity加载的布局与当前Activity加载的布局是否一致,如果不一致,则根据查询数据库的结果获取当前Activity加载的第一布局ID;
下载模块,用于获取终端分辨率,根据分辨率从云端下载与切换后的布局名称及与需要切换布局的界面的Activity名称一致的bundle布局文件;
安装模块,用于安装bundle布局文件,获取安装后的bundle布局文件对应的第二布局ID和bundle布局文件的符号名称和版本号;
卸载与更新模块,用于卸载第一布局,更新数据库;
所述系统还包括:
预先存储模块,用于预先在云端针对同一分辨率生成不同风格的bundle布局文件并存储;
分辨率获取模块,用于根据系统接口获取设备分辨率及默认Activity名称;
请求模块,用于终端根据分辨率与主Activity名称请求云端获取该Activity默认布局的bundle布局文件;
安装与更新模块,用于安装并启动默认Activity布局文件,并更新数据库;
预生成针对不同分辨率的设备的布局jar文件,且同一分辨率的设备每一界面预生成不同风格形式的布局jar文件,将这些布局jar文件转化为bundle布局文件,并部署于云端保存。
5.根据权利要求4所述的基于Android平台的应用布局动态切换系统,其特征在于,所述系统还包括:
编码模块,用于通过在xml文件中用相应的类定义标签,根据类进行编码生成jar文件;
bundle布局文件生成模块,用于在jar文件中加入特定元数据生成bundle布局文件。
6.根据权利要求5所述的基于Android平台的应用布局动态切换系统,其特征在于,所述特定元数据包括可读信息、bundle识别信息和代码可见性信息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510876577.3A CN105373406B (zh) | 2015-12-03 | 2015-12-03 | 基于Android平台的应用布局动态切换方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510876577.3A CN105373406B (zh) | 2015-12-03 | 2015-12-03 | 基于Android平台的应用布局动态切换方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105373406A CN105373406A (zh) | 2016-03-02 |
CN105373406B true CN105373406B (zh) | 2019-11-12 |
Family
ID=55375633
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510876577.3A Active CN105373406B (zh) | 2015-12-03 | 2015-12-03 | 基于Android平台的应用布局动态切换方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105373406B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107203524A (zh) * | 2016-03-16 | 2017-09-26 | 阿里巴巴集团控股有限公司 | 一种打包APK文件的方法、加载Bundle文件的方法及系统 |
CN105912328B (zh) * | 2016-04-06 | 2018-11-06 | 北京三快在线科技有限公司 | web系统页面的显示方法、装置及web系统 |
CN106502699A (zh) * | 2016-11-03 | 2017-03-15 | 腾讯科技(深圳)有限公司 | 一种应用页面处理方法、装置及系统 |
CN107426599B (zh) * | 2017-06-29 | 2020-02-07 | 武汉斗鱼网络科技有限公司 | 一种浮层管理方法及系统 |
CN107957896A (zh) * | 2017-11-23 | 2018-04-24 | 上海博泰悦臻电子设备制造有限公司 | 不同项目自适应布局方法及系统、存储介质及车载终端 |
CN109089145B (zh) * | 2018-08-06 | 2021-08-13 | 阿里巴巴(中国)有限公司 | 无侵入控制视频播放的方法、计算设备和存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103164197A (zh) * | 2011-12-14 | 2013-06-19 | 中兴通讯股份有限公司 | Ui布局自适应方法、移动设备以及布局生成设备 |
US8635594B1 (en) * | 2006-03-30 | 2014-01-21 | Emc Corporation | Script language for storage management operations |
CN104572280A (zh) * | 2014-12-29 | 2015-04-29 | 成都卓影科技有限公司 | 一种Android应用主题切换方法 |
CN104731588A (zh) * | 2015-03-12 | 2015-06-24 | 用友网络科技股份有限公司 | 页面布局文件生成方法和页面布局文件生成装置 |
-
2015
- 2015-12-03 CN CN201510876577.3A patent/CN105373406B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8635594B1 (en) * | 2006-03-30 | 2014-01-21 | Emc Corporation | Script language for storage management operations |
CN103164197A (zh) * | 2011-12-14 | 2013-06-19 | 中兴通讯股份有限公司 | Ui布局自适应方法、移动设备以及布局生成设备 |
CN104572280A (zh) * | 2014-12-29 | 2015-04-29 | 成都卓影科技有限公司 | 一种Android应用主题切换方法 |
CN104731588A (zh) * | 2015-03-12 | 2015-06-24 | 用友网络科技股份有限公司 | 页面布局文件生成方法和页面布局文件生成装置 |
Non-Patent Citations (1)
Title |
---|
基于OSGi的Android模块动态加载技术研究;朱晓佳;《中国优秀硕士学位论文全文数据库信息科技辑》;20150115(第1期);I138-417 * |
Also Published As
Publication number | Publication date |
---|---|
CN105373406A (zh) | 2016-03-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105373406B (zh) | 基于Android平台的应用布局动态切换方法及系统 | |
CN105657191B (zh) | 一种基于Android系统的应用增量升级方法及系统 | |
CN105511902B (zh) | 一种安卓平台模块动态加载的方法及系统 | |
Hall et al. | An OSGi implementation and experience report | |
CN106569880B (zh) | 一种Android应用间动态共享资源的方法及系统 | |
CN104714828B (zh) | 应用安装、运行方法及装置 | |
CN110058863A (zh) | Docker容器的构建方法、装置、设备及存储介质 | |
CN105159788B (zh) | 一种Android应用间动态共享资源的方法及系统 | |
CN112486547B (zh) | 多租户场景下的应用程序更新方法、装置及电子设备 | |
CN105516154B (zh) | 应用于SEAndroid系统的安全策略配置方法及装置 | |
US20080256225A1 (en) | Osgi-Based Dynamic Service Management Method for Context-Aware Systems | |
CN103491111A (zh) | 无线应用发布、实现方法与装置 | |
CN103365644A (zh) | 一种扩展软件功能的方法及装置 | |
CN110308999B (zh) | 一种应用间动态共享依赖包的方法、存储介质及移动终端 | |
CN106020877A (zh) | 系统环境配置自动更新方法及装置 | |
CN106469071B (zh) | 应用程序主题更换方法及装置 | |
CN104750528A (zh) | 一种Android程序中的组件管理方法和装置 | |
US20060248508A1 (en) | Method and system for applet extensibility application program interface (API) | |
US9122559B2 (en) | Extensible dependency management framework and method | |
CN104636122A (zh) | 一种能力组件的共享方法和设备 | |
CN109240733A (zh) | 一种基于安卓系统更新广告sdk的方法及终端 | |
KR20180101545A (ko) | 보안 요소에서의 객체들을 관리하기 위한 방법 | |
CN104317573A (zh) | 安卓安装包转换方法和装置以及运行应用的方法和装置 | |
CN111427631A (zh) | 一种多样化移动应用功能模块的动态配置方法 | |
CN106502685B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |