news 2026/8/5 10:01:42

Unity+Android Studio开发桌面悬浮窗萌宠:透明背景与权限处理全攻略

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Unity+Android Studio开发桌面悬浮窗萌宠:透明背景与权限处理全攻略

1. 项目概述与核心价值

最近在社区里看到不少朋友对“桌面萌宠”这个点子感兴趣,想自己动手做一个,但往往卡在Unity和Android Studio的联调、透明背景处理以及最让人头疼的悬浮窗权限上。作为一个在移动端混合开发领域摸爬滚打了多年的老手,我深知这里面的坑有多深。今天,我就把自己从零开始,用Unity开发核心动画逻辑,再通过Android Studio打包成真正能在安卓桌面上“活蹦乱跳”的萌宠App的全过程,以及踩过的所有坑和解决方案,毫无保留地分享出来。

这个项目的核心,就是让一个由Unity渲染的、带有复杂动画(比如眨眼、摇尾巴、跟随触摸)的3D或2D角色,能够以透明背景的悬浮窗形式,常驻在用户的手机桌面上。它不仅仅是“一个Unity应用”,更是一个需要深度介入Android系统层,处理窗口管理、权限申请和跨引擎通信的综合性工程。无论你是想做一个陪伴型的小宠物,还是一个有实用功能的桌面小部件,这套流程都是通用的骨架。接下来,我会从设计思路开始,一步步拆解,直到你得到一个可以安装运行的APK文件。

2. 整体架构设计与技术选型

在动手写第一行代码之前,我们必须把整个项目的技术架构想清楚。桌面萌宠本质上是一个“Android原生外壳 + Unity运行时核心”的混合应用。

2.1 为什么选择Unity + Android Studio组合?

很多新手会问,为什么不用纯Android开发或者纯Unity打包?这里面的考量很实际。Unity在渲染2D/3D图形、处理复杂动画和交互逻辑方面有着天然的优势,它的Animator、Timeline、粒子系统能让我们高效地创造出生动的“萌宠”行为。而纯Android开发要实现同样的效果,工作量巨大,且性能优化门槛很高。

但是,Unity默认打包出的APK,只是一个全屏的Activity。要想实现“悬浮窗”,尤其是在其他应用上层显示、可拖动、点击穿透等特性,就必须依赖Android原生的WindowManagerSYSTEM_ALERT_WINDOW(悬浮窗)权限。这些是Unity引擎层面没有直接暴露的高级API。因此,最合理的架构是:

  1. Unity侧:专注于萌宠的所有视觉表现、动画逻辑和内部交互(如触摸宠物触发反馈)。
  2. Android Studio侧:负责构建一个原生的Android应用外壳。这个外壳主要做三件事:申请悬浮窗权限、创建并管理一个透明背景的悬浮窗窗口、在这个窗口里启动和承载Unity的Player Activity。

2.2 核心交互流程与数据通道

确定了组合方案,下一个问题就是:Unity里的萌宠如何与Android系统的悬浮窗控制逻辑通信?例如,你想点击宠物弹出个菜单,或者让宠物根据手机电量改变表情。

这里通常需要建立一个双向通信桥梁。最稳健和通用的方法是利用Android的UnityPlayer类提供的UnitySendMessage接口,以及我们在Android端定义的UnityPlayerActivity子类。

  • Android -> Unity:当在Android端监听到系统事件(如电池变化、时间更新)或用户从原生菜单发出指令时,通过UnityPlayer.UnitySendMessage(“GameObjectName”, “MethodName”, “parameter”)调用Unity中特定GameObject上的方法。
  • Unity -> Android:在Unity中,通过AndroidJavaClassAndroidJavaObject调用Android端的Java方法。例如,当宠物被长按时,Unity脚本可以调用Android端的方法来显示一个原生的上下文菜单。

这个通信层是项目的神经中枢,设计时要考虑好扩展性,比如定义一套简单的协议或事件枚举,避免后期代码混乱。

注意:初次接触这种通信可能会觉得绕,但请务必理解其本质:Unity运行时是寄宿在Android Activity中的一个“视图”,两者通过JNI(Java Native Interface)进行互操作。我们的工作就是为它们搭建好安全的对话通道。

