如何在运行时枚举在 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
在正常 Java 中,程序员可以使用 String tmpPath = aClass.getProtectionDomain().getCodeSource().getLocation().getPath();
查询以确定 class.
在 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