Help us understand the problem. What is going on with this article?

続・Multi-dex Support を使おう

More than 5 years have passed since last update.

前回の Multi-dex Support

はい。もうすでに以前書いた情報が古くなってしまったので、改めて書き直します。

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

https://developer.android.com/reference/android/support/multidex/MultiDexApplication.html

独自に 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からドメイン毎に独立してつまみ食いできるようになりましたので、適宜組み合わせていくとよいでしょう。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした