基于安卓API使用规范的代码质量自动评估优化方法转让专利

申请号 : CN201610421577.9

文献号 : CN106126412B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 赵丝喆武志飞黄小芳吴敬征罗天悦杨牧天武延军

申请人 : 中国科学院软件研究所

摘要 :

本发明涉及一种基于安卓API使用规范的代码质量自动评估优化方法。其步骤包括:构建特定的专用解析器解析API概述文档;基于安卓API使用规范对API进行分类,建立API特征库;建立自动扫描评估引擎,对待测安卓应用程序进行调用API扫描,统计调用API的类型分布,定位移除API、不推荐API和隐藏API的调用位置;提供自动化的代码质量优化建议,生成代码质量评估报告。本发明为考察安卓应用程序调用API的规范程度建立了完整的自动检测评估体系,可有效帮助安卓应用程序开发人员检测并优化API的使用,减少API的误用,提升安卓应用程序代码质量,进而提高安卓应用程序的安全等级。

权利要求 :

1.一种基于安卓API使用规范的代码质量自动评估优化方法,其步骤包括:

1)针对安卓源码中的API概述文档构造解析器,通过该解析器完成所有API对应包名、类名、方法名及参数信息的提取和关联;

2)基于安卓API使用规范将API分为移除API、不推荐API、隐藏API和正常API四种类型,并建立API特征库;建立API特征库时,对于移除API、不推荐API和隐藏API,判断该API是否具有安全隐患,若有则在特征库中为其添加安全影响标志,提示用户特别关注;判别API是否具有安全隐患的方法为:查找API注释中是否存在可引发安全漏洞的关键字标识,若查找到则认为该API具有安全隐患;

3)统计待测安卓应用程序调用API的类型分布,定位移除API、不推荐API和隐藏API的调用位置,基于API使用规范情况和API使用安全性,提出代码质量评级方法,评估代码质量;

4)提供自动化的代码质量优化策略,生成代码质量评估报告。

2.如权利要求1所述的方法,其特征在于:步骤1)所述安卓源码中的API概述文档包括每一安卓系统版本的移除API文档和截至目前最新安卓系统版本的现存API文档。

3.如权利要求1所述的方法,其特征在于:所述可引发安全漏洞的关键字标识来源于美国国家漏洞数据库,包括information leak。

4.如权利要求1所述的方法,其特征在于:步骤2)建立API特征库时,对于移除API,根据API概述文档的版本判别其移除起始版本号;对于不推荐API,在源码注释中提取不推荐起始版本号、不推荐原因和优化建议。

5.如权利要求1所述的方法,其特征在于,API特征库中的每一条API记录包括以下信息:包名、类名、方法名、参数信息、是否正常、是否移除、是否不推荐、是否隐藏、是否安全、移除起始版本号、不推荐起始版本号、不推荐原因和优化建议。

6.如权利要求1所述的方法,其特征在于:步骤3)使用静态反汇编分析技术对待测安卓应用程序进行反汇编,自动扫描得出其调用API的类型分布;所述静态反汇编分析技术使用以下工具中的一种或多种对安卓应用程序进行反汇编:apktool、dex2jar、AndroidMultitool和QARK。

7.如权利要求1所述的方法,其特征在于:步骤3)所述代码质量评级方法,综合考虑不正常API即移除API、不推荐API、隐藏API所占比例及权重,计算得出代码质量得分,介于

0.0-10.0之间,数值越大,说明代码质量越差,并将0.0-3.5设为低危级别,3.6-7.0设为中危级别,7.1-10.0设为高危级别。

8.如权利要求1所述的方法,其特征在于,步骤4)所述代码质量评估报告的内容包括:

1)待测程序调用API的类型分布;2)待测安卓应用程序代码质量评级结果;3)待测程序调用的属于移除API的每条API的包名、类名、方法名、移除起始版本号和具体调用位置;4)待测程序调用的属于不推荐API的每条API的包名、类名、方法名、不推荐起始版本号、优化建议和具体调用位置;5)待测程序调用的属于隐藏API的每条API的包名、类名、方法名和具体调用位置。

