はい。もうすでに以前書いた情報が古くなってしまったので、改めて書き直します。
Multi-dex Support が一体なんぞやというのは前回の記事を参照してください。
準備
maven にサポートライブラリがあるので、依存関係にそれを追加します。
compile 'com.android.support:multidex:1.0.0'
また、ビルドツールは新しいものにしておきましょう。21.1.0 以降で公式にサポートされます。
buildToolsVersion "21.1.1"
defaultConfig
に以下を追記すると、Multi-dex Support が動作するようになります。
defaultConfig {
multiDexEnabled true
}
Multi-dex ではビルドプロセスで相当量のメモリを食います。また、minSdkVersion が 20 以前の場合、preDexLibraries が使えなくなりますので、以下のようにdexOptions
を書きます。
dexOptions {
preDexLibraries false
javaMaxHeapSize "2g" // ヒープの最大を 2GB にする
}
MultiDexApplication
独自に Application クラスを継承した Application クラスを持っていない場合は、AndroidManifest の <application>
にMultiDexApplication
を指定しましょう。
独自に Application クラスを持っている場合は、親を MultiDexApplication
にするか、ないしは自分で実装を移植しましょう。
実装自体は至極単純です。
public class MyApp extends Application {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
Multi-dex Support において最初の dex に含めなければならないクラスの扱いはビルドツールがよしなにやってくれるようになったので、自分たちで定義ファイルを用意する必要はなくなりました。
ProductFlavor を活用する
AndroidRuntime を標準搭載している Lollipop では、デフォルトで Multi-dex APK が扱えるように作られています。ですので、Lollipop 向けの ProductFlavor を用意することで、ビルドプロセスの最適化が図られ、若干ビルド時間が改善します。
productFlavors {
lollipop {
minSdkVersion 21
}
}
まとめ
Multi-dex Support を使う以外に、メソッド数上限を回避する方法にはこの記事にあるようなものもあります。
Google Play Services は6.5.87
からドメイン毎に独立してつまみ食いできるようになりましたので、適宜組み合わせていくとよいでしょう。