You need to enable JavaScript to run this app. Android应用如何通过代码获取已引入三方库的版本名与版本号
优惠活动
大模型
产品
解决方案
定价
更多

Android应用如何通过代码获取已引入三方库的版本名与版本号

报错原因

PackageManager#getPackageInfo() 仅用于查询系统已安装的独立APK应用的包信息,UnityAds是作为依赖项打包进你的应用APK内的,并非独立安装的应用,因此无法匹配到对应的包名,触发NameNotFoundException异常。

最佳实现方案

按优先级从高到低推荐以下三种实现:

方案1:调用UnityAds官方提供的版本接口(首选)

UnityAds官方已经内置了版本获取API,兼容性最高,不会受库内部结构变更影响:

// 直接调用即可获取版本名字符串,如你引入的3.7.1版本会返回"3.7.1"
String unityAdsVersion = UnityAds.getVersion();
Log.d("Version", "UnityAds版本名:" + unityAdsVersion);

方案2:直接读取库自动生成的BuildConfig常量

所有Android AAR类型的三方库构建时都会自动生成BuildConfig类,内置版本名、版本号常量,直接导入对应库的BuildConfig读取即可:

import com.unity3d.ads.BuildConfig;

// 读取版本信息
String versionName = BuildConfig.VERSION_NAME;
int versionCode = BuildConfig.VERSION_CODE;
Log.d("Version", "versionName:" + versionName + ",versionCode:" + versionCode);

如果开启了代码混淆,需要在混淆规则中添加如下配置,避免BuildConfig被移除:

-keep class com.unity3d.ads.BuildConfig { *; }

方案3:反射动态获取(通用场景)

如果需要动态适配多个库、或是不想硬编码导入BuildConfig类,可以用反射方式读取:

try {
    Class<?> buildConfigClz = Class.forName("com.unity3d.ads.BuildConfig");
    String versionName = (String) buildConfigClz.getField("VERSION_NAME").get(null);
    int versionCode = buildConfigClz.getField("VERSION_CODE").getInt(null);
    Log.d("Version", "versionName:" + versionName + ",versionCode:" + versionCode);
} catch (Exception e) {
    Log.e("error", "获取UnityAds版本失败", e);
}

内容的提问来源于stack exchange,提问作者Behrooz Fard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 12:54:03