5

У меня есть несколько библиотек в моем проекте, какУвеличивает ли зависимость библиотеки от 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' 
} 

и других библиотек. Они слишком сильно увеличивают размер приложения. В моем проекте у меня более 25 библиотек. Сейчас размер APK составляет 11 МБ, и я должен добавить в него больше функциональных возможностей. Что может быть причиной?

У меня есть вопросы, касающиеся этого.

Что занимает больше памяти?

  1. Модуль Добавлен в проект.
  2. Файл добавлен как файл JAR.
  3. Зависимость Gradle мы добавляем точно так же, как compile 'com.android.support:appcompat-v7:22.2.1'.

Я прочитал, что, включив Proguard, установка minifyEnabled true может уменьшить размер приложения.

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

Как они работают за рисунком?

Следует ли избегать использования нескольких библиотек в проекте?

Множество вопросов, на мой взгляд, уменьшает размер APK. Любое предложение и помощь будут заметны. Спасибо заранее.

ответ

6

Все три из этих методов будет увеличить размер вашего APK. Разница между ними заключается в том, где находится исходный код:

  • Зависимость от модуля - это исходный код на вашем локальном компьютере. Он скомпилирован в байт-код при создании приложения.
  • Файл JAR представляет собой предварительно скомпилированный байт-код. Он также находится на вашей локальной машине, но на самом деле это не исходный код. Байт-код просто добавляется к вашим собственным, когда вы создаете.
  • Зависимость Gradle в основном такая же, как при использовании JAR-файла, за исключением того, что Gradle будет загружать предварительно скомпилированный артефакт, вместо того, чтобы добавлять его в файл на локальном компьютере.

Независимо от вышесказанного, зависимость вносит свои классы в сборку, и они будут присутствовать в конечном выходе (APK).

Proguard делает несколько вещей, которые могут уменьшить размер вашего APK. Он может статически анализировать весь байт-код и удалять классы и методы, которые никогда не используются. Он также может переименовывать классы, поля и методы в меньшие идентификаторы, такие как «abc», что может немного уменьшить размер байт-кода.

+0

Спасибо за разъяснение.Пожалуйста, предложите несколько способов уменьшить размер. –

+0

@AnujSharma Вы уже используете proguard. 11MB не так много, сосредоточьтесь на создании своего приложения и функций, а затем беспокоитесь о размере APK позже (если вообще). – Karakuri

+0

@Karkuri: Спасибо, человек за вашу поддержку. –

2

Да, зависимости и вывод компиляции исходного кода проекта отправляются в dex для преобразования байт-кода и включения в окончательный APK.

С ProGuard, классы, которые не используются может быть систематически удалены

Смежные вопросы