CN112698881A - Android图片加载行为缺陷动态检测方法 - Google Patents

Android图片加载行为缺陷动态检测方法 Download PDF

Info

Publication number
CN112698881A
CN112698881A CN202011569644.4A CN202011569644A CN112698881A CN 112698881 A CN112698881 A CN 112698881A CN 202011569644 A CN202011569644 A CN 202011569644A CN 112698881 A CN112698881 A CN 112698881A
Authority
CN
China
Prior art keywords
loading
picture
activity
picture loading
android application
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.)
Granted
Application number
CN202011569644.4A
Other languages
English (en)
Other versions
CN112698881B (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.)
Nanjing University of Science and Technology
Original Assignee
Nanjing University of Science and Technology
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 Nanjing University of Science and Technology filed Critical Nanjing University of Science and Technology
Priority to CN202011569644.4A priority Critical patent/CN112698881B/zh
Publication of CN112698881A publication Critical patent/CN112698881A/zh
Application granted granted Critical
Publication of CN112698881B publication Critical patent/CN112698881B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/451Execution arrangements for user interfaces
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Debugging And Monitoring (AREA)
  • Testing, Inspecting, Measuring Of Stereoscopic Televisions And Televisions (AREA)

Abstract

本发明公开了一种Android应用图片加载行为缺陷动态检测方法,输入Android应用apk文件,输出检测到的应用图片加载行为缺陷;为检测应用图片加载行为缺陷,首先对待测Android应用进行静态分析,定位Android应用中图片加载APIs调用位置和生成一个基础GUI模型;然后根据GUI模型与图片加载APIs所在位置,对Android应用进行自动化探索,触发图片加载API并探索完善GUI模型;在此期间,基于Xposed框架的监控器勾取并分析与图片加载相关APIs,输出有缺陷的图片加载行为。本发明提出的方法,具有有效、高效的优点,能全面、高效地检测Android应用图片加载行为的缺陷。

Description

