2015-09-10 2 views
0

У меня есть собственная пользовательская библиотека, которую я использую для поддержки методов и классов, которые я хочу использовать в нескольких проектах. Он не скомпилирован в файл .jar - он настроен как com.android.library и находится в его собственной папке.Библиотека делает мой Android APK слишком большим

Одно из моих приложений очень мало - менее 500 тыс. Когда я добавил эту библиотеку, она взлетела до 1350 тысяч. Несмотря на то, что он по-прежнему мал, это проблема для этого конкретного приложения, которое я решил сделать как можно меньше.

Папка src для самого приложения - 77k. Папка src для проекта библиотеки - 112k. Файл .dex полученного apk имеет ровно 1 Мб. Как это возможно?

В библиотечном проекте делается ссылка play-services-vision. Однако в этом приложении он не упоминается, и я считаю, что Proguard следует его отключать.

В окне «Варианты сборки» как приложение, так и библиотека установлены в «release».

моего приложения в build.gradle файл:

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 22 
    buildToolsVersion "22.0.1" 

    defaultConfig { 
     //**CONFIG STUFF**// 
    } 
    buildTypes { 
     release { 
      minifyEnabled true 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
     debug { 
      minifyEnabled false 
      applicationIdSuffix '.debug' 
      versionNameSuffix '.debug' 
     } 
    } 
} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'com.android.support:appcompat-v7:22.2.1' 
    compile project(':farmsoftlibs') 
} 

Примечание: AppCompat ссылка также в старой версии моего приложения, которое было 500к, так что я знаю, что это не является главным виновником.

build.gradle

Мои библиотеки:

apply plugin: 'com.android.library' 

android { 
    compileSdkVersion 22 
    buildToolsVersion "22.0.1" 

    defaultConfig { 
     minSdkVersion 15 
     targetSdkVersion 22 
     versionCode 1 
     versionName "1.0" 
    } 
} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'com.google.android.gms:play-services-vision:7.8.0' 
} 

Так что мои вопросы, которые я думаю, мог бы решить эту загадку являются:

  1. Как мой APK больше, чем мой полный Java & разреш папки для приложения и библиотеки вместе, тем более что я использую Proguard?
  2. Есть ли что-то, что градлеет в моем проекте библиотеки, что делает мой apk больше?
  3. Как я могу убедиться, что в apk загружены только методы и классы библиотеки, которые использует мое приложение?

Дайте мне знать, если другой файл относится к ответом на этот вопрос. Благодаря!

+0

Вы используете некоторые библиотеки поддержки. Это нормально, и в любом случае 1М не слишком большой! –

ответ

0
  1. java файл компилируется в файл class перед упаковкой в, который, как правило, больше, чем java источника. Я не уверен, как вы проверяете размер своей библиотеки, но, пожалуйста, обратитесь к ответу на вопросы.
  2. compile 'com.google.android.gms:play-services-vision:7.8.0', такая зависимость может содержать более 1 бана из-за транзитивных зависимостей, то есть библиотека, которую вы использовали, зависит от 1 или больше библиотек, и они могут дополнительно зависеть и от других библиотек
  3. , если у вас есть minifyEnabled=true, и вы не изменили proguard-rules.pro на -keep ненужный класс или методы, он должен выполнить эту работу.

Дополнительную информацию по вопросам 2, с моим испытанием, compile 'com.google.android.gms:play-services-vision:7.8.0', по крайней мере, добавил 4 зависимостей play-services-vision, play-services-base, support-annotations и support-v4.

Кроме того, напомним, что с вашей конфигурацией proguard будет только убирать (удалять ненужные классы) в вашей сборке Release, но не Debug build.

Peronsal opnion: на самом деле 1.3MB следует считать очень маленьким уже

+0

Интересно, я не могу найти proguard-rules.pro на моем компьютере вообще. Будет ли эта калека Прогура? Предполагая, что видение и его 4 зависимости включены в файлы dex моего приложения, разумно ли предположить, что они будут удалены proguard или я не понимаю, как это работает? – Scott

+0

Если вы создали свой проект с помощью Android Studio, вы должны иметь его под своей папкой 'app' –

+0

Фактически он содержит только комментарии для нового проекта, поэтому вы можете просто создать пустой файл, чтобы его там положить, если он действительно отсутствует. –

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