web-dev-qa-db-ja.com

新しいAndroid Multidexサポートライブラリでマルチインデックスを有効にする方法

新しいMultidexサポートライブラリを使用して、自分のアプリの1つのメソッド制限を超えたいと思います。

Android Lollipopにより、Googleはマルチデックスを容易にするマルチデックスサポートライブラリを発表しました。

このライブラリを使用してマルチデックスをサポートするアプリを構築するには、どのような手順が必要ですか?

127
Janusz

編集:

Android 5.0(APIレベル21)以降では、マルチインデックスをネイティブでサポートするARTを使用しています。したがって、minSdkVersionが21以上の場合、マルチインデックスサポートライブラリは必要ありません。


build.gradleを修正してください。

Android {
    compileSdkVersion 22
    buildToolsVersion "23.0.0"

         defaultConfig {
             minSdkVersion 14 //lower than 14 doesn't support multidex
             targetSdkVersion 22

             // Enabling multidex support.
             multiDexEnabled true
         }
}

dependencies {
    implementation 'com.Android.support:multidex:1.0.3'
}

単体テストを実行している場合は、これをApplicationクラスに含めます。

public class YouApplication extends Application {

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
    }

}

あるいは単にapplicationクラスにMultiDexApplicationを拡張させる

public class Application extends MultiDexApplication {

}

詳細については、これ をお勧めします。

261
Chad Bingham

マルチデクシングを開始するには、次の手順が必要です。

プロジェクトにAndroid-support-multidex.jarを追加します。 jarはあなたのAndroid SDKフォルダー/ sdk/extras/Android/support/multidex/library/libsにあります。

これで、アプリケーションアプリケーションクラスにMultiDexApplicationを拡張させることができます。

public class MyApplication extends MultiDexApplication

または、次のようにattachBaseContextをオーバーライドします。

protected void attachBaseContext(Context base) {
 super.attachBaseContext(base);
 MultiDex.install(this);
}

オーバーライドアプローチを使用したのは、アプリケーションクラスのクラス階層を混乱させることはないからです。

これでアプリはマルチデックスを使用する準備が整いました。次のステップは、gradleにマルチデクスapkの構築を説得することです。ビルドツールチームはこれをより簡単にするために取り組んでいますが、今のところあなたはあなたのアプリbuild.gradleのAndroid部分に以下を加える必要があります

   dexOptions {
      preDexLibraries = false
   }

そして、あなたのアプリbuild.gradleの一般的な部分への次の

afterEvaluate {
   tasks.matching {
      it.name.startsWith('dex')
   }.each { dx ->
      if (dx.additionalParameters == null) {
         dx.additionalParameters = ['--multi-dex']
      } else {
         dx.additionalParameters += '--multi-dex'
      }
   }
}

より詳しい情報は Alex Lipovsのブログ にあります。

43
Janusz

単純に、マルチインデックスを有効にするためには、あなたはする必要があります...

Android {
compileSdkVersion 21
buildToolsVersion "21.1.0"

defaultConfig {
    ...
    minSdkVersion 14
    targetSdkVersion 21
    ...

    // Enabling multidex support.
    multiDexEnabled true
}
...
}

dependencies {
implementation 'com.Android.support:multidex:1.0.0'
}

マニフェストファイルも変更する必要があります。マニフェストで、multidexサポートライブラリからMultiDexApplicationクラスを次のようにアプリケーション要素に追加します。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
   package="com.example.Android.multidex.myapplication">
   <application
       ...
       Android:name="Android.support.multidex.MultiDexApplication">
       ...
   </application>
</manifest>
17
smoothumut

あなたのbuild.gradleにこの依存関係を追加してください:

compile 'com.Android.support:multidex:1.0.1'

もう一度あなたのbuild.gradleファイルに次の行をdefaultConfigブロックに追加してください:

multiDexEnabled true

Applicationからアプリケーションクラスを拡張する代わりに、MultiDexApplicationから拡張します。好きです:

public class AppConfig extends MultiDexApplication {

今行ってもいいですよ!そしてあなたがそれを必要とするならば、すべてのMultiDexApplicationはします

public class MultiDexApplication extends Application {
    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
    }
}
9
MohammadReza

ステップ1:build.gradeを変更する

defaultConfig {
    ...
    // Enabling multidex support.
    multiDexEnabled true
}

dependencies {
    ...
    compile 'com.Android.support:multidex:1.0.0'
}

ステップ2:Applicationクラスの設定

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        MultiDex.install(this);
    }
}

ステップ3:grade.propertiesを変更する

org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

それが動作します!。ありがとう。

3
sonnv1368

まずProguardで試してみてください(これは未使用のすべてのコードを未使用)

Android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"

    defaultConfig {
        minSdkVersion 16
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"
        multiDexEnabled true
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
        }
    }
}
1
Moises Apaza Q

プロジェクトでマルチデックスを有効にしたい場合は、gradle.builderにアクセスしてください。

そしてこれをあなたの扶養家族に追加してください

 dependencies {
   compile 'com.Android.support:multidex:1.0.0'}

それからあなたは追加しなければなりません

 defaultConfig {
...
minSdkVersion 14
targetSdkVersion 21
...

// Enabling multidex support.
multiDexEnabled true}

次に、クラスを開いてApplicationに拡張します。アプリケーションが使用するApplicationクラスを拡張する場合は、oncrete()メソッドをオーバーライドして呼び出すことができます

   MultiDex.install(this) 

マルチインデックスを有効にします。

そして最後にマニフェストに追加する

 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
    package="com.example.Android.multidex.myapplication">
    <application
   ...
     Android:name="Android.support.multidex.MultiDexApplication">
   ...
   </application>
 </manifest> 
0
pavel

AndroidManifest.xmlに追加します。

Android:name="Android.support.multidex.MultiDexApplication" 

OR

MultiDex.install(this);

カスタムアプリケーションのattachBaseContextメソッド内

またはあなたのカスタムアプリケーションはMultiDexApplicationを拡張します

build.gradleにmultiDexEnabled = trueを追加します。

defaultConfig {
    multiDexEnabled true
}

dependencies {
    compile 'com.Android.support:multidex:1.0.0'
    }
}
0
Malik Abu Qaoud

build.gradle

multiDexEnabled true
implementation 'androidx.multidex:multidex:2.0.1'

AndroidManifest.xml

<application
    Android:name="androidx.multidex.MultiDexApplication"