当前位置: 首页 > 专利查询>北京大学专利>正文

一种安卓应用的解耦方法技术

技术编号:18458528 阅读:40 留言:0更新日期:2018-07-18 12:36
本发明专利技术提供一种安卓应用的解耦方法,能够自动地将现有的安卓应用解耦为基础包和功能包,其基础包包含了应用中用户常用的功能,功能包为其他功能,用户可以根据需要再下载使用。其核心思想是利用静态分析分析安卓页面之间的依赖关系,将常用的页面以及依赖的代码和资源重新打包成基础包,将其他不常访问的页面以及依赖的代码和资源打包成功能包,在用户访问的时候再下载到设备上。在运行时,通过一个应用层的容器,管理解耦后的应用的安装和运行,拦截和模拟安卓运行时环境来运行基础包中的页面,并结合安卓运行时加载机制动态加载功能包中的页面。

A decoupling method for Android application

The invention provides a decoupling method for Android application, which can automatically decouple the existing Android applications into basic packages and functional packages. The basic package contains the functions commonly used by the users in the application, the function package is other functions, and the user can download and use it according to the needs. The core idea is to use static analysis and analysis of the dependency relationship between Android pages, repackage the commonly used pages and the dependent code and resources, and package other frequently accessed pages as well as the dependent code and resource package successfully, and download them to the device at the time of user access. At runtime, through an application layer container, manage the installation and operation of the decoupled application, intercept and simulate the Android runtime environment to run the pages in the basic package, and dynamically load the pages in the function package with the Android runtime loading mechanism.

【技术实现步骤摘要】
一种安卓应用的解耦方法
本专利技术涉及软件
,尤其涉及一种安卓应用的解耦方法。
技术介绍
随着智能手机、平板等移动设备的普及,越来越多的用户通过移动设备上安装的移动应用满足日常的生活和工作需求,例如用户通过新闻应用浏览时政新闻、通过购物应用进行在线购物等。由于现有的应用分发和安装机制的限制,用户必须从应用商店下载完整的应用安装包(例如安卓应用的APK文件),然后安装下载的应用安装包,最后打开应用使用应用的功能。但是,随着应用版本的迭代,开发者在应用上集成了越来越多的功能,应用安装包的体积也越来越大,而用户往往只需要使用其中一小部分的一些常用功能。越来越复杂的应用导致用户在尝试新的应用的时候需要等待更长的下载和安装时间,同时应用体积的增大也会导致应用启动慢、加载需要更多的内存以及耗费更多电量。上述问题会影响用户使用应用的体验,导致应用的用户流失,给用户和开发者都造成了损失。鉴于上述现状,业内人员尝试从不同的角度解决相关的问题,但效果均不理想。一方面,可以通过让用户访问网页版的服务使用相关的功能,但是这种方式会受限于网页加载慢、交互差的不足,用户不能获得和移动应用一致的体验;另一方面,开发者通过提供精简版的应用给终端用户较少下载和安装应用的开销,但是这种解决方案需要开发者维护多个版本的应用,会增加开发者额外的开发和维护成本,而且用户如果需要精简版本的应用上没有提供的功能的时候还是需要去下载完整的应用。
技术实现思路
针对现有技术中存在的问题,本专利技术的目的在于提供一种安卓应用的解耦方法,能够自动地将现有的安卓应用解耦为基础包和功能包,其基础包包含了应用中用户常用的功能,功能包为其他功能,用户可以根据需要再下载使用。其核心思想是利用静态分析分析安卓页面之间的依赖关系,将常用的页面以及依赖的代码和资源重新打包成基础包,将其他不常访问的页面以及依赖的代码和资源打包成功能包,在用户访问的时候再下载到设备上。在运行时,通过一个应用层的容器,管理解耦后的应用的安装和运行,拦截和模拟安卓运行时环境来运行基础包中的页面,并结合安卓运行时加载机制动态加载功能包中的页面。为实现上述目的,本专利技术采取的技术方案为:一种安卓应用的解耦方法,其步骤为:获取应用安装文件中的类代码以及应用的资源文件,解析类代码和资源的依赖关系;确定应用核心页面;根据依赖关系将核心页面以及依赖的类代码和资源,与应用安装文件中的辅助文件打包为基础包;将核心页面外的各页面及其依赖的代码和资源分别打包为功能包。进一步地,获取应用安装文件中的类代码以及应用的资源文件,解析类代码和资源的依赖关系包括通过反编译的方式获取应用安装文件中的dex字节码以及应用的资源文件,通过静态分析,获得dex字节码中类和资源的依赖关系。进一步地,通过静态分析,获得dex字节码中类和资源的依赖关系包括通过静态分析获取所有类之间的调用图,通过对资源文件的分析获取资源文件之间的依赖关系;通过在类代码中进行关键词检索获取类对资源文件的依赖关系。进一步地,还包括:通过迭代反馈补充将静态分析缺失的类代码文件和资源文件补充进基础包和功能包中,获得可以正确运行的基础包和功能包。进一步地,核心页面包括启动页面、主页及用户经常访问页面。进一步地,所述辅助文件包括配置文件和原生库。进一步地,还包括通过应用容器,管理解耦后的安卓应用的安装、卸载和运行。进一步地,所述应用容器通过反射的方式,替换系统服务在应用端的binder代理,拦截系统服务的请求并处理。一种服务器,其包括存储器和处理器,所述存储器存储计算机程序,所述程序被配置为由所述处理器执行,所述程序包括用于执行前述方法中各步骤的指令。一种存储计算机程序的计算机可读存储介质,所述计算机程序包括指令,所述指令当由服务器的处理器执行时使得所述服务器执行前述方法中的各个步骤。通过采取上述技术方案,本专利技术改进了现有安卓应用臃肿的现状,通过解耦应用,拆分为基础包和多个功能包,用户可以按需动态请求下载相应的功能包。同时,本专利技术提供一个应用层的容器,确保可以成功运行解耦后的应用,使得用户可以享受到和原始应用一致的用户体验,而且得益于解耦后应用体积的减少,可以减少应用加载消耗的内存,从而减少应用打开的时间,减少应用能耗。附图说明图1为本专利技术一实施例中安卓应用的解耦方法的流程示意图。具体实施方式为了对本专利技术实施例中的技术方案进行清楚、完整的描述。下面将结合本专利技术实施例中的附图,给出一种安卓应用的解耦方法的应用实例。结合图1所示,方法主要包括以下步骤:1)通过反编译工具反编译应用的APK文件,获取应用的dex字节码文件(即应用的类代码文件),应用的资源文件(包括布局文件、图片资源等),AndroidManifest.xml文件和resources.arsc文件(应用的配置文件,分别包含了应用的页面信息和资源信息),C/C++类库(即so文件,为通过C/C++开发的原生类库)。通过对字节码的静态分析,可以获取所有类之间的调用图,通过对资源文件的分析,可以获取资源文件之间的引用关系(即依赖关系,例如布局文件通过@drawable/name的方式可以引用名为name的图片文件),类似地开发者在代码中通过R.drawable.name的方式引用资源文件,通过在类代码中进行关键词检索可以获取类对资源文件的引用(即依赖关系)。通过上述静态分析,可以获取类之间、资源之间以及类和资源之间的依赖关系。安卓应用安装文件的反编译和静态分析。利用反编译工具对应用的APK文件进行反编译,获取到应用的资源文件,通过检索资源文件中通过@type/rname的方式引用其他资源的关键词,从而找到资源之间的依赖关系。其中type表示资源类型,例如drawable对应图片资源,layout对应布局文件资源,style对应主题资源等,rname表示资源文件的名称;同时,利用现有的安卓字节码分析工具构建类方法之间的调用图(callgraph),从而获取类之间的依赖关系;最后,通过检索类代码中通过@type/rname或者R.type.rname方式引用资源文件的关键词,获取类代码对资源的依赖关系,例如安卓的Activity会通过R.layout.rname的方式指定页面要加载的布局文件。2)开发者选择部分页面(核心页面,一个页面对应安卓中的Activity构件)作为核心功能加入到基础包中,例如开发者可以利用诸如友盟之类的统计分析服务统计用户最经常访问的页面,或者选择自己认为应用中最有用的页面,这些页面称之为核心页面。其中,一个页面对应一个类,包含一组功能。在安卓应用的开发中是以Activity作为前端构件,每个Activity对应用户交互的一个页面,每个Activity经常集成一类的功能,例如购物应用的商品页面为一个Activity,展示了商品的价格、图片等信息,因此本专利技术以Activity页面为粒度来解耦应用。核心页面可以是多个,包含启动页面和主页及用户经常访问页面。即默认把应用的启动页面和主页作为核心页面,因为用户在使用应用的时候都会打开启动页和主页。开发者也可以根据用户的使用数据,选择一些用户经常访问的页面添加进核心页面。3)根据1)中的分析结果,将上述步骤中确定的核心页面以及依赖的类代码和资源文件本文档来自技高网...

