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

问题描述

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

实现'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 可帮助您使用包名称查找来检查是否安装了任何有效的包/应用。

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

以下方法是可行的:

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

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

使用 (1) 您无法方便地将其扩展到多个库,因此它仅适用于非常特定的需求。

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...