3. 开发环境准备与关键配置

工欲善其事,必先利其器。环境的正确配置能避免一半的诡异问题。

3.1 Unity编辑器设置(针对Android平台)

首先,确保你的Unity版本支持所需的功能。个人推荐使用较新的LTS(长期支持)版本,如2022.3 LTS,它在稳定性和功能支持上比较平衡。

  1. 安装Android构建支持:在Unity Hub中为你的编辑器版本添加“Android Build Support”模块,务必包含OpenJDKAndroid SDK & NDK Tools。Unity会推荐一个匹配的JDK版本,安装它即可,这是避免后续JDK关联错误的关键。
  2. Player Settings关键配置
    • Other Settings
      • Package Name: 填写你的应用ID,格式如com.yourcompany.yourpet。这是应用的唯一标识。
      • Minimum API Level: 设置为API Level 23 (Android 6.0)或更高。因为悬浮窗权限(SYSTEM_ALERT_WINDOW)从Android 6.0开始属于危险权限,需要运行时动态申请。
      • Target API Level: 建议设置为你能测试到的最高版本(如Android 13/API 33)。高版本Target API有助于应用商店上架和兼容性。
      • Scripting Backend: 选择IL2CPP。它比Mono有更好的性能和安全性,尤其是对于发布版本。Target Architectures可以勾选ARM64ARMv7以确保兼容性。
    • Resolution and Presentation
      • Fullscreen Mode: 设置为Windowed。我们的悬浮窗本身就是一个窗口。
      • Render Outside Safe Area: 建议勾选,确保内容能铺满我们创建的窗口。

3.2 Android Studio与JDK配置

这是坑最多的地方,无数人卡在“Unity关联JDK总是提示无法找到”。

  1. JDK版本管理: Unity对JDK版本有要求。一个常见的错误是,系统环境变量JAVA_HOME指向了一个高版本JDK(如JDK 17),而Unity可能需要JDK 8或Unity自带的OpenJDK。最省事的解决方案是:
    • 忽略系统环境变量,直接让Unity使用它内置的或安装模块时一起下载的OpenJDK。在Unity的Preferences -> External Tools下,将JDK路径指向Unity安装目录下的类似Editor\Data\PlaybackEngines\AndroidPlayer\OpenJDK的文件夹。
    • 如果你需要Android Studio使用特定JDK,可以在Android Studio的File -> Project Structure -> SDK Location中单独设置,这与Unity设置互不干扰。
  2. Android SDK路径: 同样在Unity的External Tools中,将Android SDK路径指向你的Android Studio所用的SDK位置(通常在C:\Users\[用户名]\AppData\Local\Android\Sdk)。确保NDKJDK路径也正确指向Unity自带的或你指定的版本。
  3. 安装必要的SDK Packages: 通过Android Studio的SDK Manager,确保安装了项目Target API Level对应的SDK Platform,以及Build-Tools版本。

实操心得: 如果遇到“unity关联jdk总是提示无法找到”的问题,请彻底关闭Unity和Android Studio,然后先启动Unity,在External Tools中配置好所有路径后,再尝试构建。顺序有时很神奇。另外,将Unity项目路径、SDK路径放在没有中文和空格的目录下,这是一个值得养成的好习惯。

4. Unity侧:萌宠实现与透明背景渲染

Unity部分是我们的内容核心,目标是创建一个视觉上完整、逻辑独立的萌宠。

4.1 创建萌宠角色与动画

这部分自由发挥度很高,可以用3D模型,也可以用2D Spine动画或序列帧。

  1. 场景搭建: 创建一个新的Unity场景。场景里可以只放你的萌宠角色、一个主摄像机和一个平行光。
  2. 动画控制器: 为萌宠创建Animator Controller,设计好 idle(待机)、touch(被触摸反应)、move(移动)等状态机,并通过参数控制切换。这是萌宠“活”起来的关键。
  3. 交互逻辑: 为萌宠挂载C#脚本,处理点击、拖拽等输入。例如,通过Input.GetMouseButtonDown(在移动端对应触摸)来检测点击,并触发动画或调用Android端方法。

