文档中心>游戏多媒体引擎

Android & iOS 工程导出

最近更新时间:2025-12-26 17:08:51

我的收藏
说明:
该文档适用于 GME 3.X 版本 SDK,如需下载该版本的 SDK,请参考 GME 3.X SDK 下载指引
为方便 Unity 开发者调试和接入腾讯云游戏多媒体引擎产品 API,这里向您介绍适用于 Unity 开发的工程导出配置。

导出 iOS 平台

从 Unity 工程导出成 Xcode 工程时,需要对 GME 动态库进行处理,处理手段根据 Unity 版本的区别而有所不同。

步骤1. 动态库处理(Unity 2019及以上版本)

配置原理

新建一个 Editor OnPostprocessBuild 脚本,利用 UnityEditor.iOS.Xcode.Extensions.PBXProjectExtensions.AddFileToEmbedFrameworks,这个 API 会自动将动态库拷贝到最终出包 Bundle 的 framework 目录下,并为其签名。
业务层导入动态库的 framework 列表,如下图所示:


示例代码

可参见 Demo 工程中的 add_dylib.cs 脚本文件,根据自己工程需求将此部分代码放在工程中 Editor 文件夹下。
[UnityEditor.Callbacks.PostProcessBuild(1002)]
public static void OnPostprocessBuild (UnityEditor.BuildTarget BuildTarget, string path){
if (BuildTarget == UnityEditor.BuildTarget.iOS) {
UnityEngine.Debug.Log ("OnPostprocessBuild add_dylib:"+path);
#if UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX
{
string projPath = UnityEditor.iOS.Xcode.PBXProject.GetPBXProjectPath (path);
UnityEditor.iOS.Xcode.PBXProject proj = new UnityEditor.iOS.Xcode.PBXProject ();
proj.ReadFromString (System.IO.File.ReadAllText (projPath));
string targetGuid;
#if UNITY_2019_1_OR_NEWER
targetGuid = proj.GetUnityMainTargetGuid(); // 2019
#else
targetGuid = proj.TargetGuidByName (UnityEditor.iOS.Xcode.PBXProject.GetUnityTargetName ()); // 2018
#endif

string[] framework_names = {
"TXFFmpeg.framework",
"TXSoundTouch.framework",
};
for (int i = 0; i < framework_names.Length; i++)
{
string framework_name = framework_names[i];
string dylibGuid = null;
dylibGuid = proj.FindFileGuidByProjectPath("Frameworks/GMESDK/Plugins/iOS/" + framework_name);
if (dylibGuid == null) {
UnityEngine.Debug.LogWarning (framework_name + " guid not found");
} else {
UnityEngine.Debug.LogWarning (framework_name + " guid:" + dylibGuid);
UnityEditor.iOS.Xcode.Extensions.PBXProjectExtensions.AddFileToEmbedFrameworks(proj, targetGuid, dylibGuid);
proj.AddBuildProperty(targetGuid, "LD_RUNPATH_SEARCH_PATHS", "@executable_path/Frameworks");
System.IO.File.WriteAllText (projPath, proj.WriteToString ());
}
}
}
#endif
}
}

步骤2. 动态库处理(Unity 版本低于2019)

目前只有 Unity 2019 及以后版本可以使用 UnityEditor.iOS.Xcode.Extensions,如果是早期 Unity 版本,可以从高版本 Unity 导出 UnityEditor.iOS.Xcode 包给低版本 Unity 使用,或者直接参见附件 UnityEditorAV.iOS.XCode.zip将此文件解压后放置于工程目录 Editor 文件夹下。


步骤3. 导出 Xcode 工程

确保 Xcode 版本在10.0以上,在 Unity 编辑器中导出 Xcode 工程。

步骤4. 关闭 BitCode

如果编译过程中提示下图错误,请关闭 Bitcode。关闭此设置,只需在 Targets > Build Settings 中搜索 Bitcode 即可,找到相应选项,设置为 NO。


步骤5. 添加 iOS 平台权限

Required background modes:允许后台运行(可选)。
Microphone Usage Description:允许麦克风权限。

步骤6. 补充库文件

在编译过程中出现缺失系统库函数,请将库文件补全,库文件列表如下:
CoreTelephony.framework
CoreServices.framework

步骤7. 导出问题

导出问题请参见 iOS 导出问题 进行解决。

导出 Android 平台

步骤1. 删减 lib 文件

GME Unity SDK 默认提供 arm64-v8a、armeabi-v7a 、x86、x86_64四种架构的 lib 文件,请根据工程项目所需进行删减。
警告:
如果生成的 Android APK 缺失指定架构,则会导致 Crash。
如果导出可执行文件 apk 文件后,打开后黑屏闪退,一般为缺少相应架构的 lib 文件,请根据工程进行添加或者删减。

步骤2. 权限配置

为了保证 GME SDK 相关功能的正常使用,需要以下权限:
<uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> <uses-permission android:name="android.permission.BLUETOOTH"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
这些权限已经在GME Unity SDK Android 插件中配置,使用者不需要额外配置。

步骤3. 导出问题

导出问题请参见 Android 导出问题 进行解决。

导出 Windows 平台

导出问题请参见 Windows 导出问题 进行解决。