Supporto per Android multidex implementazione di libreria

Mi hanno colpito la magia dex limite perché la mia applicazione utilizza un sacco di barattoli (auto API, greendao, testo in pdf, il supporto.. ).

La mia soluzione attuale è che ho letteralmente creato una seconda apk solo per google drive, che ho chiamato dalle principali apk. Ma ora ho scoperto che android finalmente supporta questa con questa libreria. Il mio problema è solo che non so come implementarlo(preferibilmente senza gradle). Non riesco a trovare un buon tutorial per farlo.

Okey sto perdendo la mia mente cercando di implementare questo… ho trovato questo

E ho aggiunto:

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

A mio file manifesto e

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

Al mio mainactivity.java

Installato anche gradle plugin per eclipse, esportato gradle per arrivare a costruire.gradle file che ho modificato:

apply plugin: 'android'

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    compile project(':android-support-v7-appcompat')
    compile project(':Sync')
    compile project(':gdrive:google-play-services_lib')
}


android {
    compileSdkVersion 14
    buildToolsVersion "21.1.1"


    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src-gen','src']
            resources.srcDirs = ['src-gen','src']
            aidl.srcDirs = ['src-gen','src']
            renderscript.srcDirs = ['src-gen','src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }

        //Move the tests to tests/java, tests/res, etc...
        instrumentTest.setRoot('tests')

        //Move the build types to build-types/<type>
        //For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
        //This moves them out of them default location under src/<type>/... which would
        //conflict with src/being used by the main source set.
        //Adding new build types or product flavors should be accompanied
        //by a similar customization.
        debug.setRoot('build-types/debug')
        release.setRoot('build-types/release')
    }

    dexOptions {
      preDexLibraries = false
   }
}

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

Ma L’errore è sempre lo stesso 🙁

 

