移动智能终端下转发应用程序内流量的方法

文档序号:9646431阅读:679来源:国知局
移动智能终端下转发应用程序内流量的方法
【技术领域】
[0001]本发明涉及移动互联网领域,尤其是涉及移动智能终端下转发应用程序内流量的方法。
【背景技术】
[0002]移动智能终端是指像个人电脑一样,具有独立的操作系统,可以由用户自行安装软件、游戏等第三方服务商提供的程序,通过此类程序来不断对终端的功能进行扩充,并可以通过移动通讯网络来实现无线网络接入的便携式设备。常见的移动智能终端包括智能手机和平板电脑。得益于其高度的便携性,移动智能终端正在成为人们使用频率最高的电子设备。
[0003]移动智能终端被使用的最多的功能之一是访问互联网,这正在取代通过台式电脑或者笔记本电脑访问互联网的传统方式。在这种背景下,希望移动智能终端也具有以往仅在台式电脑或者笔记本电脑上实现的各种网络服务,例如网络代理服务。
[0004]网络代理服务允许一个网络终端(一般为客户端)通过这个服务与另一个网络终端(一般为服务器)进行非直接的连接。代理服务有利于保障网络终端的隐私或安全,防止攻击,同时可以缓存源服务器的内容,降低源服务器的负载压力。
[0005]目前移动智能终端中的应用程序上使用代理服务,主要有以下几种方法:
[0006]1、CNAME方法:CNAME指别名记录(也被称为规范名字),这种记录允许将多个名字映射到同一台计算机。可以通过DNS (Domain Name System,域名系统)将域名映射到代理服务器的地址。这一方法的缺点是仅限HTTP/HTTPS协议,且该方法在配置后会有一定的延迟时间,无法立即生效。
[0007]2、APN方法,通过配置APN(Access Point Name,接入点)来引导流量。这一方法的缺点是配置了 APN的移动智能终端上所有的应用程序都会被迫使用所配置的代理服务器,安全性低。
[0008]3、代码控制:应用程序开发者直接在代码中对应用程序的各个网络请求进行代理设置,将流量发送到代理服务器。这一方法的缺点是代码改动量大,复用程度低,且在有些操作系统(例如Google公司的Android系统)中,这种方式不适用于已经编译完成的第三方应用程序。

【发明内容】

[0009]本发明所要解决的技术问题是提供一种移动智能终端下转发应用程序内流量的方法,其能够在Android这样的操作系统中让已经编译完成的第三方应用程序实现代理设置。
[0010]本发明为解决上述技术问题而采用的技术方案是提出一种移动智能终端下转发应用程序内流量的方法,适用于安卓操作系统,该方法包括以下步骤:
[0011]在一代码重写工具包读取应用程序的字节码文件,该应用程序的字节码文件由该应用程序的打包程序在导出应用包时获取;
[0012]在该代码重写工具包检索该字节码文件中与一个或多个网络请求对应的一个或多个第一字节码;
[0013]在该代码重写工具包从一软件开发工具包中提取与各第一字节码对应的第二字节码,并以各第二字节码替换各第一字节码;以及
[0014]将各第二字节码返回给该打包程序,从而使该打包程序使用重写的各第二字节码生成应用包。
[0015]在本发明的一实施例中,该代码重写工具包具有一配置信息,该配置信息包含各第一字节码的匹配信息,该代码重写工具包根据该配置信息检索需要重写的各第一字节码。
[0016]在本发明的一实施例中,该打包程序被配置一 Java代理(javaagent)参数,该Java代理参数的文件存储目标为该代码重写工具包。
[0017]在本发明的一实施例中,上述方法还包括经由该代码重写工具包将该Java代理参数传递给安卓开发环境的dx程序。
[0018]在本发明的一实施例中,该一个或多个网络请求的其中之一使用Http客户端(Httpclient)访问网络。
[0019]在本发明的一实施例中,各第二字节码包括:替换该第一字节码中的第一执行函数的第二执行函数、将Http客户端实例以及执行函数的参数传递给该第二执行函数的指令。
[0020]在本发明的一实施例中,该一个或多个网络请求的其中之一使用URL访问网络。
[0021]在本发明的一实施例中,各第二字节码包括:替换该第一字节码中的第一连接函数的第二连接函数、将URL实例及连接函数的参数传递给该第二连接函数的指令。
[0022]在本发明的一实施例中,该一个或多个网络请求的其中之一使用套接字(Socket)访问网络。
[0023]在本发明的一实施例中,各第二字节码包括:替换该第一字节码中的第一连接函数的第二连接函数、将Socket实例及连接函数的参数传递给该第二连接函数的指令。
[0024]本发明由于采用以上技术方案,使之与现有技术相比,具有如下显著优点:
[0025]1、支持协议种类多。支持HTTP/HTTPS和其他所有基于TCP的应用层协议。
[0026]2、响应快速。对于是否使用代理的开关,所使用代理服务器的地址等修改能立即生效。
[0027]3、不影响其他应用。确保只有需要使用服务的应用的流量被转发到代理服务器,智能移动终端上的其他应用不受影响。
[0028]4、兼容性强。使用方法简单透明,与应用自身实现关联度极低,能兼容绝大多数应用。
[0029]5、部署简单。应用开发者只需要在开发工程中使用代码重写工具包和软件开发工具包,能以最低的成本将代理功能部署到应用上。
【附图说明】
[0030]为让本发明的上述目的、特征和优点能更明显易懂,以下结合附图对本发明的【具体实施方式】作详细说明,其中:
[0031]图1是本发明一实施例中进行代码重写的流程图。
[0032]图2是本发明一实施例中HttpClient访问网络的重写后代码执行流程图。
[0033]图3是本发明一实施例中使用URL访问网络的重写后代码执行流程图。
[0034]图4是本发明一实施例中使用Socket访问网络的重写后代码执行流程图。
[0035]图5是本发明另一实施例中使用Socket访问网络的重写后代码执行流程图。
【具体实施方式】
[0036]本发明的实施例描述一种在移动智能终端平台下将网络请求转发到指定服务器(后文称为代理服务器)的方法。本发明的实施例所涉及的移动终端平台例如为谷歌(Google)公司的安卓(Android)操作系统。
[0037]已知的CNAME方法仅限HTTP/HTTPS协议,且该方法在配置后会有一定的延迟时间,无法立即生效。已知的APN方法迫使移动智能终端上所有的应用程序都使用所配置的代理服务器。已知的代码控制方法需要直接在代码中对应用程序的各个网络请求进行代理设置,代码改动量大、复用程度低,且在有些操作系统(例如Google公司的Android系统)中存在不适用于已经编译完成的第三方应用程序。
[0038]本发明的各实施例适用于各种协议的网络请求,包括但不限于HTTP/HTTPS协议和TCP/IP协议。另外,本发明的实施例的方法可允许应用程序单独设定代理。再者,本发明的实施例的方法可以让已经编译完成的第三方应用程序拥有代理设置的能力。
[0039]本发明的实施例在应用程序打包时进行代码的检索和重写。在已编译的应用程序打包过程中,一个代码重写工具包可以获得应用程序的所有代码,检索代码中涉及网络请求的那部分代码,然后从一个软件开发工具包(Software Development Kit, SDK)中获得事先编写好的替换代码。使用替换代码来替换所检索到的那部分代码,从而加入所期望的代理设置功能。
[0040]图1是本发明一实施例中进行代码重写的流程图。为便于理解,在应用程序打包的整个流程中描述本实施例的代码重写流程100。代码重写流程100会使用代码重写工具包和软件开发工具包。较佳地,这两个工具包可以由应用程序开发者以外的第三方提供,以节省应用程序开发者的开发精力。
[0041]参考图1所示,流程如下:
[0042]在步骤101,开始进行应用程序打包。应用程序打包可以在安卓的集成开发环境(Integrated Development Environment, IDE)中使用打包程序实施。
[0043]在步骤102,在IDE开始打包程序的时候,为打包程序设置Java代理(javaagent)参数。
[0044]打包程序会在启动ProcessBuilder的时候,获取所有的设置,从而获取到javaagent参数。通过设置javaagent参数可以读取应用程序的所有字节码,而获得应用程序的字节码文件,且javaagent参数会指定其文件存储目标为代码重写工具包。
[0045]步骤103, ProcessBuilder会把获取到的javaagent参数经过代码重写工具包等层层传递,最终传递到安卓开发平台的dx程序。
[0046]dx程序是An droid应用打包的最后一个步骤。在dx程序中,会将应用程序的所有代码(以class文件形式存在)传递到javaagent参数中指定的代码重写工具包。
[0047]从步骤104-107为代码重写工具包将执行代码重写的流程100。
[0048]在步骤104,代码重写工具包读取应用程序的字节码文件,即由前述打包程序在导出应用包时读取到的应用程序的字节码文件。
[0049]代码重写工具包可以在dx程序的premain函数中获取到class字节码。
[0050]在步骤105,代码重写工具包检索字节码文件中与一个或多个网络请求对应的一个或多个第一字节码。
[0051]具体地说,代码重写工具包可以遍历字
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1