2015-08-28 15 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 * { *; } 

第一限制指令确保它不会删除注释本身,第二个保持任何与它注释。

带有其他示例的完整Proguard手册可以在here找到。

+0

告诉它不缩小和不优化包和注释是什么? “保持”这样做吗? – JonesV

+0

@JonesV你必须检查文档。有几个不同的-keepxyz指令,其中一个可能会覆盖优化或缩小。 –