3 Replies
  1. 19

    Il Blog era la vecchia soluzione.

    Con Android Studio 0.9.2 & Gradle Plugin 0.14.1, è solo bisogno di:

    1. Aggiungere AndroidManifest.xml:

    .

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

    o

    Aggiungere

    MultiDex.install(this);

    personalizzata dell’Applicazione attachBaseContext metodo

    o la tua Applicazione personalizzata estendere MultiDexApplication

    1. aggiungere multiDexEnabled = true nella compilazione.gradle

    .

    android {
        defaultConfig {
            ...
            multiDexEnabled = true
        }
    }

    Fatto.

    Mi dispiace per il mio povero inglese

    Risorse Correlate Di:

    http://developer.android.com/tools/building/multidex.html

    https://plus.google.com/+XavierDucrohet/posts/1FnzwdcBnyC

  2. 16

    Ci sono alcune cose che dovete fare,

    1 – Nel tuo gradle è necessario specificare multidex e aggiungere la libreria di supporto:

    android {
        defaultConfig {
            ...
            multiDexEnabled true
            ...
        }
    }
    
    dependencies {
      ...
      compile 'com.android.support:multidex:1.0.0'
      ...
    }

    2 – In il manifesto è necessario impostare l’applicazione per una multidex applicazione:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.package.name">
        <application
            ...
            android:name="com.package.name.my_application">
            ...
        </application>
    </manifest>

    3.1 – classe di applicazione, si dovrà estendere MultiDexApplication:

    public class my_application extends MultiDexApplication
    {
        ...
    }

    3.2 – O Annullare i attachBaseContext() metodo:

    public class my_application extends Application
    {
        protected void attachBaseContext(Context base)
        {
            super.attachBaseContext(base);
            MultiDex.install(this);
        }
    }

    Limiti di multidex libreria di supporto

    Il multidex support library ha alcune limitazioni che si dovrebbe essere a conoscenza e di prova per quando si incorporano nel vostro app di configurazione di costruzione:

    • L’installazione di .i file dex durante l’avvio su un dispositivo partizione dati è complessa e può comportare l’Applicazione Non Risponde (ANR) errori se il secondario dex file sono di grandi dimensioni. In questo caso, si dovrebbe applicare il codice restringimento tecniche di ProGuard per ridurre al minimo la dimensione del file dex e rimuovere le porzioni di codice.
    • Applicazioni che utilizzano multidex non può iniziare su dispositivi che eseguono versioni della piattaforma precedenti di Android 4.0 API (livello 14) a causa di un Dalvik linearAlloc bug (Problema 22586). Se si prendono di mira i livelli delle API prima di 14, assicurarsi di eseguire il test con queste versioni della piattaforma come l’applicazione può avere problemi all’avvio o quando particolari gruppi di classi vengono caricate. Codice di compattazione può ridurre o possibilmente eliminare questi potenziali problemi.
    • Le applicazioni che utilizzano un multidex configurazione che rendono molto grande allocazione di memoria richieste potrebbe bloccarsi durante la fase di esecuzione a causa di un Dalvik linearAlloc limite di Emissione 78035). Il limite di assegnazione è stato aumentato in Android 4.0 API (livello 14), ma le applicazioni possono essere eseguite in questo limite su Android con versioni precedenti di Android 5.0 API (livello 21).
    • Ci sono complessi requisiti in materia di quali classi sono necessari primaria dex file eseguendo in runtime Dalvik. Android costruire utensili aggiornamenti gestire Android requisiti, ma è possibile che altre librerie incluse ulteriori requisiti di dipendenza, compreso l’uso di introspezione o invocazione di metodi in Java dal codice nativo. Alcune librerie non può essere in grado di essere utilizzato fino a quando il multidex strumenti di costruzione sono aggiornati per consentire di specificare le classi che devono essere inclusi nel primario dex file.

    risorse: http://developer.android.com/tools/building/multidex.html

    • Questo può essere fatto in eclipse o solo in android studio?
    • Google ha smesso di sostenere Eclipse ADT. Quindi è possibile fare questo con eclipse, ma Android Studio è la via da seguire. Io ti consiglio di esportare il tuo progetto per Android Studio: developer.android.com/sdk/installing/migrate.html
    • perché il mio progetto è di 40.000 linee + e include diverse biblioteche come greenDAO sono haveing estrema difficoltà migrazione di android studio, che è il motivo per cui vorrei fare questo in eclipse, ma mi sono imbattuto in un sacco di problemi a fare che. Non si conosce la soluzione per fare questo è eclipse?
    • Vale la pena di migrare manualmente il vostro progetto
    • Ho trascorso 3 giorni cercando di farlo senza fortuna e dato che io sto facendo questo su companys soldi che ho appena cant perdere più tempo. Se si dispone di una soluzione su come fare questo in eclipse vorrei davvero apprezzare.
    • Step 1, Download android studio. Passo 2, Creare un nuovo progetto Android studio con lo stesso nome del pacchetto. Step 3, copy all the classes and resources from the eclipse project folder into the android studio. Punto 4, premere il pulsante esegui.
    • Cerchiamo di continuare questa discussione in chat.
    • qui (developer.android.com/intl/ja/tools/support-library/…) si dice che si deve aggiungere il multidex lib a voi gradle. Non dicono che si dovrebbe aggiungere Multidex.l’installazione(questo), come mostrato da Nicolas. Sarebbe utile se l’Android Dev documentazione aggiungere che l’info 🙂 Grazie Nicolas per segnalarlo.
    • Eclipse non IDE , è solo un editor di testo . la migrazione da eclipse per android studio quando dare +65K id . non perdete il vostro tempo . basta eseguire la migrazione .

  3. 2

    Secondo la documentazione in https://developer.android.com/studio/build/multidex.html#avoid

    Se sei minSdkVersion è 21 e sopra, tutto quello che dovete fare è

    android {
        defaultConfig {
            ...
            minSdkVersion 21 
            targetSdkVersion 25
            multiDexEnabled true
        }
        ...
    }

    se sei minSdkVersion è 20 o al di sotto, è necessario utilizzare il supporto di
    biblioteca

    android {
        defaultConfig {
            ...
            minSdkVersion 15 
            targetSdkVersion 25
            multiDexEnabled true
        }
        ...
    }
    
    dependencies {
      compile 'com.android.support:multidex:1.0.1'
    }

    Con

    <?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>

Lascia un commento