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为:

<?xml version="1.0" encoding="utf-8"?>
<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、设置签名
这里写图片描述
2、使用gradle工具打包
这里写图片描述

至此大功告成。

  • 2
    点赞
  • 1
    收藏 更改收藏夹
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MrYuen

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值