Android 仅在使用Proguard的释放模式下内存泄漏

Android 仅在使用Proguard的释放模式下内存泄漏,android,android-proguard,Android,Android Proguard,我有一个Android应用程序,在调试模式下运行良好,但在发布模式下有某种内存泄漏。基本上,速度非常慢,以下行在logcat中重复出现: dalvikvm D WAIT_FOR_CONCURRENT_GC blocked 91ms 如果我没有在proguard中进行混淆、缩小和优化,那么这个版本就可以运行了。如果我做了其中一个,我有这个错误。我使用以下行: -dontshrink -dontoptimize -dontobfuscate 我正在使用多个外部库,这些库使用一些本机(即JNI

我有一个Android应用程序,在调试模式下运行良好,但在发布模式下有某种内存泄漏。基本上,速度非常慢,以下行在logcat中重复出现:

dalvikvm  D  WAIT_FOR_CONCURRENT_GC blocked 91ms
如果我没有在proguard中进行混淆、缩小和优化,那么这个版本就可以运行了。如果我做了其中一个,我有这个错误。我使用以下行:

-dontshrink
-dontoptimize
-dontobfuscate
我正在使用多个外部库,这些库使用一些本机(即JNI)代码,我不知道会出什么问题

  • 如何确定问题的来源
  • 我可以告诉proguard只优化/收缩/模糊一个包,以便我可以尝试隔离问题吗

您可以使用Proguard配置文件中的类似说明告诉Proguard不要干扰(我指的是混淆)包和子包:

-keep class com.google.** { *; }
-keep class okio.** { *; }
您还可以告诉它使用特定注释对类进行注释,方法是:

-keep class com.your.annotation
-keep @com.your.annotation class * { *; }
第一个keep指令确保它不会删除注释本身,第二个keep指令保留任何带有注释的内容


可以找到完整的Proguard手册和其他示例。

但这不一定是内存泄漏,也许您只是在使用大数据。告诉它不要收缩,不要优化包和注释怎么样?“keep”是这样做的吗?@JonesV你必须检查文档。有几个不同的-keepxyz说明,其中一个可能涉及优化或收缩。