【问题标题】:parse.com not working after proguardparse.com 在 proguard 后无法正常工作
【发布时间】:2015-07-05 13:13:58
【问题描述】:

我在我的应用程序中使用 Parse.com 功能,在调试模式下一切正常。 一旦我在发布模式下生成一个签名的 apk,我在打开我的应用程序开始时有时会等待长达 10 秒。 很可能是因为 Parse.com 尝试初始化并联系其服务器,但显然没有成功。

而且,我知道 parse.com 停止工作,因为不会将任何数据上传到我的帐户中。

当然,Proguard 应该有问题,因为调试和发布模式之间的唯一区别是启用 proguard,就我而言。

我还尝试在我的 proguard 规则中使用以下代码保留 com.parse:

 #keep parse classes
-keepattributes Annotation,SourceFile,LineNumberTable
-dontwarn com.parse.**
-keep class com.parse.* { *; }
-keep class com.parse.** { *; }

任何帮助将不胜感激!

编辑:

我发现在 Proguard 之后 Parse.initialize() 发生了巨大的内存泄漏......但仍然不知道为什么! 当然,当 proguard 关闭时,这种内存泄漏是不存在的

【问题讨论】:

  • 我的问题是关于 Apache http-corehttp-mime,你有和我一样的库吗?如果是这样,请尝试将它们设为-dontwarn-keep class
  • @iSun 也许我的也应该是一样的,你能给我留下确切的路线来添加到 proguad 吗?
  • 当然,检查我的答案。

标签: android parse-platform proguard android-proguard


【解决方案1】:

如果您有 Apache http-corehttp-mime 以及 Parse 库,请尝试以下操作:

-keep class org.apache.** { *; }
-keep class com.parse.** { *; }

-dontwarn com.parse.**
-dontwarn org.apache.**
-dontwarn com.squareup.**

【讨论】:

  • 没有帮助,不幸的是!我发现在 Proguard 之后 Parse.initialize() 发生了巨大的内存泄漏......但仍然不知道为什么!
  • @MuhammadNaderi 你有强制关闭或 ANR 吗?如果是这样,请编辑您的问题并发布您的 logcat。
  • 不,只有在该应用程序正常工作后,长达 10 秒的白色冻结屏幕。即使 Parse.com 也可以,但 10 秒的白屏是不可接受的,方法校对表明这是因为 com.parse.ParseCommandCache.maybeRunAllCommandsNow 在 proguard 关闭时立即完成
  • @MuhammadNaderi 非常奇怪的情况,我认为这是 ANR;最好联系解析技术团队。
【解决方案2】:

对于 com.fasterxml.jackson 在下面添加 - 继续上课 com.fasterxml.jackson.databind。 对象映射器 { 民众 ; 受保护; } - 继续上课 com.fasterxml.jackson.databind。 对象编写器 { 公共 ** writeValueAsString(**); }

【讨论】:

  • 收到此错误:proguard.ParseException: Expecting opening '{' at 'ObjectMapper'
  • 改成这个-keep class com.fasterxml.jackson.databind.ObjectMapper { public <methods>; protected <methods>; } -keep class com.fasterxml.jackson.databind.ObjectWriter { public ** writeValueAsString(**); } 通过proguard错误,但主要问题依然存在!
【解决方案3】:

显然问题出在 Parse.com 库中的一些 ANR,正是当它试图读取其现金以同步以前未同步的数据或类似的东西时。

这是由于优化而发生的,因为使用

-dontoptimize

proguard 设置中的参数问题解决了,虽然我认为这不是一个好主意,并且应该有一种方法可以阻止 proguard 仅优化这个库。虽然我能找到的只是这个参数:

# keep parse classes
#-dontwarn com.parse.**
-keep class com.parse.** { *; }
-keep interface com.parse.** { *; }

#-dontwarn org.apache.**
-keep class org.apache.** { *; }
-keep interface org.apache.** { *; }

#-dontwarn com.squareup.**
-keep class com.squareup.** { *; }
-keep interface com.squareup.** { *; }

-keep class com.shygunsys.pocketcyber.techicalservices.parse.**



-keep class com.fasterxml.jackson.databind.ObjectMapper {
    public <methods>;
    protected <methods>;
}
-keep class com.fasterxml.jackson.databind.ObjectWriter {
    public ** writeValueAsString(**);
}

通过互联网和 SO 以防止 Proguard 优化 parse.com 库和解析使用的已知库,但正如我之前所说,没有 -dontoptimize 就没有运气 无论如何,如果我收到 Parse.com 开发人员和/或 Proguard 人员的回复,看看这是谁的错误,我会很高兴

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-02
    • 1970-01-01
    • 1970-01-01
    • 2018-06-12
    相关资源
    最近更新 更多