Unity 获取Android版本号和其他手机信息

这篇博客介绍了如何在Unity中通过Gradle打包调用Java代码,来获取Android设备的版本号和其他相关信息。主要涉及C#与Java的交互,以及AndroidUtil.java的编写和放置位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

获取版本号需要使用Gradle打包调用Java

C#

int systemMemory = SystemInfo.systemMemorySize;
int processorCount = SystemInfo.processorCount;
int processorFrequency = SystemInfo.processorFrequency;
string processorType = SystemInfo.processorType;
float batteryLevel = SystemInfo.batteryLevel;
string deviceName 
### 获取 Android 系统版本号Unity 中可以通过 `AndroidJavaObject` `AndroidJavaClass` 来访问原生 Android API,从而获取系统版本号。以下是具体实现方式: ```csharp using UnityEngine; public class GetSystemVersion : MonoBehaviour { public static string GetAndroidOSVersion() { using (var version = new AndroidJavaClass("android.os.Build$VERSION")) { var release = version.GetStatic<string>("RELEASE"); // 获取系统版本号字符串 return release; } } void Start() { Debug.Log("Android OS Version: " + GetAndroidOSVersion()); } } ``` 上述代码利用了 `android.os.Build.VERSION.RELEASE` 属性来返回当前设备的操作系统版本号[^1]。 --- ### 获取应用版本号 对于应用版本号获取,可以直接使用 Unity 提供的内置属性或者通过 Java 反射机制调用 Android 的 `PackageManager` 接口。以下是两种方法的具体实现: #### 方法一:使用 Unity 自带 API Unity 已经提供了便捷的方式用于获取应用的相关信息,例如包名、版本号等。这些数据可通过以下代码片段轻松获得: ```csharp string packageName = Application.identifier; // 应用程序包名 string appVersion = Application.version; // 当前 APK 版本号 Debug.Log($"Package Name: {packageName}, App Version: {appVersion}"); ``` 此方法适用于所有支持的平台,并不需要额外配置即可正常工作[^3]。 #### 方法二:通过反射调用 Android 原生接口 如果需要更灵活地操作 Android 平台特性,则可以借助 `AndroidJavaObject` 类型完成任务。下面是一个例子展示如何读取安装的应用程序元数据中的版本码(versionCode)以及版本名称(versionName): ```csharp using UnityEngine; public class GetAppVersion : MonoBehaviour { private static int GetAppVersionCode() { try { using (var context = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity").Call<AndroidJavaObject>("getApplicationContext")) { using (var pm = context.Call<AndroidJavaObject>("getPackageManager")) { var info = pm.Call<AndroidJavaObject>("getPackageInfo", context.Call<string>("getPackageName"), 0); return info.GetInt("versionCode"); } } } catch (System.Exception e) { Debug.LogError(e.Message); return -1; } } private static string GetAppVersionName() { try { using (var context = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity").Call<AndroidJavaObject>("getApplicationContext")) { using (var pm = context.Call<AndroidJavaObject>("getPackageManager")) { var info = pm.Call<AndroidJavaObject>("getPackageInfo", context.Call<string>("getPackageName"), 0); return info.GetString("versionName"); } } } catch (System.Exception e) { Debug.LogError(e.Message); return ""; } } void Start() { Debug.Log("App Version Code: " + GetAppVersionCode() + ", App Version Name: " + GetAppVersionName()); } } ``` 这种方法允许开发者深入挖掘更多关于目标应用程序的信息,比如签名证书哈希值或其他自定义字段等内容。 --- ### 注意事项 当尝试跨语言交互时,请务必确认项目结构已正确设置好插件路径(如 Plugins/Android),并确保所依赖库文件存在且兼容当前使用的 SDK/NDK 版本环境[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值