Unity解决报错“Too many field references: xxx; max is 65536” --Unity的Android端接入Firebase云推送小结。

Firebase云消息推送官方文档,自备梯子。
Unity接入Firebase云消息推送,有两种不同的情况。

  • easy模式,按照官方教材导入FirebaseMessaging.unitypackage,打包没报Too many field references: 70613; max is 65536这样的报错。恭喜你基本可以直接打包成功。
  • hard模式,打包报错Too many field references: 70613; max is 65536。如果你的unity版本是5.5之前,请先把unity升级到5.5或者更新。然后看下面的步骤。

一、在unity中启用multidex。

1、打开目录[UnityInstallationDirecory]\Editor\Data\PlaybackEngines\AndroidPlayer\Tools\GradleTemplates, 拷贝 mainTemplate.gradle文件到[ProjectName]\Assets\Plugins\Android目录。
2、 打开目录 [UnityInstallationDirecory]\Editor\Data\PlaybackEngines\AndroidPlayer\Apk, 拷贝AndroidManifest.xml文件到[ProjectName]\Assets\Plugins\Android目录。如果该目录已有AndroidManifest.xml文件,重命名为AndroidManifest1.xml。
3、 修改mainTemplate.gradle为:

// GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN
buildscript {
    repositories {
        jcenter()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:2.1.0'
    }
}

allprojects {
   repositories {
      flatDir {
        dirs 'libs'
      }
   }
}

apply plugin: 'com.android.application'

dependencies {
    compile 'com.android.support:multidex:1.0.1'
    compile fileTree(dir: 'libs', include: ['*.jar'])
**DEPS**}

android {
    compileSdkVersion **APIVERSION**
    buildToolsVersion '**BUILDTOOLS**'

    defaultConfig {
        multiDexEnabled true
        targetSdkVersion **TARGETSDKVERSION**
        applicationId '**APPLICATIONID**'
    }

    lintOptions {
        abortOnError false
    }
**SIGN**
    buildTypes {
        debug {
            jniDebuggable true
        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-unity.txt'
            **SIGNCONFIG**
        }
    }

    dexOptions {
    javaMaxHeapSize "4g"
    }

}

4、 修改AndroidManifest.xml为:


<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.unity3d.player"
    xmlns:tools="http://schemas.android.com/tools"
    android:installLocation="preferExternal"
    android:versionCode="1"
    android:versionName="1.0">
    <supports-screens
        android:smallScreens="true"
        android:normalScreens="true"
        android:largeScreens="true"
        android:xlargeScreens="true"
        android:anyDensity="true"/>

    <application
        android:theme="@style/UnityThemeSelector"
        android:icon="@drawable/app_icon"
        android:label="@string/app_name"
        android:name="android.support.multidex.MultiDexApplication">
        <activity android:name="com.unity3d.player.UnityPlayerActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            intent-filter>
            <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
        activity>
    application>
manifest>

5、将所有AndroidManifest的[android:debuggable=”true”]项移除。

二、使用Gradle Build方式接入helpshift。

如果你的游戏中接入了helpshift,请下载最新版本的helpshift,并参照这里重新接入。

三、更新工程内的依赖包到匹配Firebase版本。

FirebaseMessaging.unitypackage集成了unity-jar-resolver插件,会根据Assets\Firebase\Editor\AppDependencies.xml和Assets\Firebase\Editor\MessagingDependencies.xml文件自动下载Firebase要用的依赖包。但是别的sdk(例如helpshift、facebook和adjust等)的依赖包没法自动更新到对应版本,所以要添加OtherDependencies.xml文件到任意editor目录,里面配置需要更新的依赖包。例如我的OtherDependencies.xml:

<dependencies>
  <androidPackages>
    <androidPackage spec="com.android.support:appcompat-v7:26.1.0">
    androidPackage>
    <androidPackage spec="com.android.support:cardview-v7:26.1.0">
    androidPackage>
    <androidPackage spec="com.android.support:design:26.1.0">
    androidPackage>
    <androidPackage spec="com.android.support:recyclerview-v7:26.1.0">
    androidPackage>
    <androidPackage spec="com.android.support:support-vector-drawable:26.1.0">
    androidPackage>
    <androidPackage spec="com.android.support:transition:26.1.0">
    androidPackage>
  androidPackages>
dependencies>

四、Gradle Build

1、设置签名
Unity解决报错“Too many field references: xxx; max is 65536” --Unity的Android端接入Firebase云推送小结。_第1张图片
2、使用gradle工具打包
Unity解决报错“Too many field references: xxx; max is 65536” --Unity的Android端接入Firebase云推送小结。_第2张图片

至此大功告成。

你可能感兴趣的:(Unity,Firebase接入,云推送,gradle)