2016-03-17 3 views
2

У меня есть приложение для Android, которое поддерживает android> = 4. В отладочной компиляции он имеет> 65k методов, поэтому он является мультидексером. В выпуске я использую proguard, и он имеет 38k методов и не является мультидексером. Как я могу разработать приложение, которое в режиме отладки может привести к сбою, просто привести к более чем 65 тыс. Методам?android proguard в отладочных сборках?

Я тоже могу использовать proguard в отладочных сборках тоже, но не видел, чтобы кто-то это делал +, для компиляции потребовалось бы гораздо больше времени, используя proguard Как бы вы справились с этой ситуацией?

PS мой app.gradle выглядит (раздел DEPENDENCY в) этого:

 compile project(':signalr-client-sdk-android') 
     compile fileTree(include: ['*.jar'], dir: 'libs') 

     compile 'com.android.support:recyclerview-v7:+' 
     compile "com.nostra13.universalimageloader:universal-image-loader:${UNIVERSAL_IMAGE_LOADER}" 
     compile "de.hdodenhof:circleimageview:${CIRCLE_IMAGE_VER}" 
     compile "com.pixplicity.multiviewpager:library:${MULTIVIEW_PAGER_VER}" 
     compile "com.michaelpardo:activeandroid:${ACTIVE_ANDROID_VER}" 
     compile "com.squareup.okhttp:okhttp:${OKHTTP_VER}" 
     compile "com.rockerhieu.emojicon:library:${EMOJI_VERSION}" 
     compile "com.facebook.android:facebook-android-sdk:${FACEBOOK_SDK_VER}" 
     compile "com.makeramen:roundedimageview:${ROUNDED_IMAGEVIEW_VER}" 
     compile 'com.github.orangegangsters:swipy:[email protected]' 

     compile "com.google.android.gms:play-services-gcm:${GSM_VER}" 
     compile "com.google.android.gms:play-services-analytics:${ANALITICS_VER}" 

     compile "com.flurry.android:analytics:${FLURRY_VER}" 

     compile 'com.supersonic.sdk:mediationsdk:[email protected]' 

     //effects apng tool 
     compile project(':android_api') 
     compile project(':flingCards') 

     compile files('libs/protobuf-java-2.6.1.jar') 

И я использую все это LIBS

+0

Опубликовать свой мультимедийный код, я думаю, что вы только делаете multidex true в gradle. –

+0

Я не хочу делать приложение multidex! Он будет действовать flacky, мое приложение наверняка будет оставаться не multidex –

+0

Если вы не хотите делать приложение как multidex, то удалите некоторые файлы jar, которые не полезны для приложения и используют его. если вы используете игровые сервисы, то используйте определенную зависимость от игрового сервиса в градиенте. –

ответ

1

Вы можете использовать ProGuard в отладке тоже. Добавьте это в buildTypes:

debug { 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     minifyEnabled true 
     debuggable true 
     zipAlignEnabled true 
     jniDebuggable true 
    } 

Внутри вашего приложения build.gradle

+0

Я делаю это сейчас. Но компиляция занимает гораздо больше времени, и это проблема –

+0

Итак, я думаю, у вас есть только несколько вариантов, чтобы замедлить компиляцию с Proguard, а не компилировать или попробовать, если с multidex это не займет так много времени. Вариантов больше нет. –

+0

Или, может быть, вы можете попытаться уменьшить свои библиотеки, изменив их. Я вижу, что у вас есть «Универсальный загрузчик изображений» и библиотека «Просмотр изображения круга», если я не ошибаюсь, вы можете изменить их с помощью Glide. –

1

Я использую ProGuard в отладочных сборках. Мой build.gradle обычно работает на жидком выглядит следующим образом:

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

Обратите внимание на разный ProGuard файл (proguard-rules-debug.pro) для отладки, который имеет -dontobfuscate вариант добавлено.

Время, затрачиваемое на компиляцию с помощью proguard, составляет около 5-10% дольше, что приемлемо для меня. Я не использую мгновенный запуск, поэтому я не знаю, как это повлияло на это.

+0

Отличное решение. Благодарю. –