以编程方式获取我的 Android 应用程序中库的版本

Get the version of a library in my Android app programmatically

我的 Android 应用程序中有一个库,例如 UnityAds。我想在运行时获取它的版本名称和版本代码。我写了下面的代码,但总是发生异常。以编程方式获取此信息的最佳做法是什么?

implementation 'com.unity3d.ads:unity-ads:3.7.1'

try {
    Log.d("Version", getPackageManager().getPackageInfo("com.unity3d.ads", 0).versionName);
} catch (PackageManager.NameNotFoundException e) {
    Log.e("error", e.getMessage());
}

那是行不通的,PackageManager API 可帮助您使用包名称查找来检查是否安装了任何有效的 packages/apps。

由于库位于您自己的程序包的 class 路径中,因此在运行时引用这些 ID 的唯一方法是使用工作流在编译期间记录这些 ID,并在运行时将其公开给您的应用程序。

以下方法可行:

  1. 在构建中公开库元数据 config/resources (https://developer.android.com/studio/build/gradle-tips#simplify-app-development)

  2. 自定义 gradle 插件将 class 路径中的所有库捕获到可以在运行时读取的资产中,类似于 https://github.com/google/play-services-plugins

对于 (1),您无法方便地针对多个库扩展它,因此它仅对非常特定的需求有用。

(2) 可能需要对您的用例进行一些自定义(添加版本信息),但绝对是可扩展的。