UE4 使用AndroidGameDevelopmentExtension(AGDE)对安卓客户端做“断点调试”与“代码热更”
本文的目的
主要介绍了如何通过AndroidGameDevelopmentExtension工具、Visual Studio 2022来进行安卓包调试。
流程全过程
1、安装JDK、Gradle、Android NDK、Android SDK等环境如下,请自行前往官网下载,并确认环境参数配置正确。
2、安装 AndroidGameDevelopmentExtensionSetup-v22.2.69.exe 。`AndroidGameDevelopmentExtension`(AGDE)是一个UE4的插件,它提供了一些额外的功能,以方便在UE4中开发安卓游戏。
3、手机安装你需要调试的安卓包,注意你不能调试一个签名的APK。在后文的调试过程中,如果Rider上报错是:
package not debuggable: com.tencent.tmgp.dfm
那意味着,你需要更换为“非签名包”!
4、更新你的工程,使其和你下载的安卓版本的代码是一样的(例如,保持svn、git的Revision等一致);
5、安装AGDE后,需要重新generate一下工程;
6、连接手机,打开开发者模式,确保如下图:
7、重启VS,如有必要重启电脑;
8、切换为安卓平台 : Development Client | Android 。当然,如果你下载的包是Test,那么勾选Test Client | Android 。如果调试配置栏读取到了你的安卓设备,那么就正确。
9、该步骤不一定必要。编译打开工程的UE4 Editor,在编辑器里面接受Android SDK 证书,以及 Google play Services ,确保“平台文件可写”。确认下面界面中显示为绿色,而非红色。
10、直接点击绿色三角形(“Run”)按钮,确保能build完;
如果中间报错 cpu-features-patched.c 找不到,则从你的电脑上everything搜索一下,并拷贝。
11、你可能会遇到下面报错:
严重性 代码 说明 项目 文件 行 禁止显示状态 详细信息
错误 MSB3075 命令“G:\St\EngineSource\Engine\Build\BatchFiles\Build.bat 你的项目Client Android Test -Project="G:\St\你的项目Source\你的项目.uproject" -WaitMutex -FromMsBuild -Architectures=arm64 -ForceAPKGeneration”已退出,代码为 5。请验证您是否拥有运行此命令的足够权限。 你的项目 C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Microsoft\VC\v170\Microsoft.MakeFile.Targets 45
错误 cmd.exe failed with args /c "G:\St\你的项目Source\Intermediate\Android\arm64\gradle\rungradle.bat" --stacktrace :app:assembleDebug --init-script init.gradle --profile 你的项目 G:\St\你的项目Source\Intermediate\ProjectFiles\UnrealBuildTool 1
日志中出现错误
1>* What went wrong:
1>Execution failed for task ':app:packageDebug'.
1>> A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
1> > Unable to find EOCD signature
其中,EOCD Signature的含义是: 在安卓中,EOCD(End of Central Directory)签名是指在APK文件的结尾处的特定标识。EOCD签名用于标识APK文件的中央目录结束的位置,这个中央目录包含了APK文件中包含的所有文件和目录的索引信息。
根据 https://stackoverflow.com/questions/46763464/eocd-signature-not-found 的建议,要把“输出目录中的APK”都删除掉,如下面的apk,都需要删除掉,并重试。
12、使用ADB将生成的so推送到安卓设备上,命令如下:
adb shell run-as com.你的游戏名 mkdir /data/data/com.你的游戏名/files/libs/
adb push {电脑so的路径} /data/local/tmp/
adb shell run-as com.你的游戏名 cp /data/local/tmp/libUE4.so /data/data/com.你的游戏名/files/libs/
adb shell run-as com.你的游戏名 touch /data/data/com.你的游戏名/files/enable_hotfix_so.json
其中电脑里so的路径大概是: {你的工程路径}/Binaries/Android/你的游戏名Client-arm64.so
13、当编译成功后,会触发安装,此时要在手机上点一下安装按钮。
14、你可能会遇到这个弹窗:“Installation failed due to: "Failed to commit install session with command package install-commit . Error Package ”
答:事实上已经推送了so了,此时点击否,然后观察到手机APP显示如下图,此时不要点击“Force Close”,而是安静等待1分钟。等待过程将会看到VS显示Attaching。
14、此时就能熟悉地进行断点调试了。修改你的代码,例如加一行日志,然后重复上面的调试流程,就可以看到你的热更日志了。