Unity 使用 MultiDex 库

问题背景

当 Unity 导出 Android APK 时,如果项目使用了大量的第三方 SDK 或库,很容易达到 Android 方法数 65536 的限制。这是因为:

  • Android 的 DEX 文件格式限制每个 APK 最多包含 65536 个方法
  • 现代游戏开发中经常使用多个第三方 SDK
  • Unity 项目本身也会引入大量方法

开发环境

  • Unity 2022.3.46f1
  • Android Gradle Plugin 7.3.1
  • Android SDK 33
  • minSdkVersion 21
  • targetSdkVersion 33

MultiDex 解决方案

1. 基础配置

  1. 开启 Gradle 构建

    • 在 Unity 中:Edit > Project Settings > Player > Android
    • 勾选 “Custom Main Gradle Template”
    • 勾选 “Custom Gradle Properties Template”
  2. 配置 Gradle 文件

    • 路径:Assets/Plugins/Android/mainTemplate.gradle
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    
    android {
        defaultConfig {
            minSdkVersion 21
            targetSdkVersion 33
            multiDexEnabled true
            // 启用 R8 优化
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-unity.txt'
        }
    }
    

2. 依赖配置

  1. AndroidX 支持

    1
    2
    3
    4
    
    dependencies {
        implementation 'androidx.multidex:multidex:2.0.1'
        // 其他依赖...
    }
    
  2. 旧版支持库

    1
    2
    3
    4
    
    dependencies {
        implementation 'com.android.support:multidex:1.0.3'
        // 其他依赖...
    }
    

3. Application 配置

修改 Assets/Plugins/Android/AndroidManifest.xml

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.yourcompany.gamename">
    <application
        android:name="androidx.multidex.MultiDexApplication"
        android:allowBackup="true"
        android:icon="@drawable/app_icon"
        android:label="@string/app_name"
        android:theme="@style/UnityThemeSelector">
        <!-- 其他配置... -->
    </application>
</manifest>

性能优化

1. 启动优化

  1. 预加载配置

    1
    2
    3
    4
    5
    6
    
    android {
        defaultConfig {
            // 启用预加载
            multiDexKeepProguard file('multidex-config.pro')
        }
    }
    
  2. 主 DEX 配置

    • 创建 multidex-config.pro 文件
    • 指定需要预加载的类

2. 构建优化

  1. R8 优化

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    android {
        buildTypes {
            release {
                minifyEnabled true
                shrinkResources true
                proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-unity.txt'
            }
        }
    }
    
  2. DEX 优化

    1
    2
    3
    4
    5
    6
    7
    
    android {
        dexOptions {
            preDexLibraries true
            maxProcessCount 8
            javaMaxHeapSize "4g"
        }
    }
    

注意事项

  1. 版本兼容

    • Android 5.0 (API 21) 以上默认支持 MultiDex
    • 低版本需要额外配置
  2. 性能影响

    • 首次启动时间可能增加
    • 内存占用可能增加
    • 需要合理优化
  3. 调试建议

    • 使用 Android Studio 的 APK Analyzer
    • 监控启动时间
    • 检查内存使用

参考资源

57.12k 字
43篇文章