代码之家  ›  专栏  ›  技术社区  ›  Reuben Scratton

“API级别分析器”工具如何工作?

  •  1
  • Reuben Scratton  · 技术社区  · 14 年前

    我在一个高知名度的应用程序上工作,它运行在所有版本的Android上。不幸的是,对我来说,市场上的最后一次更新包括一个绝对最后一分钟的补丁<sigh>,它引入了对2.0中引入的API的依赖性。每一个升级后的1.x客户都会立即崩溃,导致我们(相当合理地)在市场反馈中被屠杀。

    很明显这里有程序问题…在任何情况下,我们都不应该在所有4个主要平台版本上测试未交付的代码…但这不是我来这里的原因。

    在我看来,工具应该更加主动地避免这个问题。

    简单地说,在开发过程中,我希望能够看到我使用API的每个地方的列表,该API的引入级别高于 android:targetSdkVersion .

    我的问题是:这样的工具如何工作?是否可以在每个平台的<sdk root>/platforms下编写在每个android.jar中查找的内容(构建与版本号配对的某种函数签名列表),然后进行某种搜索?我只是不太了解Java/Dalvik的胆量来真正解决这个问题。

    3 回复  |  直到 14 年前
        1
  •  2
  •   Reuben Scratton    14 年前

    好吧,我正在为这个问题写一个像样的答案。简言之,我首先通过标准javap工具夹住android sdk.jars来构建数据库。这允许我构建一个与引入API级别相匹配的大量API列表(函数、常量等)。

    该工具的后半部分运行在您自己的.apk上,并运行dexdump以获取每个.class的带注释的反汇编。然后儿童游戏(或者应该是)将每个函数调用交叉引用到它的API级别。

    我应该在一周左右的时间内完成这项工作,然后把它放到网上的某个地方。

        2
  •  1
  •   Peter Knego    14 年前

    将Eclipse Android插件设置为特定的SDK版本,您将看到此SDK版本中不存在的API的错误。

        3
  •  0
  •   rosstheboss    14 年前

    为什么不在早期版本的SDK上构建呢?