如何在运行时枚举在 Android 应用程序中处于活动状态的依赖项

How to enumerate dependencies that are active in an Android application at runtime

在正常 Java 中,程序员可以使用 String tmpPath = aClass.getProtectionDomain().getCodeSource().getLocation().getPath(); 查询以确定 class.

的源 jar

在 Android 的 Java 版本中,这已被禁用,如 中所示,这表明,我已经确认 aClass.getProtectionDomain() 总是 returns空。

虽然传统的 jar 文件不是 Android 构建过程的一部分,但有关正在使用的包和版本的信息通常对程序员有帮助。

程序员如何在 Android 中获得与在其他 Java 环境中相同的信息(关于依赖项的来源和版本)?

下面的方法,使用 gradle 依赖项列表,不让程序员在运行时访问依赖项,其他方法也是如此 Java 使用 jar 文件的环境,但应该反映在运行时有效的依赖项和版本。

获取依赖项列表的一种方法如下:

  • Android工作室

  • 航站楼

  • 键入 Gradle 命令 (Windows)

    gradelw -q app:dependencies

上面的命令会产生“太多”的输出,包含比运行时类路径多得多的内容。可以查看输出并找到感兴趣的部分。在我的例子中,它是:releaseRuntimeClasspath - Resolved configuration for runtime for variant: release,所以只获取目标输出的方法是使用命令:

gradlew -q app:dependencies --configuration releaseRuntimeClasspath