说明书 :

基于安卓API使用规范的代码质量自动评估优化方法

技术领域

[0001] 本发明属于信息技术、计算机软件技术领域,具体涉及一种基于安卓API使用规范的代码质量自动评估优化方法。

背景技术

[0002] 截止目前,由谷歌公司研发的安卓系统版本已从Android1.0发展到了Marshmallow6.0,共计发布了20余种不同的主要版本,而相应的安卓应用程序编程接口(Android Application Programming Interface,Android API)也从等级1升至等级23。安卓系统的每次版本升级都会依照系统的功能、性能、安全等方面的需求,相应地新增、删除和变更部分API,例如在等级21升级至等级22时,共新增843个、删除29个、变更144个API方法。但由于安卓应用开发人员的惯性思维,通常根据已有的经验编写代码,忽视或者不注意安卓官方网站声明的API使用建议,致使一些早在低版本就已不推荐使用或者放弃使用的API仍被调用,这会导致编写的应用程序存在潜在的安全问题,更容易被恶意程序利用,例如通用漏洞披露Common Vulnerabilities And Exposures(CVE)中CVE-2015-3833即为getRecentTasks()方法导致的信息泄露漏洞,而该方法在API等级21中已被安卓官方网站声明为不推荐使用。由此可见,API的不当使用严重威胁代码质量,进而造成移动智能终端用户个人信息的泄露,甚至经济财产损失。
[0003] 但到目前为止,还没有基于安卓API使用规范对安卓应用程序代码质量进行自动检测的相关方法。因此本发明为了规范安卓API的使用,建立了完整的自动检测评估体系,并提出了自动化的代码质量优化策略供开发人员参考,以减少应用程序开发过程中API使用不当的情况,进而提升安卓应用程序整体的代码质量。

发明内容

[0004] 本发明的目的在于填补目前对安卓应用程序API调用规范性检测的空白,提出一种基于安卓API使用规范的代码质量自动评估优化方法,该方法可有效帮助安卓应用程序开发人员检测并优化API的使用,减少API的误用,提升安卓应用程序代码质量,进而提高安卓应用程序的安全等级。
[0005] 为实现上述目的,本发明采用如下技术方案:
[0006] 一种基于安卓API使用规范的代码质量自动评估优化方法,其步骤包括:
[0007] 1)针对安卓源码中的API概述文档构造特定的专用解析器,该解析器可完成所有API对应包名、类名、方法名及参数信息的提取和关联;
[0008] 2)基于安卓API使用规范将API分为移除API、不推荐API、隐藏API和正常API四类,并建立API特征库;
[0009] 3)建立自动扫描评估引擎,统计待测安卓应用程序调用API的类型分布,定位移除API、不推荐API和隐藏API的调用位置,基于API使用规范情况和API使用安全性,提出代码质量评级方法,评估代码质量;
[0010] 4)提供自动化的代码质量优化策略,生成代码质量评估报告,供安卓应用程序开发人员参考。
[0011] 进一步地,步骤2)建立API特征库时,对于移除API、不推荐API和隐藏API,需查找API注释中是否存在如information leak(来源于美国国家漏洞数据库)等可引发安全漏洞的关键字标识,若查找到则认为该API会影响代码安全,在特征库中为其添加安全影响标志,提示用户特别关注。
[0012] 进一步地,建立API特征库时,对于移除API,需根据API概述文档的版本判别其移除起始版本号。
[0013] 进一步地,建立API特征库时,对于不推荐API,需在源码注释中进一步提取不推荐起始版本号、不推荐原因和优化建议。
[0014] 进一步地,API特征库中的每一条API记录包括以下信息:包名、类名、方法名、参数信息、是否正常、是否移除、是否不推荐、是否隐藏、是否安全、移除起始版本号、不推荐起始版本号、不推荐原因和优化建议。
[0015] 进一步地,步骤3)使用静态反汇编分析技术对待测安卓应用程序进行反汇编,自动扫描得出其调用API的类型分布;步骤3)所述静态反汇编分析技术使用以下工具中的一种或多种对安卓应用程序进行反汇编:apktool、dex2jar、Android Multitool和QARK等。
[0016] 进一步地,步骤3)所述代码质量评级方法,综合考虑不正常API(移除API、不推荐API、隐藏API)所占比例及权重,计算得出代码质量得分,介于0.0-10.0之间,数值越大,说明代码质量越差,并将0.0-3.5设为低危级别,3.6-7.0设为中危级别,7.1-10.0设为高危级别。
[0017] 进一步地,步骤4)所述代码质量评估报告的内容包括:1)待测程序调用API的类型分布;2)待测安卓应用程序代码质量评级结果;3)待测程序调用的属于移除API的每条API的包名、类名、方法名、移除起始版本号和具体调用位置;4)待测程序调用的属于不推荐API的每条API的包名、类名、方法名、不推荐起始版本号、优化建议和具体调用位置;5)待测程序调用的属于隐藏API的每条API的包名、类名、方法名和具体调用位置。
[0018] 本发明提出一种基于安卓API使用规范的代码质量自动评估优化方法。通过解析安卓官方网站API使用规范,对API进行分类,建立API特征库;在此基础上,扫描待测程序调用API的分布,评估应用程序代码质量并提出优化方案。本发明为考察安卓应用程序调用API的规范程度建立了完整的自动化检测评估体系,并提供自动化的代码质量优化策略供安卓应用程序开发人员参考,可有效减少API的使用不当及误用,进而提升安卓应用程序整体的代码质量。

