以编程方式获取我的 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,并在运行时将其公开给您的应用程序。
以下方法可行:
在构建中公开库元数据 config/resources (https://developer.android.com/studio/build/gradle-tips#simplify-app-development)
自定义 gradle 插件将 class 路径中的所有库捕获到可以在运行时读取的资产中,类似于 https://github.com/google/play-services-plugins
对于 (1),您无法方便地针对多个库扩展它,因此它仅对非常特定的需求有用。
(2) 可能需要对您的用例进行一些自定义(添加版本信息),但绝对是可扩展的。
我的 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,并在运行时将其公开给您的应用程序。
以下方法可行:
在构建中公开库元数据 config/resources (https://developer.android.com/studio/build/gradle-tips#simplify-app-development)
自定义 gradle 插件将 class 路径中的所有库捕获到可以在运行时读取的资产中,类似于 https://github.com/google/play-services-plugins
对于 (1),您无法方便地针对多个库扩展它,因此它仅对非常特定的需求有用。
(2) 可能需要对您的用例进行一些自定义(添加版本信息),但绝对是可扩展的。