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