【发布时间】:2014-03-13 23:47:30
【问题描述】:
我最近将一个项目从 Eclipse/Ant 迁移到 Android Studio/Gradle。我能够在启用 proguard 的情况下成功构建项目的签名发布版本。但是,在测试发布版本时,我遇到了某些库项目和 jar 的崩溃(在构建调试版本时可以正常工作)。
例如,当尝试将文件上传到 Dropbox(一个 jar 依赖项)时,我收到以下错误:
java.lang.IncompatibleClassChangeError: interface not implemented
at com.dropbox.client2.session.AbstractSession.sign(SourceFile:238)
at com.dropbox.client2.DropboxAPI.putFileRequest(SourceFile:2199)
at com.dropbox.client2.DropboxAPI.putFileOverwriteRequest(SourceFile:1571)
at com.dropbox.client2.DropboxAPI.putFileOverwrite(SourceFile:1537)
另外,在尝试登录 Box(库项目依赖项)时,我收到以下错误:
java.lang.NoSuchMethodError: org.apache.http.conn.params.ConnManagerParams.setMaxTotalConnections
at com.box.restclientv2.BoxBasicRestClient.()
at com.box.boxjavalibv2.BoxRESTClient.()
at com.box.boxjavalibv2.BoxClient.createRestClient()
at com.box.boxjavalibv2.BoxClient.()
at com.box.boxandroidlibv2.BoxAndroidClient.(SourceFile:49)
at com.box.boxandroidlibv2.activities.OAuthActivity.startOAuth(SourceFile:71)
at com.box.boxandroidlibv2.activities.OAuthActivity.onCreate(SourceFile:52)
我还有其他运行良好的 jar 和库项目...
同样,在构建 gradle 调试版本(无 proguard)时,这些都没有问题。我还能够使用 ant 创建一个启用了 proguard 的发布版本,没有任何问题(能够登录 Dropbox 和 Box)。
有什么想法吗?
【问题讨论】:
-
看来添加 proguard 规则
-keep class org.apache.http.** { *; }已经“修复”了这两个崩溃。我对此还是有点不自在,因为当我用 Ant 构建项目时,不需要这个 proguard 规则。这条规则确实有道理,为什么它修复了 Box 崩溃的NoSuchMethodError,而不是 Dropbox 崩溃。谁能解释一下?
标签: android proguard dropbox-api box-api android-gradle-plugin