Dependencies reduzieren

  • Hallo Leute,


    ich habe folgende dependencies in meiner (app) gradle.build :


    Code
    dependencies {
        compile fileTree(include: ['*.jar'], dir: 'libs')
        testCompile 'junit:junit:4.12'
        compile 'com.android.support:appcompat-v7:23.3.0'
        compile 'com.android.support:design:23.3.0'
        compile 'com.google.android.gms:play-services:8.4.0'
        compile 'com.google.guava:guava:19.0'
    }

    Beim erstlelen der APK würde die Anzahl der Funktionen die 64k übersteigen:

    Zitat

    Error:The number of method references in a .dex file cannot exceed 64K.
    Learn how to resolve this issue at https://developer.android.com/tools/building/multidex.html


    Ich habe selbst in meinem Quellcode bei weiten nicht so viele Methoden. Weiterhin würde ich gerne aus den importierten dependencies nur das benötigte importieren.


    Beispielsweise benutze ich in com.android.support:design nur FloatingActionButton und Snackbar.
    Die Google Guava habe ich nur für Multimap eingebunden.


    Ich habe mal was mit

    Code
    compile 'com.android.support:design:23.3.0' {
       exclude ?
    }

    gelesen. Aber anstatt aufzuzählen was man nicht haben möchte, wäre es schöner nur das aufzuzählen, was man möchte. Jemand nen Tipp für mich? Thnx!

  • Also im Prinzip hast du zwei Problemchen.
    1. Du verwendest die allgemeine Lib für die PlayServices. Da ist natürlich alles drin von Fitnnesskram über Maps, bis hin zur Cloud. Du solltest die spezielle PlayServices Lib raussuchen die du benötigst und diese verwenden statt dem monsterpack wo alles drin ist.


    2. Anschließend kannst du dein APK minifizieren. Das erledigt ProGuard. Das ist ein Tool zur Nachbearbeitung von Android Projekten und ist im Buildsystem schon enthalten.


    Auf der Seite ist das nochmal ausführlich beschrieben: https://developer.android.com/studio/build/shrink-code.html
    Die minifizierung wird mit diesem Befehl im Gradlefile aktiviert:

    Code
    android {
        buildTypes {
            release {
                minifyEnabled true
                proguardFiles getDefaultProguardFile(‘proguard-android.txt'),
                        'proguard-rules.pro'
            }
        }
    }
  • Die Dependencies sind kein Problem. Die werden halt nur mitgebaut falls nötig.
    Interessanter ist die Frage, was Du importierst.

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Ich muss Marco da widersprechen, solang die Minifizierung nicht aktiviert ist, wird nicht nur das gepackt was gebraucht wird, sondern die komplette Dependency. Zuminidest ist mir keine Quelle bekannt, die das Gegenteil schreibt. Du kannst ja einfach mal testen ob Das Bauen mit Proguard nun funktioniert oder nicht.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!