5

mam wiele bibliotek w moim projekcie jakCzy zwiększa się zależność biblioteki APK?

dependencies { 
    compile files('libs/universalloaderlibrary.jar') 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'com.android.support:appcompat-v7:22.2.1' 
    compile 'com.android.support:design:22.2.1' 
    compile 'com.android.support:recyclerview-v7:22.2.1' 
    compile 'com.android.support:cardview-v7:22.2.1' 
    compile 'de.hdodenhof:circleimageview:1.3.0' 
    compile 'com.jakewharton:butterknife:7.0.1' 
    //noinspection GradleCompatible 
    compile 'com.google.android.gms:play-services-gcm:7.3.0' 
    compile 'com.github.castorflex.smoothprogressbar:library:1.1.0' 
    compile 'com.google.code.gson:gson:2.2.4' 
    compile 'com.loopj.android:android-async-http:1.4.8' 
    compile 'com.android.support:multidex:1.0.1' 
} 

i innych bibliotek. Czy zwiększają one zbyt duży rozmiar aplikacji. Mam więcej niż 25 bibliotek w moim projekcie. Teraz rozmiar pliku APK wynosi 11 MB i muszę w nim dodać więcej funkcji. Jaki może być tego powód?

Mam kilka pytań na ten temat.

Co zajmuje więcej pamięci?

  1. Moduł dodany w projekcie.
  2. Plik dodany jako plik JAR.
  3. Zależność od Gradle dodajemy tak jak compile 'com.android.support:appcompat-v7:22.2.1'.

Czytałem, że poprzez umożliwienie Proguard ustawienie minifyEnabled prawda może zmniejszyć rozmiar aplikacji.

buildTypes { 
     release { 
      minifyEnabled true 
      shrinkResources true 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
} 

Jak działają za obrazem?

Czy powinniśmy unikać używania wielu bibliotek w projekcie?

Mam na myśli wiele pytań dotyczących zmniejszania rozmiaru pliku APK. Wszelkiego rodzaju sugestie i pomoc byłyby znaczące. Dzięki z góry.

Odpowiedz

6

Wszystkie trzy z tych metod będzie zwiększyć rozmiar pliku APK. Różnica między nimi polega na tym, gdzie znajduje się kod źródłowy:

  • Zależność modułu jest kodem źródłowym na komputerze lokalnym. Jest kompilowany do kodu bajtowego podczas budowania aplikacji.
  • Plik JAR jest wstępnie skompilowany przez kod bajtowy. Jest również na twoim lokalnym komputerze, ale tak naprawdę nie jest to kod źródłowy. Kod bajtowy jest po prostu dodawany do własnego przy tworzeniu.
  • Zależność Gradle jest w zasadzie taka sama jak w przypadku pliku JAR, z tym że Gradle pobierze skompilowany artefakt, zamiast dodawać go jako plik na lokalnym komputerze.

Niezależnie od powyższego, zależność wnosi swoje klasy do kompilacji i będą one obecne w końcowym pliku wyjściowym (APK).

Program Proguard wykonuje kilka czynności, które mogą zmniejszyć rozmiar pliku APK. Może statycznie analizować cały kod bajtowy i usuwać klasy i metody, które nigdy nie są używane. Może również zmieniać nazwy klas, pól i metod na mniejsze identyfikatory, takie jak "abc", które mogą nieco zmniejszyć rozmiar kodu bajtowego.

+0

Dzięki za wyjaśnienie.Proszę zasugerować kilka sposobów na zmniejszenie rozmiaru. –

+0

@AnujSharma Już używasz proguard. 11 MB to niewiele, skup się na budowaniu aplikacji i funkcji, a później na problemie z pakietem APK (jeśli w ogóle). – Karakuri

+0

@Karkuri: Dzięki za wsparcie. –

2

Tak, zależności plus dane wyjściowe kompilacji kodu źródłowego projektu są wysyłane do formatu dex w celu konwersji kodu bajtowego i uwzględnienia w ostatecznym pliku APK.

Z PROGUARD, zajęcia, które nie są wykorzystywane mogą być systematycznie usuwane

Powiązane problemy