Android图片加载行为缺陷动态检测方法
技术领域
本发明属于程序分析与测试领域,具体涉及一种Android图片加载行为缺陷动态检测方法。
背景技术
Android系统由于其开放性和通用性,已成为目前最流行的嵌入式操作系统,相应的Android应用数量也随之爆发。为了美化界面与丰富内容,android应用经常需要加载显示图片。然而,在应用中,不恰当的图像加载问题普遍存在,它会严重影响应用程序性能和用户体验,比如,UI滞后、内存膨胀和能耗增加,严重时甚至会导致应用崩溃。因此,对于Android应用中图片加载行为的研究十分必要。
目前,图片加载行为的测试并没有引起开发者过多的重视,尽管现有工作在一定程度上考虑了低效加载显示图片的问题,但大部分都限定在总体性能缺陷分析以及图像显示性能分析的范围内,少部分从源代码出发,静态地分析代码中不规范的图片加载显示操作。在动态测试方面,现有的android应用动态检测工具在general的检测上具有较好的覆盖率以及bug发现率,但在具体的问题上覆盖率较低,且检测开销较大。而在图片加载行为上,由于除了android提供的原生的图片加载类BitmapFactory外,还有各种第三方图片加载库:Picasso,Glide,Universal Image Loader,Fresco。开发者往往使用不同的图片加载API来进行开发,这无形中增加了图片加载行为动态检测的难度。
因此,尽管有很多研究工作提出了针对Android应用的测试方法,但它们大多是用于测试应用的GUI,很少有专门用于测试图片加载行为的方法。当使用这些GUI测试方法来测试应用时,很多的图片加载行为都无法有效和高效地探索。
发明内容
本发明的目的在于提供一种Android图片加载行为缺陷动态检测方法,用于高效、全面地测试Android应用与图片加载相关的行为。
实现本发明目的的技术解决方案为:一种Android应用图片加载行为缺陷动态检测方法,以Android应用的apk文件为输入,以测试出的应用图片加载行为相关缺陷作为输出,步骤如下:
步骤1,静态预分析:使用soot将待测Android应用的apk文件转换为jimple文件,基于jimple文件,得到Android应用代码中图片加载APIs的调用位置和基础的活动跳转图;
步骤2,动态分析:对Android应用进行动态分析,基于步骤1所得活动跳转图,自动化地跳转到图片加载APIs的调用位置,触发图片加载APIs的调用,期间对活动跳转图缺失的边进行基于组件分类的广度优先探索算法的自动化探索来补全;
步骤3,运行时验证:使用基于Xposed框架实现的监控器监控Android应用图片相关API的执行情况,对勾取到的图片加载行为相关的方法进行时序分析,获得并输出存在反模式的图片加载行为。
本发明与现有技术相比,其显著优点为:(1)采用动静结合的思想,先静态分析获取APK的基本GUI模型,在对APK进行动态分析时,以目标驱动,直接到达测试点,而不需要过多与测试无关的操作;(2)使用Xposed框架勾取目标APIs,无需对APK进行插桩处理;(3)测试过程自动化,能全面高效地测试应用图片加载相关行为。
附图说明
图1是本发明提供的Android应用图片加载相关行为动态检测方法的流程图。
图2是常用的Android图片加载APIs示例。
图3是jimple形式的Android图片加载APIs使用代码示例。
图4是反模式加载图片前没调整图片大小的示例。
图5是反模式UI线程中加载图片示例。
图6是反模式循环冗余地加载图片示例。
具体实施方式
本发明公开了一种Android应用图片加载行为缺陷动态检测方法,以Android应用的apk文件为输入,以检测出的应用图片加载行为相关缺陷作为输出。其整体流程如图1所示,具体步骤如下:
步骤1,静态预分析。使用soot将待测Android应用的apk文件转换为jimple文件,基于jimple文件,得到Android应用代码中图片加载APIs的调用位置和一个基础的GUI模型,具体步骤如下:
步骤1-1,使用soot来解析apk文件,并转换为jimple文件,得到的jimple文件是Android应用源码的中间表示形式;
步骤1-2,遍历所有jimple文件,搜索所有存在图片加载APIs调用的语句,记录下每条调用语句的代码位置(调用语句所在的类和方法);
步骤1-3,分析android应用的Activity类、Fragment类、事件响应类与活动跳转APIs调用位置,构建一幅基础的GUI模型。
步骤2,动态分析。对Android应用进行动态分析,基于步骤1所得活动跳转图,自动化地跳转到图片加载APIs的调用位置,触发图片加载APIs的调用,期间对活动跳转图缺失的边进行基于组件分类的广度优先探索算法的自动化探索来补全,具体步骤如下:
步骤2-1,使用ADB命令将应用安装到模拟器;
步骤2-2,在自动化测试框架UIAutomator下,启动应用,根据活动跳转图获取到达图片加载API调用所在位置的路径,根据路径生成测试用例,执行测试用例,触发图片加载APIs;
步骤2-3,由于静态分析所生成的活动跳转图并不是完备的,获取路径期间可能发生缺边而无法到达的情况,此时通过使用基于组件分类的广度优先探索算法的自动化探索来补全。
输入为包含启动Activities的待测Activity集,从中选择一个Activity作为当前Activity并打开,执行以下步骤:
对于当前活动Activity,获取所有GUI元素。对所有GUI元素进行组件分类。分类如下:
(1)Pop-up组件:特点是点击该组件,能打开一个新的窗口,对应的遍历方法是反复触发弹窗来遍历弹窗上的所有的新组件;
(2)tab bar组件:特点是存在多个tab组件,每个tab组件对应一个界面布局,对应的遍历方式是在每个tab组件点击后,重新遍历一次当前界面的组件;
(3)view group组件:特点是包含多个子组件,子组件也可以是view group组件,包含其他子组件,如此嵌套下去。
(4)normal组件:除去上述三种组件,剩余均为normal组件,正常遍历点击;
对于四类组件按照以上顺序进行遍历点击。如若触发页面跳转,即打开一个新Activity,则将新Activity加入待测Activity集中,按回退键回到当前Activity。当当前Activity的组件遍历完后,将其从待测Activity集中移除,然后从待测Activity集中选择并打开一个Activity,将其作为当前Activity重复算法,直至待测Activity集为空,或图片加载APIs全部触发,结束。
步骤3,运行时验证。使用基于Xposed框架实现的监控器监控Android应用图片相关APIs的执行情况,对勾取到的图片加载行为相关的方法进行时序分析,获得并输出存在反模式的图片加载行为。具体步骤如下:
步骤3-1,基于Xposed框架下的Hook功能实现相应的图片加载相关方法监控器,将Xposed框架和Hook工具安装到测试应用所在的模拟器上;
步骤3-2,动态分析期间,当图片加载相关的方法被调用执行时,监控器便能勾取这些方法。当一个完整的图片加载操作的全部方法勾取完时,对这些方法进行时序分析,判断图片加载行为是否存在反模式。主要对以下三种图片加载反模式进行运行时验证:
(1)加载图片前没调整图片大小:直接加载给定图片资源的原图,当图片过大时可能导致OOM问题;
(2)UI线程中加载图片:图片加载操作在某些时候是一个耗时的操作,在UI线程中加载图片时,可能会导致UI阻塞;
(3)循环冗余地加载图片:在ListView,RecyclerView等循环组件中加载外部图片而没有使用缓存,每次加载图片时都要进行一次从外部获取图片的操作。
对三种反模式的分析方法:
(1)加载图片前没调整图片大小:
a.Android原生图片加载API:用ImageAPI指代具体的图片加载API。在调用ImageAPI(Option.inJustDecodeBounds=false)之前没有调用ImageAPI(Option.inJustDecodeBounds=true)来获取图片大小信息调整图片尺寸,或ImageAPI()的BitmapFactory.Options参数是null时,符合反模式;
b.Picasso图片加载框架:load()方法后序没有调用resize(int,int)或resizeDimen(int,int)或fit()时,符合反模式;
c.Universalimageloader图片加载框架:displayImage()参数为ImageScaleType.NONE时,符合反模式;
d.Fresco图片加载框架:在加载显示图片setImageURI(uri)之前没有调用com.facebook.imagepipeline.request.ImageRequestBuilder.
setResizeOptions(com.facebook.imagepipeline.common.ResizeOptions)时,符合反模式。
(2)UI线程中加载图片:
a.Android SDK图片加载API:没有在异步方法Thread.run()、AsyncTask.doInBackground()、IntentService.onHandleIntent()中调用图片加载API时,符合反模式;
(3)循环冗余地加载图片:
当图片加载API位于循环控件的主要方法中时,
a.Android SDK图片加载API:图片加载方法调用之前没有调用LruCache.get(),之后没有调用LruCache.put(),则满足反模式;
b.Picasso图片加载框架:load()方法之后调用了
memoryPolicy(MemoryPolicy.NO_STORE|MemoryPolicy.NO_CACHE)方法和networkPolicy(NetworkPolicy.NO_STORE|NetworkPolicy.NO_CACHE)方法,则满足反模式;
c.Glide图片加载框架:load()方法之后调用了skipMemoryCache(true)方法和diskCacheStrategy(DiskCacheStrategy.NONE)方法,则满足反模式;
d.Universalimageloader图片加载框架:displayImage()方法的Option参数对象满足Option.isCacheInMemory()=false和Option.isCacheOnDisk()=false时,满足反模式。
实施例
本实施例提出一种Android应用图片加载相关行为动态检测方法。基于动静结合分析思想,通过静态分析获取应用基本GUI模型,基于GUI模型进行动态分析与运行时验证,来测试应用图片加载相关的行为是否符合反模式。具体测试流程如图1所示。首先,对待测apk文件进行静态分析,来获取Android应用的GUI模型和图片加载APIs调用的位置;之后,基于GUI模型,自动化地运行安装好的Android应用;最后,在应用自动运行过程中会触发图片加载相关的APIs,监控器勾取图片加载相关APIs进行图片加载操作的分析,并在分析结束输出图片加载行为的缺陷。
结合实例,该方法包括:
步骤1,对于待测的Android应用,获取代码中图片加载APIs的调用位置和应用的GUI模型,具体步骤如下:
步骤1-1,使用soot将Android应用的apk文件转换为jimple文件;
步骤1-2,遍历所有jimple文件,搜索所有存在图片加载APIs调用的语句,其中图片加载APIs的种类如图2所示。在图3中第124行调用了其中一种图片加载API,则记录下这条调用语句所在的方法名和类名。搜索完成后,将得到应用代码中所有的图片加载APIs的调用位置;
步骤1-3,遍历jimple文件的过程中,同时分析android应用的Activity类、Fragment类、事件响应类与活动跳转APIs调用位置,构建一幅基础的GUI模型。
步骤2,根据GUI模型和图片加载APIs调用的位置,对安装好的待测Android应用进行动态分析,具体步骤如下:
步骤2-1,使用ADB命令将应用安装到模拟器;
步骤2-2,在自动化测试框架UIAutomator下,启动应用,根据活动跳转图获取到达图片加载API调用所在位置的路径,根据路径生成测试用例,执行测试用例,触发图片加载APIs;
步骤2-3,由于静态分析所生成的活动跳转图并不是完备的,获取路径期间可能发生缺边而无法到达的情况,此时通过使用算法1的自动化探索来补全。算法1如下:
输入为包含启动Activities的待测Activity集,从中选择一个Activity作为当前Activity并打开,执行以下步骤:
对于当前活动Activity,获取所有GUI元素。对所有GUI元素进行组件分类。分类如下:
(1)Pop-up组件:特点是点击该组件,能打开一个新的窗口,对应的遍历方法是反复触发弹窗来遍历弹窗上的所有的新组件;
(2)tab bar组件:特点是存在多个tab组件,每个tab组件对应一个界面布局,对应的遍历方式是在每个tab组件点击后,重新遍历一次当前界面的组件;
(3)view group组件:特点是包含多个子组件,子组件也可以是view group组件,包含其他子组件,如此嵌套下去。
(4)normal组件:除去上述三种组件,剩余均为normal组件,正常遍历点击;
对于四类组件按照以上顺序进行遍历点击。如若触发页面跳转,即打开一个新Activity,则将新Activity加入待测Activity集中,按回退键回到当前Activity。当当前Activity的组件遍历完后,将其从待测Activity集中移除,然后从待测Activity集中选择并打开一个Activity,将其作为当前Activity重复算法,直至待测Activity集为空,或图片加载APIs全部触发,结束。
步骤3,使用基于Xposed框架实现的监控器监控Android应用图片相关APIs的执行情况,对勾取到的图片加载行为相关的APIs进行时序分析,获得并输出存在反模式的图片加载行为。具体步骤如下:
步骤3-1,基于Xposed框架下的Hook功能实现相应的图片加载相关方法监控器,将Xposed框架和Hook工具安装到测试应用所在的模拟器上;
步骤3-2,动态分析期间,当图片加载相关的方法被调用执行时,监控器便能勾取这些方法。当一个完整的图片加载操作的全部方法勾取完时,对这些方法进行时序分析,判断图片加载行为是否存在反模式。主要对以下三种图片加载反模式进行运行时验证:
(1)加载图片前没调整图片大小:直接加载给定图片资源的原图,当图片过大时可能导致OOM问题;如图4所示,以Android SDK中的decodeFile方法为例,被注释掉的代码是对图片的大小进行调整的操作,当调用加载图片的API decodeFile前没有执行注释中的代码,则会直接加载原始的图片,当图片过大时,会造成OOM异常。
(2)UI线程中加载图片:图片加载操作在某些时候是一个耗时的操作,在UI线程中加载图片时,可能会导致UI阻塞;如图5所示,以Android SDK中的decodeFile方法为例,直接在Activity的OnCreate方法中执行图片加载API decodeFile,decodeFile是一个同步方法,OnCreate是一个UI线程中执行的方法。
(3)循环冗余地加载图片:在ListView,RecyclerView等循环组件中加载外部图片而没有使用缓存,每次加载图片时都要进行一次从外部获取图片的操作。如图6所示,以Android SDK中的decodeFile方法为例,在循环控件的主要方法中加载图片而不使用缓存,每次通过MyBaseAdapter获取控件时,即执行getView回调函数时,都会从设备的文件系统中加载图片,会影响循环控件的流畅度,如若加载网络图片,则会消耗额外的流量。
对三种反模式的分析方法:
(1)加载图片前没调整图片大小:
a.Android原生图片加载API:用ImageAPI指代具体的图片加载API。在调用ImageAPI(Option.inJustDecodeBounds=false)之前没有调用ImageAPI(Option.inJustDecodeBounds=true)来获取图片大小信息调整图片尺寸,或ImageAPI()的BitmapFactory.Options参数是null时,符合反模式;
b.Picasso图片加载框架:load()方法后序没有调用resize(int,int)或resizeDimen(int,int)或fit()时,符合反模式;
c.Universalimageloader图片加载框架:displayImage()参数为ImageScaleType.NONE时,符合反模式;
d.Fresco图片加载框架:在加载显示图片setImageURI(uri)之前没有调用com.facebook.imagepipeline.request.ImageRequestBuilder.
setResizeOptions(com.facebook.imagepipeline.common.ResizeOptions)时,符合反模式。
(2)UI线程中加载图片:
a.Android SDK图片加载API:没有在异步方法Thread.run()、AsyncTask.doInBackground()、IntentService.onHandleIntent()中调用图片加载API时,符合反模式;
(3)循环冗余地加载图片:
当图片加载API位于循环控件的主要方法中时,
a.Android SDK图片加载API:图片加载方法调用之前没有调用LruCache.get(),之后没有调用LruCache.put(),则满足反模式;
b.Picasso图片加载框架:load()方法之后调用了
memoryPolicy(MemoryPolicy.NO_STORE|MemoryPolicy.NO_CACHE)方法和networkPolicy(NetworkPolicy.NO_STORE|NetworkPolicy.NO_CACHE)方法,则满足反模式;
c.Glide图片加载框架:load()方法之后调用了skipMemoryCache(true)方法和diskCacheStrategy(DiskCacheStrategy.NONE)方法,则满足反模式;
d.Universalimageloader图片加载框架:displayImage()方法的Option参数对象满足Option.isCacheInMemory()=false和Option.isCacheOnDisk()=false时,满足反模式。

