2016-04-05 10 views
1

ich ein Android App wie diese strukturiert haben:Android Abhängigkeit enthalten mehrere Male, verursacht App dex Grenze zu erreichen

Haupt-app/

dependencies { 
    compile project(':lib-A') 
    compile project(':lib-B') 
} 

lib-A/

dependencies { 
    compile 'Large3PLib' 
    compile 'Other-libs' 
} 

lib-B/

dependencies { 
    compile 'Large3PLib' 
} 

Wenn ich kompiliere Ich erreiche das Multi-Dex-Limit, und ich sehe, dass Main-App, Lib-A und Lib-B alle sehr große Dex-Zählungen haben, weil sie alle "Large3PLib" enthalten. Gibt es eine Möglichkeit, dass ich die Möglichkeit habe, "Large3PLib" nur einmal einzuschließen, um meine Dex-Anzahl zu verringern?

Anmerkungen:

  • Ich habe proguard
  • aktiviert habe ich versucht, den Code in Haupt-app, lib-A und lib-B in ein großes Modul kombiniert. Das bringt mich wieder unter das Multidex-Limit, aber ich mag diese Lösung nicht, da mein Code jetzt nicht mehr organisiert ist.

Antwort

0

Sie können lib-A und lib-B bearbeiten, um die Abhängigkeit markieren als ‚zur Verfügung gestellt‘:

provided 'Large3PLib' 

Das bedeutet, dass es in dem resultierenden Glas oder aar nicht enthalten sein. Aber dann werden Sie es zu dem Stammprojekt hinzufügen:

dependencies { 
    compile 'Large3PLib' 
    compile project(':lib-A') 
    compile project(':lib-B') 
} 
+0

Danke, eine Frage aber folgen: Einer meiner Bibliotheken nutzt Ressourcen (Strings, Themen, etc.) von ‚Large3PLib‘. Wenn ich von "kompilieren" zu "bereitgestellt" umschalte, kann es die Ressourcen nicht finden. Enthält "bereitgestellt" keine Ressourcen? – Chris

+0

enthält es beim Bauen, aber nicht beim Packen, also wird nichts, was von Large3PLib kommt, hinzugefügt. Deshalb müssen Sie es erneut auf der Root-Ebene hinzufügen. –