4.2 实现透明背景渲染

这是让萌宠“浮”在桌面上的视觉基础。Unity默认渲染的是不透明的颜色缓冲区。

  1. 摄像机设置

    • 将主摄像机的Clear Flags设置为Solid Color
    • 将摄像机的Background颜色的Alpha值(A)设置为0。即完全透明。
    • 确保场景中没有任何不透明的背景物体(如默认的Skybox)。
  2. 项目设置与构建

    • Player Settings -> Other Settings中,找到Rendering部分。
    • Color Space: 使用Linear(线性空间)能获得更真实的渲染效果,但需要确保所有贴图资源适配。对于简单项目,Gamma也可以。
    • 最重要的步骤: 在Player SettingsResolution and Presentation选项卡下,找到Android标签页。
    • Multithreaded Rendering(多线程渲染)取消勾选。这是一个关键步骤,在某些设备上,开启多线程渲染会导致透明背景异常。
    • Build Settings中,选择Android平台,点击Player Settings...,确保上述配置已保存。
  3. 构建出Android工程

    • Build Settings中,不要直接构建APK。而是选择Build,并在弹出的窗口中将Build System设置为Gradle,同时勾选Export Project
    • 选择一个空文件夹作为导出路径,然后点击Export。这样会导出一个完整的Android Gradle工程目录,而不是一个APK文件。这个导出的工程文件夹,就是我们接下来要导入Android Studio进行“外科手术”的原材料。

注意事项: 透明背景在Unity编辑器的Game视图里是看不到效果的(会显示为棋盘格或黑色)。它的效果只有在打包后,运行在支持透明背景的Android窗口上时才能看到。因此,不要因为在编辑器里看不到透明背景而怀疑自己的设置。

5. Android Studio侧:悬浮窗外壳与权限管理

现在,我们有了一个“心脏”(Unity内容),需要为它打造一个“躯壳”(Android悬浮窗应用)。

5.1 导入Unity导出的工程并改造

  1. 用Android Studio打开: 打开Android Studio,选择Open,导航到你刚才用Unity导出的那个工程文件夹。Android Studio会将其识别为一个Gradle项目并同步。
  2. 理解工程结构: 导入后,你会看到熟悉的app模块目录。关键文件是src/main/AndroidManifest.xmlsrc/main/java/com.../UnityPlayerActivity.java(或类似名称)。
  3. 修改AndroidManifest.xml: 这是声明应用组件和权限的地方。
    <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.yourcompany.yourpet"> <!-- 1. 申请悬浮窗权限 --> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <!-- 对于Android 10 (API 29) 及以上,还需要这个权限来在前台启动服务(如果用到服务管理窗口) --> <uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> <!-- 2. 声明我们的主Activity,它将继承自Unity的Activity --> <application android:allowBackup="true" android:icon="@mipmap/app_icon" android:label="@string/app_name" android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"> <!-- 使用透明主题 --> <activity android:name=".MainActivity" android:exported="true" android:launchMode="singleTask" android:configChanges="orientation|keyboardHidden|screenSize" android:screenOrientation="portrait" android:theme="@android:style/Theme.Translucent.NoTitleBar"> <!-- Activity本身也透明 --> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <!-- 3. 保留UnityPlayerActivity,但可能不作为主入口 --> <activity android:name="com.unity3d.player.UnityPlayerActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" android:exported="false"/> </application> </manifest>
    注意,我们创建了一个新的MainActivity作为启动项,并为其和Unity的Activity都设置了透明主题。

5.2 创建悬浮窗服务与权限申请逻辑

