在Android Studio Apk Analyzer中,“Defined Methods”和“Referenced Methods”有什么区别?

7

android studio 2.2 preview 1 中的一个新功能是 APK Analyzer,当您尝试使用它时,它会提供给您 Defined MethodsReferenced Methods 的统计信息。

示例输出:

此 dex 文件定义了 4118 个类,拥有 28823 个方法,并引用了 35206 个方法


2
据我所知,“已定义的方法”意味着“您已经编写代码的方法”,无论是您自己编写的还是从库中获取的。“被引用的方法”指的是其他DEX文件(例如,Android SDK)中的方法,这些方法是您的代码正在引用的。 - CommonsWare
1
然而,这一切都是基于一些有根据的猜测。这并没有被记录下来,希望在 Android Studio 2.2 发布到发布渠道时,官方能够解释清楚。 - CommonsWare
啊,我明白了,谢谢! - Moh'd Awad
@CommonsWare 我认为所提及的方法是你项目中的总方法数,我尝试了这个插件dexcount-gradle-plugin,它给出的总方法数为:35206。 - Moh'd Awad
这只是意味着该插件的作者和Android Studio的作者在术语上存在分歧。坦白地说,我认为大多数“dex计数”工具都做得不正确,因为它们与Andy Fadden关于64K DEX方法引用限制的写作不符。 - CommonsWare
显示剩余2条评论
2个回答

3
我知道这是一个旧答案,但我会从官方网站粘贴一小段关于两个术语的含义以及算入64k限制中的内容。
每个DEX文件中的包、类和方法都有在“定义方法”和“引用方法”列中列出的计数。 “引用方法”列计算DEX文件引用的所有方法。 通常包括您的代码中定义的方法,依赖库中定义的方法以及代码使用的标准Java和Android包中定义的方法- 这些方法计入每个DEX文件的64k方法限制。 “定义方法”列仅计算在其中一个DEX文件中定义的方法,因此该数字是“引用方法”的子集。
参考:https://developer.android.com/studio/build/apk-analyzer#view_dex_files

3

定义方法是指你编写的方法,或根据给定情况正确使用的方法。如果一个方法被引用,那只意味着你(或代码中的其他方法/对象)正在调用它们。然而,仅仅因为一个方法被引用并不意味着有任何内容被定义,或者它可能被错误地定义。例如,如果你正在使用可能已经安装不正确的开源库(我也做过太多次),你将得到大量被引用但没有定义的方法。希望这能帮到你!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接