Page 314 - 《软件学报》2024年第6期
P. 314
2890 软件学报 2024 年第 35 卷第 6 期
com.bumptech.glide
disklrucache load provider request
data engine resource animation target
bitmap_recycle cache executor prefill bitmap bytes drawable file gif
(a) 缺省的包结构树
com.bumptech.glide (AAA)
load (A) request (B) disklrucache (C) provider (D)
resource (A) engine (B) data (C) animation (A) target (B)
bitmap (A) bytes (B) drawable (C) file (D) gif (E) bitmap_recycle (A) cache (B) executor (C) prefill (D)
(b) 整形后的包结构树
图 3 glide-3.8.0 的 LRP 对应的包结构树
arp 对应的 TPL 的判定转化为对它们的包结构树相似性分析
对于给定的根包对 < arp,lrp > , 关于 lrp 是否为
问题, 本文提出了一种基于包结构树的候选 TPL 识别方法, 综合利用了根包对应的包结构树蕴含的 3 种信息, 即
包名、包结构和包结构树签名, 来快速识别候选 TPL, 如算法 2 所示. 算法第 3 行通过两个根包的包名和包结构树
签名进行筛选, 若包名和包结构树签名均相同, 则表明 arp 源自于 lrp , 加入候选列表; 否则算法第 6–8 行引入包结
构相似度的概念度量两个根包的包结构树相似性, 如定义
所示.
6
算法 2. 基于包结构树的候选 TPL 识别方法.
输入: arp , TPL = { lrp ,...,lrp ,...,lrp };
1 i n
输出: candidate TPLs: list .
1. sortedList = null;
2. for i ← 0 to n do
( )
3. if( isPackageNameMatch( arp,lrp ) && isSiganatureMatch( Sig (arp),Sig lrp ) ) // 包名和包结构树签名均匹配
i pst pst i
lrp ,1 ); // 1 表示相似性度量值, 取值范围 0–1
4. list = addLRPtoCandidate(
i
5. else
( )
6. sim = sim pss arp,lrp ;
i
7. if sim > 0 then
8. list = addLRPtoCandidate( lrp ,sim ); // 包结构树中子包匹配个数
i
9. end if
10. end if
11. end for
12. sortInDescending( list );
13. return list ;