我们不直接在Activity中创建悬浮窗,而是用一个Service来管理,这样即使应用退到后台,萌宠也能保持显示。

  1. 创建悬浮窗管理服务: 新建一个Java类,例如FloatingWindowService,继承自Service。在这个服务里:

    • onCreate()中获取WindowManager实例。
    • 创建悬浮窗的视图布局(一个简单的FrameLayout)。
    • 创建WindowManager.LayoutParams,这是核心,需要精细设置:
      WindowManager.LayoutParams params = new WindowManager.LayoutParams( WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT, Build.VERSION.SDK_INT >= Build.VERSION_CODES.O ? WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY : // API 26+ 使用此类型 WindowManager.LayoutParams.TYPE_PHONE, // API 26以下 WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE // 关键:不获取焦点,点击事件能穿透 | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS // 允许窗口超出屏幕 | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, // 非模态,触摸事件传递给后面的窗口 PixelFormat.TRANSLUCENT // 支持透明 ); params.gravity = Gravity.START | Gravity.TOP; // 初始位置 params.x = 100; params.y = 300;
    • 将Unity的UnityPlayer对象(即游戏视图)添加到这个悬浮窗布局中。
    • 最后,通过windowManager.addView(floatingView, params)将悬浮窗添加到屏幕上。
  2. 在MainActivity中处理权限和启动服务

    • MainActivityonCreate中,首先检查悬浮窗权限Settings.canDrawOverlays(this)
    • 如果没有权限,使用Intent跳转到系统设置页面引导用户开启:
      Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + getPackageName())); startActivityForResult(intent, OVERLAY_PERMISSION_REQUEST_CODE);
    • onActivityResult中回调检查,一旦权限获取,立即启动FloatingWindowService

5.3 将Unity视图嵌入悬浮窗

这是连接Android和Unity的最后一步,也是最容易出错的一步。

  1. 在服务中初始化UnityPlayer: 不能在Service里直接new UnityPlayer(this),因为UnityPlayer需要Activity上下文。通常的做法是,在MainActivity中初始化UnityPlayer(但保持其视图不可见或移除),然后将这个player实例传递给Service。
  2. 传递实例的替代方案: 更清晰的做法是,让FloatingWindowService启动一个透明的、专门用于承载Unity的Activity(即我们之前声明的那个UnityPlayerActivity),然后获取这个Activity中的UnityPlayer视图。但这涉及到复杂的生命周期同步。
  3. 简化方案(推荐给初学者): 一个相对稳定的简化架构是:
    • MainActivity负责申请权限。
    • 权限获取后,MainActivity启动一个全屏但完全透明的UnityPlayerActivity
    • 在这个透明的UnityPlayerActivity内部,在其onCreate中,不再将Unity视图附加到自己的布局上,而是创建一个WindowManager,直接将Unity视图作为悬浮窗添加。这样,Unity运行时就有了正确的Activity上下文,而显示层面又是由WindowManager控制的悬浮窗。
    • 完成后,MainActivity可以自行结束。

踩坑实录: 最大的坑在于WindowManager.LayoutParams的类型(type)和标志(flags)设置。TYPE_APPLICATION_OVERLAY是Android 8.0之后强制要求的,之前用TYPE_PHONETYPE_SYSTEM_ALERT。标志FLAG_NOT_FOCUSABLEFLAG_NOT_TOUCH_MODAL的组合,决定了悬浮窗是否拦截触摸事件。如果你希望点击萌宠能触发Unity的交互,而点击萌宠之外的地方能穿透到底下的应用,这个组合是关键。多试试不同的组合,并在真机上测试。

6. 构建、签名与真机调试

当代码整合完毕后,就到了最后的构建和测试阶段。

6.1 使用Gradle构建APK

在Android Studio中,确保app模块的build.gradle配置正确,特别是minSdkVersiontargetSdkVersion要与Unity中的设置一致。然后通过Build -> Build Bundle(s) / APK(s) -> Build APK(s)来生成调试版APK。

6.2 处理Unity与Android的编译依赖

如果你在Android端添加了新的库依赖(例如用于网络请求),需要在Unity导出工程前,将对应的.jar.aar文件放到Unity项目的Assets/Plugins/Android目录下,并配置好对应的AndroidManifest.xmlgradle模板文件。反之,Unity中用到的一些Android插件也需要这样处理。这是混合开发中资源管理的一个难点,需要仔细核对。

6.3 真机调试与问题排查