附图说明

[0019] 图1是实施例的基于安卓API使用规范的代码质量自动评估优化方法的流程图。
[0020] 图2是实施例的代码质量自动评估优化方法的各个处理模块示意图。
[0021] 图3是实施例中建立API特征库的流程图。
[0022] 图4是实施例中自动扫描评估代码质量的流程图。
[0023] 图5是实施例中API概述文档解析器的语法分析树示意图。

具体实施方式

[0024] 下面结合附图,通过实施例对本发明作进一步的说明。
[0025] 本实施例的基于安卓API使用规范的代码质量自动评估优化方法,其总体流程如图1所示,各个处理模块如图2所示,该方法主要包括以下步骤:
[0026] 1)针对安卓源码中的API概述文档构造特定的专用解析器,建立语法分析树,通过包标识符、类标识符和方法标识符可以有效定位每个API的包名、类名和方法名,进而定位方法的参数个数及类型,完成所有API对应包名、类名、方法名及参数信息的提取和关联。
[0027] 2)根据解析结果查找安卓源码文件,定位每个API的实现位置,并对其注释部分进行文本挖掘,提取涉及API使用规范的关键字。将API分为移除API、不推荐API、隐藏API和正常API四类,建立API特征库。对于移除API、不推荐API和隐藏API,需进一步判断源码注释中是否含有影响代码安全性的关键字,若含有则在特征库中为该API添加安全影响标志以提示用户特别关注。
[0028] 具体地,基于安卓API使用规范对API进行分类,建立API特征库的步骤流程如图3所示,具体说明如下:
[0029] 2a)根据1)中的API概述文档解析结果,在安卓源码中定位API的具体实现位置,划分其函数体实现与代码注释部分,转到2b)。
[0030] 2b)对注释部分进行文本挖掘,提取与API使用规范相关的关键字,转到2c)。
[0031] 2c)根据关键字特征,将API分为移除API、不推荐API、隐藏API和正常API四类,转到2d)
[0032] 2d)判断每一个API是否为正常API,若是,则转到2j),直接在数据库中为其创建条目;若不是,则转到2e)。
[0033] 2e)将非正常API进一步分类为移除API、不推荐API和隐藏API,并在数据库中标识,转到2f)。
[0034] 2f)查找每一个移除API、不推荐API和隐藏API的源码注释中是否存在如information leak(来源于美国国家漏洞数据库)等可引发安全漏洞的关键字标识,若存在则认为该API会导致应用程序代码存在潜在的安全问题,转到2g);若无,则转到2h)。
[0035] 2g)为该API添加安全影响标志,提醒用户多加关注,转到2h)。
[0036] 2h)判断该API是否为不推荐API,若是,转到2i),进一步提取相关信息;若不是,则转到2j)。
[0037] 2i)在API源码注释中提取不推荐API的不推荐起始版本号、不推荐原因和优化建议等,转到2j)。
[0038] 2j)根据上述步骤整理出的信息,创建API特征库。API特征库中的每一条API记录包括以下信息:包名、类名、方法名、参数信息、是否正常、是否移除、是否不推荐、是否隐藏、是否安全、移除起始版本号、不推荐起始版本号、不推荐原因和优化建议。
[0039] 3)建立自动扫描评估引擎,评估待测安卓应用程序的代码质量。使用静态分析技术对待测安卓应用程序进行反汇编,自动扫描得出其调用API的类型分布,并定位其中移除API、不推荐API的具体调用位置,提出代码质量评级方法,评估代码质量;
[0040] 具体地,自动扫描评估引擎,评估待测程序代码质量的步骤流程如图4所示,具体说明如下:
[0041] 3a)apktool、dex2jar、Android Multitool和QARK等工具对待测安卓应用程序进行反汇编,得到.dex文件,转到3b)。
[0042] 3b)解析.dex文件,分析文件头,得到各个类的偏移值,进而定位到类块,分析每个类包含的各个方法及其调用位置和物理存储地址,转到3c)。
[0043] 3c)分析待测安卓应用程序中调用的所有API的类型,统计移除API、不推荐API、隐藏API和正常API所占百分比,转到3d)。
[0044] 3d)判断待测安卓应用程序调用的所有API中是否含有移除API、不推荐API和隐藏API,若有,则转到3e);若无,则转到3f)。
[0045] 3e)扫描待测安卓应用程序调用的移除API、不推荐API和隐藏API的具体调用位置,方便安卓应用程序开发人员定位,转到3f)。
[0046] 3f)统计待测安卓应用程序调用的API类型分布,检查调用的移除API、不推荐API和隐藏API是否具有安全性问题,基于API使用规范情况和API使用安全性,提出代码质量评级方法,评估代码质量。
[0047] 本发明提出的代码质量评级方法综合考虑不正常API所占比例及权重,计算得出代码质量得分,介于0.0-10.0之间,数值越大,说明代码质量越差,并将0.0-3.5设为低危级别,3.6-7.0设为中危级别,7.1-10.0设为高危级别。具体计算方法如下:由待测安卓应用程序调用的API类型分布,可知调用的正常API个数为L,移除API个数为M,不推荐API个数为N,隐藏API个数为O。根据不正常API对程序的危险性设定比例值,正常API:移除API:不推荐API:隐藏API=1:4:3:2。则代码质量Q的计算公式为:
[0048]
[0049] 其中,为了凸显安全相关的不正常API所带来的潜在安全危险,提升每一类不正常API中安全相关API的权值为2。假设移除API中与安全相关的有A个,与安全无关的有B个,则将上式中的M替换为 同理,不推荐API和隐藏API也做类似替换。
[0050] 4)从API特征库中提取优化建议,提供自动化的代码质量优化策略并生成代码质量评估报告,供安卓应用程序开发人员参考。代码质量评估报告内容包括:
[0051] 4a)待测安卓应用程序调用API的类型分布。
[0052] 4b)待测安卓应用程序代码质量评级结果。
[0053] 4c)待测安卓应用程序调用的属于移除API的每条API的包名、类名、方法名、移除起始版本号和具体调用位置。
[0054] 4d)待测安卓应用程序调用的属于不推荐API的每条API的包名、类名、方法名、不推荐起始版本号、优化建议和具体调用位置。
[0055] 4e)待测安卓应用程序调用的属于隐藏API的每条API的包名、类名、方法名和具体调用位置。
[0056] 下面提供一个具体应用实例,其实施步骤包括:
[0057] 1)构造特定的专用解析器解析安卓源码中的API概述文档。针对android.app.Activity Manager.setWatchHeapLimit(long)方法,得到的语法分析树如图
5所示。通过包标识符、类标识符和方法标识符可以有效定位每个API的包名、类名和方法名,进而定位方法的参数个数及类型,并将其关联对应。
[0058] 2)建立API特征库,基于安卓API使用规范对API进行分类。表1为android.app.Act ivityManager.getRunningTasks(int)方法和android.database.sqlite.SQLiteProgram.native_bind_long(int long)方法在API特征库中的逻辑结构设计。“是否正常”、“是否移除”、“是否不推荐”和“是否隐藏”的标志位体现了API分类。“是否安全”标志位若为0则表明该API可能会影响代码安全性。
[0059] 表1.API特征库逻辑结构设计
[0060]
[0061] 上表中的一段英文译为中文是:自LOLLIPOP版本起,因该方法可能将个人信息泄露给调用方,第三方应用不可使用该方法。为向后兼容,该方法返回调用方自身任务信息,和其他不敏感任务信息。
[0062] 3)建立自动扫描评估引擎,评估待测程序的代码质量。假设待测安卓应用程序中调用的各类型API如表2所示。表中数据仅作为举例说明。
[0063] 表2待测安卓应用程序中调用的各类型API个数
[0064]
[0065] 按照本发明提出的代码质量评级方法,计算得到该待测安卓应用程序的代码质量评级分数Q为:
[0066]
[0067] 属于中危级别。
[0068] 进一步定位移除API、不推荐API和隐藏API在应用程序中的调用位置,如不推荐AP I:android.app.ActivityManager.getRunningTasks(int),具体调用位置如下:
[0069] Lcom/wbtech/ums/common/CommonUtil;->getPackageName(Landroid/content/Context;)Ljava/lang/String;
[0070] Lcom/fengjr/mobile/act/Base;->getActivityCountInTask()I
[0071] Lcom/fengjr/mobile/util/d;->e()Z
[0072] Lcom/wbtech/ums/common/CommonUtil;->getActivityName(Landroid/content/Context;)Ljava/lang/String;
[0073] Lcom/fengjr/mobile/receiver/MipushMessageReceiver;->isAppRunningForeground(Landroid/content/Context;)Z
[0074] Lcom/fengjr/mobile/receiver/JPushReceiver;->a(Landroid/content/Context;)Z
[0075] Lcom/fengjr/mobile/act/Base;->isAppRunningForeground(Landroid/content/Context;)Z
[0076] 4)提供自动化的代码质量优化策略。例如针对不推荐使用API:Landroid/net/Connecti vityManager;->getNetworkInfo(I),提供的优化策略如下:
[0077] This method was deprecated in API level 23.This method does not support multiple connected networks of the same type.Use getAllNetworks()and getNetworkInfo(android.ne t.Network)instead.
[0078] 上面一段英文所对应的中文为:该方法在API等级23中归为不推荐使用API。该方法不支持多个相同类型的网络连接,请使用getAllNetworks()和getNetworkInfo(android.net.Net work)替代。
[0079] 针对不推荐使用API:Landroid/speech/tts/TextToSpeech;->getFeatures(Ljava/util/Locale;),提供以下优化建议:
[0080] This method was deprecated in API level 21.As of API level 21,please use voices.In order to query features of the voice,call getVoices()to retrieve the list of available vo ices and getFeatures()to retrieve the set of features.
[0081] 上面一段英文所对应的中文为:该方法在API等级21中被归为不推荐使用API,请使用voices。欲查询声音特征,请调用getVoices()检索可用声音列表,并调用getFeatures()检索声音特征集合。
[0082] 生成代码质量评估报告。内容包括待测程序调用API的类型分布、移除API、不推荐A PI和隐藏API的相关信息、具体调用位置和优化建议等,以供安卓应用程序开发人员参考并进行后续决策处理。
[0083] 以上实施例仅用于说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明的精神和范围,本发明的保护范围应以权利要求所述为准。