回答:
この回答は、Androidの公式ドキュメント(特に引用部分)に大きく依存しています。
UnityプロジェクトのMultidexサポートのセットアップ方法
Multidexとは:
Androidアプリケーション(APK)ファイルには、アプリの実行に使用されるコンパイル済みコードを含むDalvik実行可能(DEX)ファイル形式の実行可能バイトコードファイルが含まれます。Dalvik Executable仕様では、Androidフレームワークメソッド、ライブラリメソッド、独自のコード内のメソッドなど、単一のDEXファイル内で参照できるメソッドの総数を65,536に制限しています。この制限を超えるには、アプリのビルドプロセスを構成して、複数dex構成と呼ばれる複数のDEXファイルを生成する必要があります。
Multidexを使用する場合:
単一のDEXファイル内で参照できるメソッドの総数が65,536を超えた場合-Androidフレームワークメソッド、ライブラリメソッド、独自のコードのメソッドなど。
64Kの制限を回避する
64K以上のメソッド参照を使用できるようにアプリを構成する前に、アプリコードまたは含まれているライブラリで定義されたメソッドを含め、アプリコードによって呼び出される参照の総数を減らす手順を実行する必要があります。次の戦略は、DEX参照制限に達するのを防ぐのに役立ちます。
アプリの直接および推移的な依存関係を確認する確認します-アプリに追加するコードの量を上回る方法で、アプリに含める大きなライブラリ依存関係が使用されるようにします。一般的なアンチパターンは、いくつかのユーティリティメソッドが有用だったため、非常に大きなライブラリを含めることです。多くの場合、アプリコードの依存関係を減らすことで、DEX参照の制限を回避できます。
ProGuardを使用して未使用のコードを削除する - コードの縮小を有効にして、リリースビルドでProGuardを実行します。縮小を有効にすると、APKで未使用のコードが出荷されなくなります。
これらの公式のヒントは別として、Unityプロジェクトをビルドするときは、次の手順に従うとさらに役立ちます。
マルチdex構成を使用するようにアプリプロジェクトを設定するには、次の変更を行う必要があります。
minSdkVersionが21以上に設定されている場合、次に示すように、モジュールレベルのbuild.gradleファイルで設定
multiDexEnabled
するだけtrue
です。
android {
defaultConfig {
...
minSdkVersion 21
targetSdkVersion 26
multiDexEnabled true
}
...
}
ただし、
minSdkVersion
が20以下に設定されているは、次のようにmultidexサポートライブラリを使用する必要があります。3.1。次に示すように、モジュールレベルのbuild.gradleファイルを変更してmultidexを有効にし、multidexライブラリを依存関係として追加します。
android {
defaultConfig {
...
minSdkVersion 15
targetSdkVersion 26
multiDexEnabled true
}
...
}
dependencies {
compile 'com.android.support:multidex:1.0.1'
}
3.2。Applicationクラスをオーバーライドするかどうかに応じて、次のいずれかを実行します。
Application
クラスをオーバーライドしない場合は、マニフェストファイルを編集して、次のようにタグに設定android:name
し<application>
ます。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp">
<application
android:name="android.support.multidex.MultiDexApplication" >
...
</application>
</manifest>
Application
クラスをオーバーライドする場合は、MultiDexApplication(可能な場合)を拡張するように次のように変更します。
public class MyApplication extends MultiDexApplication { ... }
- または、Applicationクラスをオーバーライドしてもベースクラスを変更できない場合は、代わりにattachBaseContext()メソッドをオーバーライドし、MultiDex.install(this)を呼び出してmultidexを有効にすることができます。
public class MyApplication extends SomeOtherApplication {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
他のプラグインマニフェストのエラーを確認し、プロジェクトをクリーンアップし、syscを再度実行します。
プロジェクトに依存関係の問題がある場合は、Androidターミナルでこのコマンドを実行します
% Gradle clean App."App name"
Application Gradleの依存関係の下にこれらの依存関係をコピーします。
compile fileTree(include: ['*.jar'], dir: 'bin')
compile fileTree(include: ['*.jar'], dir: 'libs')
メインプロジェクトGradleにsigningConfigを追加します。
または、手動で署名モードをデバッグモードに設定し、[ファイル]-> [プロジェクト構造]-> [モジュール]でプロジェクトをクリックし、[ビルドタイプ]で[デバッグ]-> [署名構成の選択]-> [デバッグ]
Gradleを同期して、プロジェクトをビルドします。
ユニティを通じて直接マルチデックス対応のゲームを作成するのに役立つこのリンクを使用することをお勧めします。
https://medium.com/@abhpatidar/solving-unity-dex-issue-538e134c8809
注:これにより、Unity自体でMultidexのみが有効になります(Multidexの問題を修正する必要があります)。gradleに関連する問題は修正されません。