务必在真实的安卓手机上进行测试,模拟器对悬浮窗权限和窗口管理的支持可能不完整。

  1. 安装与权限引导: 首次安装APK后,打开应用,应立刻弹出引导前往设置开启悬浮窗权限的界面。确保这个流程顺畅。
  2. 检查悬浮窗显示: 开启权限返回后,萌宠应该立即出现在桌面上。如果没有,检查Logcat日志,重点过滤WindowManagerUnity以及你代码中的TAG,查看是否有权限错误或视图添加失败的信息。
  3. 测试交互与穿透: 点击萌宠身体部分,应该触发Unity中的动画(可以在Unity脚本中打印日志来确认)。点击萌宠周围或身体间隙,应该能触发下层应用(如桌面图标)的点击事件。
  4. 后台保活: 按Home键回到桌面,萌宠应该还在。清理后台任务后,萌宠可能会消失,这取决于系统对后台服务的管控策略(如MIUI、EMUI等定制系统)。要实现真正的保活,需要更复杂的进程守护、前台服务通知等手段,这超出了基础教程的范围,且需要平衡用户体验和系统资源。

7. 常见问题与排查技巧实录

这里汇总了开发过程中几乎一定会遇到的“坑”及其解决方案。

7.1 Unity相关问题

  • 问题:Unity打包后,在悬浮窗中显示黑屏或白屏,但日志正常。

    • 排查: 这几乎可以肯定是透明背景设置和渲染目标问题。请按顺序检查:
      1. 确认Unity摄像机背景Alpha为0。
      2. 确认Player Settings中Multithreaded Rendering已关闭。
      3. 确认Android端WindowManager.LayoutParams的格式设置为PixelFormat.TRANSLUCENT
      4. 在Unity中,检查是否有任何后处理效果或Image Effect在不支持透明的情况下被启用,尝试禁用它们。
      5. 创建一个最简单的Unity场景,只放一个带颜色的Cube,再次导出测试,以排除复杂场景或Shader的影响。
  • 问题:点击事件无法传递到Unity。

    • 排查: 检查Android端WindowManager.LayoutParamsflags。确保包含了FLAG_NOT_FOCUSABLE。如果设置了FLAG_NOT_TOUCHABLE,则所有触摸事件都会被屏蔽。确保UnityPlayer的视图是悬浮窗布局中唯一可交互的子视图,并且其大小覆盖了萌宠区域。

7.2 Android与权限问题

  • 问题:在Android 8.0 (API 26) 及以上版本,悬浮窗无法显示。

    • 解决: 必须使用WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY类型。在代码中做好版本判断:
      int type; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; } else { type = WindowManager.LayoutParams.TYPE_PHONE; } params.type = type;
  • 问题:权限申请后,Settings.canDrawOverlays(this)返回true,但悬浮窗仍然添加失败。

    • 排查
      1. 检查是否在Service或后台线程中添加视图。添加悬浮窗视图必须在主线程(UI线程)中进行。
      2. 检查WindowManager实例是否是通过getSystemService(WINDOW_SERVICE)获取的,并且是ApplicationActivity的上下文,而不是Service的上下文(有时有区别)。
      3. 查看Logcat错误信息,常见错误如permission denied for window type xxxx,说明类型设置不对;token null is not valid,说明上下文可能有问题。
  • 问题:应用在后台被系统杀死后,悬浮窗消失,且无法自动重启。

    • 分析: 这是Android系统自6.0以来日益严格的后台管理机制导致的,并非代码bug。尤其是国内各厂商的定制系统(小米、华为、OPPO、vivo等)都有强力的后台清理策略。
    • 缓解策略(非根治)
      1. 引导用户将应用加入“白名单”、“忽略电池优化”、“允许后台活动”等系统设置中。
      2. 使用startForegroundService()启动一个前台服务来管理悬浮窗,并显示一个持续的通知。这能大幅降低被杀的几率,但通知栏会常驻一个通知。
      3. 监听系统广播(如锁屏解锁、网络变化),尝试在应用被唤醒时重新创建悬浮窗。但这属于“打地鼠”式的补救,体验不完美。

