给定一个 apk 文件,有没有办法列出其中的所有 jar 引用?我想不出用 aapt 来做到这一点的方法。我想可能有一条涉及 dex 到 jar 转换的复杂路线,但我想知道是否有更简单的方法。
由于所有第一方和第三方代码都优化为一个 dex 文件,因此您将无法轻松找到仅包含第三方 jar的列表。
但是,您可以使用dexdump其中存在的工具$SDK_DIR/build-tools/{VERSION}/来查看有关 APK 中组合的 dex 文件的信息。
这将打印出文件中所有类的列表:
./dexdump {PATH_TO_APK} | grep "Class descriptor" | cut -d':' -f
输出将类似于:
'Lcom/stackexchange/marvin/ui/inbox/AchievementsListFragment;' 'Lcom/stackexchange/marvin/ui/question/AnswerFragment;' 'Lcom/stackexchange/marvin/ui/site/AllSitesFragment;' 'Lcom/stackexchange/marvin/ui/site/SingleSiteQuestionsFragment;' 'Lcom/stackexchange/marvin/ui/site/SingleSiteTagsFragment;' 'Lcom/stackexchange/marvin/ui/site/SingleSiteUsersFragment;'
...
由于您似乎关心的是包,而不是类,因此您还可以通过查看包标识符的独特粗略猜测来优化这一点。如果我们假设每个具有不同前两个标签的类是不同的包,那么您可以将类缩减为仅包,如下所示:
./dexdump ~/Downloads/StackExchangeMobile-release.apk | grep "类描述符" | cut -d':' -f2 | 切-c4- | cut -d'/' -f1-2 | uniq -u | 种类
上面将删除'L前一个结果中每行开头的 ,仅获取前两个文件夹名称(命名空间标识符),然后打印出它找到的所有唯一名称。
在 Stack Exchange android 应用程序上使用它会吐出:
安卓/支持
com/actionbarsherlock
com/谷歌
com/koushikdutta
...
这显示了它正在使用的内容。您可以使用要保留的文件夹名称的数量,因为通过-f1-2将最后一个cut命令的部分修改为-f1-{NUM}. 我没有因为在这种情况下将其更改为 3 会吐出很多junit 包。
| 归档时间: |
|
| 查看次数: |
697 次 |
| 最近记录: |