web-dev-qa-db-ja.com

フィールド参照が多すぎます:70613;最大は65536です

私のプロジェクトはこれらのプラグインを使用しています:

  • ワンシグナル
  • GooglePlayServices
  • 調整する
  • グーグルアナリティクス
  • Unity IAP
  • Facebook SDK

これらのプラグインは、ほぼすべてのプロジェクトで使用されます。

しかし、私はフィールド参照数を超えています

これは私の.aarファイルリストです List

参照カウントを減らすにはどうすればよいですか?

11
Kerem Bekman

参照カウントを減らすにはどうすればよいですか?

多くの機能/フィールドを持つ非常に多くのプラグインがあります。 Unityのエディターからこれをビルドする場合には制限があり、その制限に達しました。

参照カウントを減らすには、これらのプラグインをいくつか削除する必要がありますが、これらのプラグインが必要であり、この場合は削除が適切な解決策ではないことを確信しています。

only 実際にこれを回避してAndroid現時点でビルドするための方法は、export Project as Android Project then build with Android Studio。これにより、Unityのエディターによって課される参照制限が削除されます。


[〜#〜] edit [〜#〜]

エクスポート後にmultidexを有効にする必要があることを忘れていました。多くの人が毎日この問題を経験しているため、エクスポートしてこの問題を修正する方法について徹底した指示を追加することにしましたおよび、エクスポートせずに修正する方法

プロジェクトをエクスポートして修正する

1A.UnityプロジェクトをAndroid Project。

enter image description here

1B.Import into Android Studio:

enter image description here

Android以下のようなStudioにインポートするときにグレードエラーが発生する場合:

エラー:org.gradle.api.internal.tasks.DefaultTaskInputs $ TaskInputUnionFileCollectionをorg.gradle.api.internal.file.collections.DefaultConfigurableFileCollectionにキャストできません

enter image description here

build.gradleファイルの「buildscript」ブロックにある「dependencies」ブロックで、以下を変更します。

classpath 'com.Android.tools.build.gradle.2.1.0'

classpath 'com.Android.tools.build:gradle:2.2.3'

enter image description here


プロジェクトをエクスポートしても同じエラーが発生する場合は、multidexを手動で有効にする必要があります。以下は、エラーで表示されるGoogleの doc からの簡単な手順です。

2 .AndroidManifest.xmlファイルのapplicationタグにAndroid:name="Android.support.multidex.MultiDexApplication" >を追加します。

enter image description here


3 .build.gradleファイルの"dependencies"ブロックにcompile 'com.Android.support:multidex:1.0.1'を追加します。

enter image description here


4 .build.gradleの「Android」ブロックにある"defaultConfig"ブロックにmultiDexEnabled trueを追加しますファイル。

enter image description here

APKをビルドして、機能するかどうかを確認します。参照カウントエラーがなくなった場合は、ここで停止します。


5 。以下のようなGCオーバーヘッド例外を取得していますか?

Java.lang.OutOfMemoryError:GCオーバーヘッド制限を超えました

Dex操作を実行するときに使用されるヒープサイズを増やします。この solution から、build.gradleファイルの「Android」ブロックに次を追加します。

dexOptions {
    javaMaxHeapSize "4g"
}

enter image description here

プロジェクトをエクスポートせずに修正する

これを行うには、Unity 5.5以降が必要です。

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にコピーします


3.Visual StudioでコピーしたmainTemplate.gradleファイルとAndroidManifest.xmlファイルの両方を開き、 FIXからエクスポートして修正を行います。上記のPROJECT 命令。ステップをスキップ/無視#1A および#1B #2 から#5 へのステップを実行するだけです。それでおしまい。

This は最終的なものです mainTemplate.gradle は次のようになります this は最終的なものです AndroidManifest.xml は次のようになります。これは参照のみを目的としています。 mine は使用せず、代わりに上記のコピー手順に従って作成してください。Unityの将来のバージョンには異なるファイルが付属する可能性があるためです。必ず最新のものを使用するか、ビルドに問題がある可能性があります。


4.Build APKで動作するかどうかを確認します。

enter image description here

-

参照カウントエラーがなくなった場合は、ここで停止します。

5 。以下のようなエラーが発生しましたか?

Gradleを使用する場合、ビルド失敗リリースビルドに署名する必要があります

ちょうど signBuild SettingsPublishing Settingsからのapk。新しいキーストアを作成するか、既存のキーストアを使用できます。

enter image description here


6 。以下のような別のエラー?

エラー:デバッグモードをハードコーディングしないでください。省略すると、デバッグビルドとリリースビルドで1つの[HardcodedDebugMode]を自動的に割り当てることができます

Android:debuggable="true">ファイルからAndroidManifest.xmlを削除します。


この非エクスポートソリューションが機能しない場合は、エクスポートソリューションを使用する必要があります。

31
Programmer

IMO、受け入れられた答えは正しくありません(または部分的に正しいだけです)。 Androidスタジオは、この問題を「魔法のように」修正しません。また、私の経験から、エクスポートされたAndroidスタジオプロジェクトは、すぐにビルドされないことがあります。実際にビルドする前に多くのことを修正する必要があります。

多くのプラグインを使用しているため、64-kを超えるメソッドを参照できない Androidの制限 に直面しました。

これを解決するために試すことができることがいくつかあります。

  1. 可能であれば、これらのプラグインの一部を削除します(承認済みの回答で既に提案されているとおり)。
  2. multidex を使用します。これまでは、プロジェクトをAndroid studioにエクスポートしてそこにビルドすることによってのみ可能でした。Unity5.5以降では、Unityから直接Gradleを使用してプロジェクトをビルドできます。 Multidexを使用するようにゲームを構成するgradleファイル。これはメソッドのrefカウントを減らすことはありませんが、ネイティブJavaカウントを複数のdexファイルに分割することで回避します。
  3. ProGuard を使用します。UnityからGradleを使用できるため、使用されていないコードを実行および削除するようにProGuardを定義することもできます。
5
lysergic-acid