7.3 性能与优化问题

  • 问题:萌宠在桌面上比较耗电。
    • 优化
      1. Unity端: 严格控制帧率。在Unity脚本的Start方法中,使用Application.targetFrameRate = 30;。对于桌面宠物,30FPS甚至15FPS都完全足够流畅,能显著降低GPU负载。
      2. 动画优化: 减少不必要的复杂粒子效果和实时阴影。使用简单的Sprite动画或骨骼动画。
      3. 逻辑更新频率: 不是所有逻辑都需要每帧更新。例如,检测手机状态(电量、时间)的代码,可以每5秒或10秒执行一次。

整个流程走下来,你会发现技术难点并不在于Unity的动画制作,也不在于Android的单一API调用,而在于将两个生态迥异的系统平滑地整合在一起,并妥善处理系统权限和兼容性。每一个环节的疏漏都可能导致最终效果失败。我的建议是,严格按照步骤搭建,每完成一个模块就进行真机测试,不要等到全部写完再联调。遇到问题时,善用Logcat和Unity的开发者控制台,大部分错误信息都能给你明确的指向。最后,保持耐心,桌面萌宠作为一个有趣的混合开发练手项目,当你最终看到自己创造的虚拟伙伴成功“住进”手机桌面时,那种成就感会让人觉得所有的折腾都是值得的。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/5 10:00:16

数据采集与隐私保护:从音视频流处理到算法公平性的技术实践

最近在跟进美国社会新闻时&#xff0c;发现几起事件背后都涉及到一个共同的技术支撑点&#xff1a;数据采集与记录。无论是地方执法记录仪的普及&#xff0c;还是联邦层面关于职场数据追踪的讨论&#xff0c;都离不开对技术工具如何影响公共治理、社会公平的思考。作为开发者&a…

作者头像 李华
网站建设 2026/8/5 9:59:44

TVA智能体的定义、特征、原理(15)

前沿技术探索&#xff1a;TVA智能体&#xff08;简称TVA&#xff0c;亦称“TVA视觉智能体”或“AI智能体视觉”&#xff09;是依托Transformer架构与“因式智能体”理论构建的通用视觉技术框架。它深度融合深度强化学习&#xff08;DRL&#xff09;、卷积神经网络&#xff08;C…

作者头像 李华
网站建设 2026/8/5 9:59:15

Linux下adb安装、管理与排错全指南:从基础配置到高效调试

1. 从一次设备调试的“卡壳”说起&#xff1a;为什么Linux下的adb管理是门必修课 那天下午&#xff0c;我正在为一个嵌入式开发板调试一个关键的传感器驱动。开发板通过USB连接到我的Ubuntu工作站&#xff0c;一切准备就绪&#xff0c;我习惯性地在终端敲下 adb devices &am…

作者头像 李华
网站建设 2026/8/5 9:57:25

Java项目集成金蝶ERP SDK实战:Maven依赖管理与核心接口调用

1. 项目概述与核心价值 最近在做一个企业内部的业务系统&#xff0c;需要和现有的金蝶ERP进行数据打通。老板给的需求很明确&#xff1a;把销售订单、客户信息、库存数据这些&#xff0c;从我们自己的Java系统里&#xff0c;自动同步到金蝶云星空里&#xff0c;省去人工来回导E…

作者头像 李华
网站建设 2026/8/5 9:53:39

大模型评测的潜规则:如何理性看待Benchmark榜单与模型能力

1. 项目概述&#xff1a;当“高考状元”遇上大模型最近几个月&#xff0c;大模型圈子里隔三差五就能看到新的“状元”诞生。某某模型在某个权威评测集上超越了GPT-4&#xff0c;某某国产模型在某个榜单上登顶全球第一。这些消息看得人眼花缭乱&#xff0c;兴奋之余&#xff0c;…

作者头像 李华
网站建设 2026/8/5 9:53:10

如何快速掌握锐龙处理器调试?SMUDebugTool完整使用指南

如何快速掌握锐龙处理器调试&#xff1f;SMUDebugTool完整使用指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://g…

作者头像 李华