鉴于有一个apk文件,有没有办法列出其中的所有jar引用?我无法通过aapt找到一种方法。我想这可能是一个复杂的路线,涉及到转换jar的dex,但我想知道是否有更简单的东西。
答案 0 :(得分:4)
由于所有第一方和第三方代码都优化为一个dex文件,因此您无法轻松找到仅第三方jar的列表。
但是,您可以使用dexdump
中存在的工具$SDK_DIR/build-tools/{VERSION}/
来查看有关APK内部组合的dex文件的信息。
这将打印出文件中所有类的列表:
./dexdump {PATH_TO_APK} | grep "Class descriptor" | cut -d':' -f
输出结果如下:
'LCOM / stackexchange /马文/ UI /收件箱/ AchievementsListFragment;' 'LCOM / stackexchange /马文/ UI /问题/ AnswerFragment;' 'LCOM / stackexchange /马文/ UI /站点/ AllSitesFragment;' 'LCOM / stackexchange /马文/ UI /站点/ SingleSiteQuestionsFragment;' 'LCOM / stackexchange /马文/ UI /站点/ SingleSiteTagsFragment;' 'LCOM / stackexchange /马文/ UI /站点/ SingleSiteUsersFragment;'
...
由于您似乎关心包而不是类,您还可以通过查看包标识符的唯一粗略猜测来优化这一点。如果我们假设每个具有不同前两个标签的类是不同的包,那么您可以将类减少到只包含这样的包:
./ dexdump~ / Downloads / StackExchangeMobile-release.apk | grep“类描述符”| cut -d':' - f2 |切-c4- |切-d'/' - f1-2 | uniq -u |排序
上面将从前一个结果中的每一行的开头删除'L
,只获取前两个文件夹名称(名称空间标识符),然后打印出它找到的所有唯一文件名。
在Stack Exchange上使用它安卓应用程序吐出:
机器人/支撑
COM / actionbarsherlock
COM /谷歌
COM / koushikdutta
...
显示它正在使用的内容。您可以使用要保留的文件夹名称数量,因为某些程序包需要向下钻取2个以上的标识符以确定它们使用的内容,方法是将最后-f1-2
命令的cut
部分修改为{{ 1}}。在这种情况下,我没有把它改成三个,而是发出一个很多的junit包。