【技术保护点】
1.一种安卓应用的解耦方法,包括步骤以下:获取应用安装文件中的类代码以及应用的资源文件,解析类代码和资源的依赖关系;确定应用核心页面;根据依赖关系将核心页面以及依赖的类代码和资源,与应用安装文件中的辅助文件打包为基础包;将核心页面外的各页面及其依赖的代码和资源分别打包为功能包。

【技术特征摘要】
1.一种安卓应用的解耦方法,包括步骤以下:获取应用安装文件中的类代码以及应用的资源文件,解析类代码和资源的依赖关系;确定应用核心页面;根据依赖关系将核心页面以及依赖的类代码和资源,与应用安装文件中的辅助文件打包为基础包;将核心页面外的各页面及其依赖的代码和资源分别打包为功能包。2.如权利要求1所述的安卓应用的解耦方法,其特征在于,获取应用安装文件中的类代码以及应用的资源文件,解析类代码和资源的依赖关系包括通过反编译的方式获取应用安装文件中的dex字节码以及应用的资源文件,通过静态分析,获得dex字节码中类和资源的依赖关系。3.如权利要求2所述的安卓应用的解耦方法,其特征在于,通过静态分析,获得dex字节码中类和资源的依赖关系包括通过静态分析获取所有类之间的调用图,通过对资源文件的分析获取资源文件之间的依赖关系;通过在类代码中进行关键词检索获取类对资源文件的依赖关系。4.如权利要求2所述的安卓应用的解耦方法,其特征在于,还包括:通过迭代反馈补充将静态...

【专利技术属性】
技术研发人员:刘譞哲黄罡柳熠马郓梅宏
申请(专利权)人:北京大学
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1