Claims (5)

1.一种Android应用图片加载行为的动态检测方法,以Android应用的apk文件为输入,以检测出的应用图片加载行为缺陷为输出结果,其特征在于,具体步骤如下:
步骤1,静态预分析:使用soot将待测Android应用的apk文件转换为jimple文件,基于jimple文件,得到Android应用代码中图片加载APIs的调用位置和基础的活动跳转图;
步骤2,动态分析:对Android应用进行动态分析,基于步骤1所得活动跳转图,自动化地跳转到图片加载APIs的调用位置,触发图片加载APIs的调用,期间对活动跳转图缺失的边进行基于组件分类的广度优先探索算法的自动化探索来补全;
步骤3,运行时验证:使用基于Xposed框架实现的监控器监控Android应用图片相关API的执行情况,对勾取到的图片加载行为相关的方法进行时序分析,获得并输出存在反模式的图片加载行为。
2.根据权利要求1所述的Android应用图片加载行为的动态检测方法,其特征在于,步骤1中所述使用soot将待测Android应用的apk文件转换为jimple文件,基于jimple文件,得到Android应用代码中图片加载APIs的调用位置和基础的活动跳转图,具体步骤如下:
步骤1-1,使用soot来解析apk文件,并转换为jimple文件,得到的jimple文件是Android应用源码的中间表示形式;
步骤1-2,遍历所有jimple文件,搜索所有存在图片加载APIs调用的语句,记录下每条调用语句的代码位置,即调用语句所在的类和方法;
步骤1-3,分析android应用的Activity类、Fragment类、事件响应类与活动跳转APIs调用位置,构建一幅基础的GUI模型,即活动跳转图。
3.根据权利要求1所述的Android应用图片加载相关行为的动态检测方法,其特征在于,步骤2中所述对Android应用进行动态分析,基于步骤1所得活动跳转图,自动化地跳转到图片加载APIs的调用位置,触发图片加载APIs的调用,期间对活动跳转图缺失的边进行基于组件分类的广度优先探索算法的自动化探索来补全,具体包括以下步骤:
步骤2-1,使用ADB命令将应用安装到模拟器;
步骤2-2,在自动化测试框架UIAutomator下,启动应用,根据活动跳转图获取到达图片加载API调用所在位置的路径,根据路径生成测试用例,执行测试用例,触发图片加载APIs;
步骤2-3,由于静态分析所生成的活动跳转图并不是完备的,获取路径期间可能发生缺边而无法到达的情况,此时通过基于组件分类的广度优先探索算法的自动化探索来补全;基于组件分类的广度优先探索算法如下:
输入为包含启动Activities的待测Activity集,从中选择一个Activity作为当前Activity并打开,执行以下步骤:
对于当前活动Activity,获取所有GUI元素,对所有GUI元素进行组件分类,分类如下:
(1)Pop-up组件:点击该组件,能打开一个新的窗口,对应的遍历方法是反复触发弹窗来遍历弹窗上的所有的新组件;
(2)tab bar组件:存在多个tab组件,每个tab组件对应一个界面布局,对应的遍历方式是在每个tab组件点击后,重新遍历一次当前界面的组件;
(3)view group组件:包含多个子组件,子组件也可以是view group组件,包含其他子组件,如此嵌套下去;
(4)normal组件:除去上述三种组件,剩余均为normal组件,正常遍历点击;
对于四类组件按照以上顺序进行遍历点击;如若触发页面跳转,即打开一个新Activity,则将新Activity加入待测Activity集中,按回退键回到当前Activity;当当前Activity的组件遍历完后,将其从待测Activity集中移除,然后从待测Activity集中选择并打开一个Activity,将其作为当前Activity重复算法,直至待测Activity集为空,或图片加载APIs全部触发,结束。
4.根据权利要求1所述的Android应用图片加载相关行为的动态检测方法,其特征在于,步骤3中所述使用基于Xposed框架实现的监控器监控Android应用图片相关APIs的执行情况,对勾取到的图片加载行为相关的方法进行时序分析,获得并输出存在反模式的图片加载行为,具体步骤如下:
步骤3-1,基于Xposed框架下的Hook功能实现相应的图片加载相关方法监控器,将Xposed框架和Hook工具安装到测试应用所在的模拟器上;
步骤3-2,动态分析期间,当图片加载相关的方法被调用执行时,监控器便能勾取这些方法;当一个完整的图片加载操作的全部方法勾取完时,对这些方法进行时序分析,判断图片加载行为是否存在反模式。
5.根据权利要求4所述的Android应用图片加载相关行为的动态检测方法,其特征在于,步骤3-2主要对以下三种图片加载反模式进行运行时验证:
(1)加载图片前没调整图片大小;
(2)UI线程中加载图片;
(3)循环冗余地加载图片;
对三种反模式的分析方法:
(1)加载图片前没调整图片大小:
a.Android原生图片加载API:用ImageAPI指代具体的图片加载API。在调用ImageAPI(Option.inJustDecodeBounds=false)之前没有调用ImageAPI(Option.inJustDecodeBounds=true)来获取图片大小信息调整图片尺寸,或ImageAPI()的BitmapFactory.Options参数是null时,符合反模式;
b.Picasso图片加载框架:load()方法后序没有调用resize(int,int)或resizeDimen(int,int)或fit()时,符合反模式;
c.Universalimageloader图片加载框架:displayImage()参数为ImageScaleType.NONE时,符合反模式;
d.Fresco图片加载框架:在加载显示图片setImageURI(uri)之前没有调用com.facebook.imagepipeline.request.ImageRequestBuilder.
setResizeOptions(com.facebook.imagepipeline.common.ResizeOptions)时,符合反模式;
(2)UI线程中加载图片:
a.Android SDK图片加载API:没有在异步方法Thread.run()、AsyncTask.doInBackground()、IntentService.onHandleIntent()中调用图片加载API时,符合反模式;
(3)循环冗余地加载图片:
当图片加载API位于循环控件的主要方法中时,
a.Android SDK图片加载API:图片加载方法调用之前没有调用LruCache.get(),之后没有调用LruCache.put(),则满足反模式;
b.Picasso图片加载框架:load()方法之后调用了
memoryPolicy(MemoryPolicy.NO_STORE|MemoryPolicy.NO_CACHE)方法和
networkPolicy(NetworkPolicy.NO_STORE|NetworkPolicy.NO_CACHE)方法,则满足反模式;
c.Glide图片加载框架:load()方法之后调用了skipMemoryCache(true)方法和diskCacheStrategy(DiskCacheStrategy.NONE)方法,则满足反模式;
d.Universalimageloader图片加载框架:displayImage()方法的Option参数对象满足Option.isCacheInMemory()=false和Option.isCacheOnDisk()=false时,满足反模式。
CN202011569644.4A 2020-12-26 2020-12-26 Android图片加载行为缺陷动态检测方法 Active CN112698881B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011569644.4A CN112698881B (zh) 2020-12-26 2020-12-26 Android图片加载行为缺陷动态检测方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011569644.4A CN112698881B (zh) 2020-12-26 2020-12-26 Android图片加载行为缺陷动态检测方法

