Java 如何在apk中列出所有第三方JAR?
给定一个apk文件,有没有办法列出其中的所有jar引用?我想不出用aapt做这件事的方法。我想可能有一个复杂的过程涉及到dex到jar的转换,但我想知道是否有更简单的方法。因为所有第一方和第三方代码都优化到一个dex文件中,所以您不可能很容易地找到仅包含第三方jar的列表 但是,您可以使用Java 如何在apk中列出所有第三方JAR?,java,android,apk,Java,Android,Apk,给定一个apk文件,有没有办法列出其中的所有jar引用?我想不出用aapt做这件事的方法。我想可能有一个复杂的过程涉及到dex到jar的转换,但我想知道是否有更简单的方法。因为所有第一方和第三方代码都优化到一个dex文件中,所以您不可能很容易地找到仅包含第三方jar的列表 但是,您可以使用$SDK\u DIR/build tools/{VERSION}/中的工具dextump查看有关APK内部组合的dex文件的信息 这将打印出文件中所有类的列表: /dextump{PATH_TO_APK}gre
$SDK\u DIR/build tools/{VERSION}/
中的工具dextump
查看有关APK内部组合的dex文件的信息
这将打印出文件中所有类的列表:
/dextump{PATH_TO_APK}grep“类描述符”| 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;'
因为您似乎关心的是包,而不是类,所以您还可以通过查看包标识符的唯一粗略猜测来对此进行一些优化。如果我们假设每个具有不同前两个标签的类都是不同的包,那么您可以将这些类精简为如下所示的包:
/dextump~/Downloads/StackExchangeMobile-release.apk | grep“类描述符”| cut-d':'-f2 | cut-c4-| cut-d'/'-f1-2 | uniq-u | sort
上述操作将从上一个结果的每一行开头删除'L
,只获取前两个文件夹名称(名称空间标识符),然后打印出找到的所有唯一文件夹名称
在Stack Exchange android应用程序上使用该选项,可以得出以下结论:
android/支持
com/actionbarsherlock
com/google
com/koushikdutta
这显示了它在使用什么。通过将最后一个
cut
命令的-f1-{NUM}
部分修改为-f1-{NUM},您可以使用要保留的文件夹名称的数量,因为某些软件包需要向下钻取2个以上的标识符,以确定它们使用了什么。在这种情况下,我将其更改为3后,不会抛出很多junit包。这不是通过使用import
?在上面的命令中,-u不应用于uniq。这是最新的/dextump~/Downloads/StackExchangeMobile-release.apk | grep“类描述符”| cut-d':'-f2 | cut-c4-| cut-d'/'-f1-2 | uniq | sort