打新版本 APK 时,我遇到了一个问题:应用启动后黑屏,日志提示 Unity 找不到对应的 Java 方法。这个版本的 C# 和 Java 代码都没有修改,构建配置却有一处变化:Android Gradle Plugin(AGP)从 8.2.2 升级到了 8.6.0。 排查后,我把问题定位到了 AGP 8.4 开始引入的库模块缩减行为变化。本文记录这个变化如何影响 Unity 导出工程,以及混淆规则应该放在哪里。 为什么没改代码,方法却找不到了? 这里升级的是 AGP 插件版本,要和 gradle-wrapper.properties 中的 Gradle 版本区分开。两者有关联,但不是同一个版本号。 AGP 8.4 发布说明提到:如…
阅读全文接入鸿蒙联合登录后,如果接口返回错误码 1002000001,很可能不是登录代码本身的问题,而是 OpenHarmony 工程中缺少正确的 App ID 或 Client ID。本文记录这个容易被忽略的配置问题,并说明如何在 AGC 中找到对应应用的参数。 问题现象 调用鸿蒙联合登录接口时返回: Code: 1002000001 如果登录接口已经能够正常发起,但随后立即返回该错误,可以优先检查应用身份参数。团结引擎项目中没有配置 App ID 和 Client ID,或者误用了 AGC 的项目级参数,都可能导致认证信息不匹配。 在团结引擎中配置应用参数 打开团结引擎的以下设置页面: Project Settings > Pla…
阅读全文将 Unity 项目迁移到 HarmonyOS 后,登录、支付、统计等第三方 SDK 通常需要在 ArkTS 层接入,再通过桥接接口与团结引擎中的 C# 代码通信。本文将梳理 entry 与 tuanjieLib 的职责,介绍本地 HAR 包和中心仓依赖的接入方式,并给出 C# 与 ArkTS 双向调用的基本写法。 接入前先理解模块职责 DevEco Studio 工程与 Android Studio 工程在模块组织上有一些相似之处。在 HarmonyOS 的 Hvigor 构建体系中,每个模块都是独立的编译单元,entry 和 tuanjieLib 分别拥有自己的 oh-package.json5。 entry:应用入口模块,承载…
阅读全文完成环境配置并成功导出 OpenHarmony 工程后,下一步是让游戏在模拟器或真机上稳定运行。本文主要围绕 DevEco Studio 调试展开,介绍设备文件与 HiLog 的查看方法、平台代码兼容、远程真机连接、Jenkins 构建注意事项,以及 Unity 日志转发到 HarmonyOS 原生层的实现。 本篇目标 经过上一篇的基础适配,项目已经可以导出 HAP,并在模拟器或真机中启动。不过,一些平台相关逻辑只会在运行阶段暴露问题,需要结合 DevEco Studio 日志与游戏内日志继续排查。 模拟器适合验证安装、启动和基础流程。因为目前在渲染层面上,鸿蒙模拟器没有对游戏有很好的支持。游戏的渲染效果、性能、设备能力及第三方 S…
阅读全文将已有 Unity 项目迁移到 HarmonyOS的第一步,是先让项目能在团结引擎中正常运行并成功导出 OpenHarmony 工程。本文从环境安装开始,依次梳理平台切换、基础代码适配、导出工程结构,以及包名、应用名、图标和模拟器等常用配置。 迁移背景 在将现有的 Unity 项目迁移到基于 OpenHarmony(鸿蒙)架构的团结引擎时,由于底层操作系统从 Android(AOSP)完全切换到了鸿蒙架构,很多历史遗留的 Android 逻辑、原生库以及打包配置都会失效并导致报错。 本系列将按照实际迁移顺序,介绍环境搭建、报错排查、SDK 适配和自动化构建等内容。 本篇先介绍环境准备与团结引擎的 ArkTS 工程结构。 环境与工具准…
阅读全文背景 阿里云在今年早些时候给后台发送了通知:我们原先接入的实人认证 SDK(RPSDK)即将停止服务,需要将这一功能迁移到金融级实人认证这个新 SDK。 Android 版本的升级很顺利,但 iOS 版本在过程中遇到了很多困难。其中最迷惑人的是”二次安装白屏”问题:只有首次运行可以在设备上正常运行,想覆盖安装就需要大退 Xcode。这个问题一度让我误以为是金融级实人认证 SDK 导致的,花了好久才确定了问题规律,其实它是 Xcode 调试的 bug,与 SDK 本身无关。 相关文档: 原有实人认证 SDK(RPSDK):https://help.aliyun.com/zh/id-verification/cloudauth/deve…
阅读全文前言 Codex 是 OpenAI 推出的编程助手客户端。如果希望让 Codex 使用 DeepSeek 提供的模型,可以通过 CC Switch 这类工具把 API Key 和接口地址配置进去,让客户端直接使用第三方模型服务。 CC Switch 可以方便地管理多个 AI 平台的密钥和接口地址等配置信息,支持一键切换,省去了反复修改配置文件的麻烦。 注:客户端和工具版本更新较快,不同版本的界面细节可能略有差异,配置思路是通用的。 准备工作 开始之前,需要准备好以下三样东西: Codex 客户端:https://openai.com/zh-Hans-CN/codex/ DeepSeek API Key:在 DeepSeek 开放平台…
阅读全文Google Play 要求所有 Unity 应用完成对 CVE-2025-59489 漏洞的修补,否则将无法通过审核。本文记录实际操作流程与注意事项。 背景 Unity 官方安全公告:https://unity.com/security/sept-2025-01 注意:虽然部分新版 Unity Editor 的更新日志中声称已内置修复,但实测使用 2022.3.62f3c1 提审 Google Play 时仍会收到不合规提示。因此,无论 Editor 版本如何,都建议使用 Unity 官方 Patch 工具进行修补。 修补工具 工具下载页面:https://unity.com/security/sept-2025-01/remed…
阅读全文本文档记录在 Windows 系统上从零配置 VS Code C++ 开发环境的全过程,包括编译、调试和运行。 前置条件 Windows 10/11 系统 已安装 VS Code(下载链接) 需要的工具 1. MSYS2 MSYS2 是一个 Windows 下的 Linux-like 环境,提供 g++ 编译器和 gdb 调试器。 下载链接:https://www.msys2.org/ 安装路径:推荐安装到 C:\msys64(默认路径) 2. VS Code 扩展 C/C++ 扩展:由 Microsoft 提供,支持 IntelliSense、调试等功能 在 VS Code 中搜索安装:ms-vscode.cpptools 安装步…
阅读全文程序模板 #include #include using namespace std; int main() { return 0; } 数学模板 公约数、公倍数 int gcd(int a,int b) // 最大公约数 { if(b==0) return a; else return gcd(b,a%b); } int lcm(int a,int b) // 最小公倍数 { return a/gcd(a,b)*b; } 素数 int prime(int b) // 素数 { for(int i=2;i<=(int)sqrt(b);i++) { if(b%i==0) return 0; } return 1; } 排列组合打…
阅读全文前言 捡起了好久没有更新的博客。 在AI 的帮助下,我完成了整个环境的重新搭建。 由于我使用的hexo 框架和版本都比较老了,所以有些地方可能不适应于新版本的主题,在接入时还请注意。 参考视频: https://www.bilibili.com/video/BV1xTgTemEDU/ 视频文档: https://xiamu-ssr.github.io/Hexo/2024/06/19/2024-H1/2024-06-19-12-31-52/ 准备工作 使用Github Actions 服务,将hexo 部署到 Github Pages。 与参考内容不同的是,我使用了两个仓库来实现。 参考内容中,使用了同一个项目,两个分支。其中一个分支…
阅读全文记录项目从旧版本升级到 Unity 2022 过程中遇到的几个典型问题及解决方案。 问题一:Package Manager 只有 Remove 按钮,无法下载 URP 现象:升级 Unity 版本后,打开 Package Manager,URP 包只显示 Remove,点击后也无法重新下载安装。 原因:原项目对 URP 进行过源码修改,升级后残留了本地嵌入式包目录: {项目根目录}/Packages/com.unity.render-pipelines.universal@xx.x.x 解决方案: 删除 Packages/ 目录下的 com.unity.render-pipelines.universal@xx.x.x 文件夹 从…
阅读全文Google Play 要求所有应用在 2026 年 5 月 31 日前完成 16 KB 内存页面大小适配。本文记录完整的检测与适配流程。 1. 背景 Android 15 引入了 16 KB 内存页面对齐要求,Google Play 强制要求应用中的所有 .so 文件满足以下三个条件: PT_LOAD segment 对齐 >= 16 KB RELRO 段必须位于 segment 末尾(suffix) RELRO 段末尾必须 16 KB 对齐 官方文档:Android 页面大小适配指南 2. 检测方法 2.1 方法一:NDK 工具手动检测 解压 APK 取出 .so 文件,使用 NDK 自带的 llvm-objdump 工具…
阅读全文新版 Xcode 工程中,包外存储(文件共享)选项的 GUI 入口被移除,需要手动修改 Info.plist 才能开启,方便在开发测试阶段通过 Finder / iTunes 访问应用沙盒中的文件。 背景 iOS 应用默认将数据存储在沙盒中,外部无法直接访问。开启文件共享后,用户可以通过 macOS Finder 或 iTunes 直接读写应用 Documents 目录下的文件,常用于: 测试阶段导出日志、存档文件 验证应用写入的资源是否正确 配置方法 方法一:直接修改 Info.plist 源码 打开 Xcode 工程中的 Info.plist,右键选择 Open As → Source Code,在 内添加以下两个键: UIFi…
阅读全文文件加载 使用LuaEnv中的DoString方法来执行Lua脚本。 因为创建一个LuaEnv相当于创建了一个lua虚拟机,所以一个游戏最好只有一个LuaEnv。 // 执行lua代码 env.DoString("print(\"Hello World\")"); // 通过文件执行lua代码 TextAsset ta = Resources.Load("Lua/helloworld.lua"); env.DoString(ta.text); // 通过默认Loader执行lua代码 env.DoString("require 'Lua/helloworld'"); // 通过自定义Loader执行lua代码 // require实…
阅读全文两年没有碰过Lua了,总觉得得要捡起来。现在从头到尾再过一遍,总结一些东西。之前根据菜鸟学的时候,使用了5.1.1的版本。与现在常用的版本相悖。因此这次我使用了:zerobrane studio,它可以方便切换版本,能实现很好的练习效果。 关于多行注释的安全问题 如果直接使用默认的--[[和--]]来进行多行注释的时候,如果遇到table包table的情况会直接结束注释: --[[ a = []; b = [a]; a[b[1]] a = 1 --]] 可以使用另一种方法来进行多行注释,避免这个问题: --[=[ a = []; b = [a]; a[b[1]] a = 1 ]=] 当然,最安全的方法还是使用IDE的快捷键进行注释.…
阅读全文简介 EFK 是三个开源软件的缩写,Elasticsearch,FileBeat,Kibana。其中 ELasticsearch 负责日志分析和存储,FileBeat 负责日志收集,Kibana 负责界面展示。它们之间互相配合使用,完美衔接,高效的满足了很多场合的应用,是目前主流的一种日志分析系统解决方案。 EFK 和 ELK 只有一个区别, 收集日志的组件由 Logstash 替换成了 FileBeat,因为 Filebeat 相对于 Logstash 来说有2个好处: 1.侵入低,无需修改 elasticsearch 和 kibana 的配置; 2.性能高,IO 占用率比 logstash 小太多 当然 Logstash 相比于…
阅读全文工作中,遇到了一个需求是要实现获得道具和货币的飞动效果: 根据道具的多少生成不同数目的道具 货币首先要有一个炸开的效果,然后向一个点汇集;道具从原位置沿直线飞过去 balabala 这里只讨论货币飞行路线的问题。 贝塞尔曲线(Bézier curve),又称贝兹曲线或贝济埃曲线,是应用于二维图形应用程序的数学曲线。PS中的钢笔工具就是使用贝塞尔曲线来绘制矢量曲线的。 这里使用简单的,四个点确定的贝塞尔曲线来实现飞行轨迹。首先p0和p3分别是移动的起点和终点。为了模拟爆炸效果,可以通过随机选取以p0为圆心,长度为R的圆上的点,调整曲线的第一次弯折位置实现。这一点定为P1。最后,根据P1点和P0点之间的关系,进行x轴或者y轴的修正,实现…
阅读全文在之前的工作中,我遇到了一个奇怪的问题。明明在语法上没有问题,找同事也看了,但是程序依旧会产生奇怪的错误。最后通过一步一步断点,定为了错误位置,才找到了造成这个错误的原因———在一个不需要分号的语言中,句末不加分号居然报错了。 不卖关子了,这个错误是多返回值函数造成了对上一句值的影响。下面举个例子: function func() { return [1, 2] } let b = 0 let c = 0 let a = 3 [b, c] = func(); console.log("a is :" + a) console.log("b is :" + b + " c is :" + c) 运行的结果将会是这样: a is :1,…
阅读全文11月底,腾讯云搞了一波双11返场活动,我买了三年的服务器。 和买了新的电脑或者做了新系统一样,得先把生产环境搞好。 距离Python2.x停止维护大概只有5个月了吧,所以第一要务是升级Python的版本。但是yum是依赖Python2的,所以升级还是会有一些顾虑的。下面是升级的过程: 下载、解压 wget https://www.python.org/ftp/python/3.8.0/Python-3.8.0.tgz tar -zxvf Python-3.8.0.tgz 安装编译环境 yum install make build-essential libssl-dev zlib1g-dev libbz2-dev yum inst…
阅读全文