IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android上第三方库可更新性的实证研究 -> 正文阅读

[移动开发]Android上第三方库可更新性的实证研究

介绍

这是一篇来自CCS2017的文章《Keep me Updated: An Empirical Study of Third-Party Library Updatability on Android》

贡献

  1. 对来自Google Play的203名应用程序开发人员进行了一项调查,以收集关于库使用情况的第一手信息,并确定开发人员不更新其依赖关系的根本原因。
  2. 分析了库版本,以发现库开发人员可能是导致库适应性差的一个因素。在所有库更新中,58%的源于语义版本控制的预期更改与实际库代码更改不匹配。
  3. 对1264118个应用程序进行了大规模分析,以确定库及其API使用情况。
  4. 深入讨论了应用生态系统中不同实体的短期/长期可操作项,以解决过时库的问题。

应用开发者调查

主要对应用开发者集中于三个问题:

  1. 搜索和将第三方库集成到应用程序中的通用工作流是什么?
  2. 开发人员更新应用程序/库的频率如何,他们更新的主要动机是什么?
  3. 不更新依赖项的可能原因是什么,应用程序开发人员可以想到什么解决方案?

工作流和集成

测量角度:
1)参与者搜索库的主要来源
在这里插入图片描述
2)选择库的标准
在这里插入图片描述
3)参与者的主要开发环境
在这里插入图片描述
4)应用程序集成方法
在这里插入图片描述

应用程序和库维护

测量角度:
1)应用程序/库更新的频率问题
在这里插入图片描述
2)参与者发布应用时间间隔
在这里插入图片描述
3)调查参与者更新应用程序及其应用程序库的原因
在这里插入图片描述

过时库原因

测量角度:
1)对Gradle构建系统的满意度
在这里插入图片描述
2)应用程序包含过时库的原因
在这里插入图片描述
3)使库更新更容易的首选改进
在这里插入图片描述
4)参与者接受终端用户设备上的自动库更新
在这里插入图片描述

库发布分析

语义版本

普雷斯顿·沃纳(Preston Werner)提出了将版本号分类为不同类别以推断预期集成努力的概念,称为语义版本控制。首先,库开发人员声明公共API,例如通过记录它。然后,记录的公共API中的任何更改都会与版本号进行通信。版本格式由三个数字组成:X.Y.Z(Major.Minor.Patch)。每当新版本包含不影响API的错误修复或代码更改时,补丁版本号将递增。

Android库版本控制

对于预期的更改,通过扩展了LibScout工具,并集成了一个版本解析器,它将版本字符串表示的版本更改分类为补丁、次要和主要版本。通过比较连续的库版本,然后检索预期更改的列表,例如,紧随2.3.7版本之后的2.4.1版本被归类为次要版本。
对于实际更改,语义版本控制要求公共库API必须在某个时候正确定义,要么通过显式文档,要么通过代码本身。由于一些库要么缺乏完整的文档,要么不提供其API引用的历史记录,因此我们通过编程方式从原始库SDK中提取公共API。数据集中每个库的第一个版本的公共API集用作基线。

  1. 过滤未记录的API。通过编程的方法,过滤没有被记录的API。为此,排除了位于名为internal的子包中的公共方法。此外,通过ProGuard等混淆工具重命名和缩短的类(及其声明的方法)进行过滤。具体地说,认为使用一个或两个小写字母字符命名的类是模糊的(遵循ProGuard的重命名规则)。
  2. 定义实际变化。运用API差异算法,定义两个公共API api[^old] 和api[^new] ,其中api[^old] 是api[^new] 的直接版本前驱。API由其签名来描述,包括包和类名以及参数和返回类型的列表,如com.facebook.Session.getAccessToken()java.lang.String。
    如果api[^old] =api[^new] 时,如果有一个补丁级别的版本,那么只有代码改变。
    如果api[^old] ? api[^new] 时,新的API就会被添加,但现有的API不会改变。
    当api[^old] 包含api[^new] 未包含的API时,会进行类型分析,以检查api[^new]中的兼容对应项

语义版本统计

测量角度:
1)版本控制正确性:
在80%以上的版本中,只有3/89个库(3.4%)正确分类了版本级别,android oauth客户端库排名第一(93.8%)。另一方面,在不到20%的情况下,10/89(11.2%)的库正确指定了版本字符串。
2)预期变化和实际变化之间的不匹配问题
在这里插入图片描述
3)按补丁/次要/主要分组的连续库版本之间的预期和实际更改总数。
在这里插入图片描述

库的安全修复

具有固定安全漏洞的库版本、预期的和实际的SemVer、是否以及如何描述安全修复,以及该库漏洞是否列在Google的ASI程序中。
在这里插入图片描述

库的可更新性

为了正确评估库可更新性的现状,我们必须分析应用程序正在使用哪些库版本及其部分。因此扫描了来自Google Play的1264118个应用程序,并确定了包含的库版本。

方法

  1. 首先分析公共库API跨给定库版本的健壮性。
  2. 库使用。为了识别库的活动使用部分,扫描应用程序字节码以调用该库。
  3. 结合两个数据集来确定应用程序中的库是否可以更新以及更新的程度。

数据分析

测量角度:
1)Google Play上当前应用程序的库可更新性
在这里插入图片描述
2)可更新到最新版本的库和库匹配的总和
在这里插入图片描述

安全漏洞修复

测量角度:
具有易受攻击版本范围的库分析。
在这里插入图片描述

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-09-21 00:40:22  更:2022-09-21 00:42:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 4:55:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码