Publications (2)

Publication Number Publication Date
CN112698881A true CN112698881A (zh) 2021-04-23
CN112698881B CN112698881B (zh) 2022-09-06

Family

ID=75511044

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011569644.4A Active CN112698881B (zh) 2020-12-26 2020-12-26 Android图片加载行为缺陷动态检测方法

Country Status (1)

Country Link
CN (1) CN112698881B (zh)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20150220376A1 (en) * 2014-02-03 2015-08-06 Apigee Corporation System and method for investigating anomalies in api processing systems
CN111176981A (zh) * 2019-12-11 2020-05-19 南京理工大学 Android应用网络相关行为测试方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20150220376A1 (en) * 2014-02-03 2015-08-06 Apigee Corporation System and method for investigating anomalies in api processing systems
CN111176981A (zh) * 2019-12-11 2020-05-19 南京理工大学 Android应用网络相关行为测试方法

Also Published As

Publication number Publication date
CN112698881B (zh) 2022-09-06

Similar Documents

Publication Publication Date Title
US8359584B2 (en) Debugging from a call graph
CN107111544B (zh) 生产诊断中的历史控制流可视化
JP4950454B2 (ja) テスト自動化のスタック階層化
JP4901075B2 (ja) コンピュータ読取可能な媒体、方法及びコンピューティングデバイス
KR100868762B1 (ko) 임베디드용 소프트웨어의 오류 검출 방법
US9535823B2 (en) Method and apparatus for detecting software bugs
Memon et al. DART: a framework for regression testing" nightly/daily builds" of GUI applications
Adamoli et al. Automated GUI performance testing
US8418149B2 (en) Differential comparison system and method
CN105740144B (zh) 一种Android移动终端的自动化测试方法及系统
CN106681897B (zh) 一种代码调试方法及装置
US8418148B2 (en) Thread execution analyzer
JP2006185211A (ja) プログラム解析装置、テスト実行装置、その解析方法及びプログラム
KR102105753B1 (ko) 모바일 어플리케이션 환경설정을 시험하기 위한 시험 항목 자동 생성 방법 및 시스템
US9195562B2 (en) Recording external processes
US9471472B2 (en) Method and system for entering information
CN111382424A (zh) 一种基于受控环境的移动应用敏感行为检测方法和系统
US8997048B1 (en) Method and apparatus for profiling a virtual machine
CN112698881B (zh) Android图片加载行为缺陷动态检测方法
US9069897B2 (en) Capturing telemetry data by dynamic language engine
CN114328168A (zh) 异常检测方法、装置、计算机设备和存储介质
US8291389B2 (en) Automatically detecting non-modifying transforms when profiling source code
CN115774612A (zh) 一种基于线程的程序执行过程剖析方法和系统
CN115904928A (zh) 一种慢函数监控的插桩方法、装置、设备及存储介质
CN109308256B (zh) 一种java程序动态分析方法、设备和存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant