2015-08-28 4 views
1

У меня есть приложение для Android, которое хорошо работает в режиме отладки, но у него есть утечка памяти в режиме выпуска. В принципе, это очень медленно и следующая строка появляется несколько раз в LogCat:Утечка памяти только в режиме деблокирования с помощью Proguard

dalvikvm D WAIT_FOR_CONCURRENT_GC blocked 91ms 

Если я не запутать, не дают усадки и не оптимизируют в ProGuard, то релиз работает. Если я сделаю один из них, у меня есть эта ошибка. Я использую следующие строки:

-dontshrink 
-dontoptimize 
-dontobfuscate 

Я использую несколько внешних библиотек, которые используют некоторые родной (т.е. JNI) кода, и я понятия не имею, что может быть не так.

  • Как определить, откуда возникла проблема?
  • Могу ли я сказать proguard, чтобы оптимизировать/сжать/обфускать только один пакет, чтобы я мог попытаться изолировать проблему?
+0

Это не обязательно утечка памяти, хотя, возможно, вы просто используете большие данные. – EpicPandaForce

ответ

3

Вы можете сказать Proguard, чтобы не мешать, я имею в виду запутать, пакеты и подпакеты, используя инструкции, как это в файле ProGuard конфигурации:

-keep class com.google.** { *; } 
-keep class okio.** { *; } 

Вы также можете сказать это, чтобы держать классы аннотированные с конкретных аннотаций с помощью:

-keep class com.your.annotation 
-keep @com.your.annotation class * { *; } 

Первая инструкция Keep убеждается он не удаляет саму аннотацию, а второй держит ничего аннотированный с ним.

Полное руководство Proguard с другими примерами можно найти here.

+0

Как насчет того, чтобы говорить, чтобы не сокращать и не оптимизировать пакеты и аннотации? «Поддерживает» это? – JonesV

+0

@JonesV Вам нужно будет проверить документацию. Существует несколько различных инструкций -keepxyz, и один из них, вероятно, будет охватывать оптимизацию или сжатие. –

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

  • Нет связанных вопросов^_^