首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >计数来自classes.dex的api调用数

计数来自classes.dex的api调用数
EN

Stack Overflow用户
提问于 2015-05-06 08:59:46
回答 1查看 633关注 0票数 0

我想知道是否可以通过解析classes.dex文件来计算调用API的次数。我知道如何获得所有api的调用,但我想知道是否有一种方法可以在不运行应用程序的情况下获得调用api的次数,只需解析classes.dex即可。这些信息存储在dex文件中吗?

我快速查看了dex文件格式,但未能找到该信息。

例:如果substring()只在class1、class2和class3中使用过一次,我应该能够获得被调用3次的子字符串的信息。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-26 22:45:13

仅仅解析代码就无法知道API调用的次数。例如,foo()被调用了多少次?

代码语言:javascript
代码运行次数:0
运行
复制
public static void bar(int x) {
    for ( int i = 0; i < x; i++ ) {
        foo();
    }
}

如果您只看源代码,答案是一次,但如果您分析语义,答案是x时间。

如果您只想知道API调用在源代码中存在的次数,那么您可以很容易地得到它。

  1. 使用dex文件上的巴斯马利来获取Smali代码。
  2. Grep (或ack)您想要的API调用的Smali。SmsManager.sendTextMessage()的示例regex是: “调用^,+,Landroid/telephony/SmsManager;->sendTextMessage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/app/PendingIntent;Landroid/app/PendingIntent;)V”
  3. 数一数你找到那一行的次数。类似于: grep api_call_pattern .wc -l

这只能被认为是实际API调用计数的粗略代理。如果你想要更准确的东西,你必须做符号分析。不幸的是,没有一个关键的解决方案,您可以使用,我知道。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30072076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档