最近,我将一个项目从Eclipse/Ant迁移到了Android /Gradle。我能够成功地构建一个有签名的版本的项目,并启用了保护程序。但是,在测试发行版时,我会从某些库项目和jars (在构建调试版本时工作得很好)获得崩溃。
例如,当试图将一个文件上载到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)我还有其他的罐子和图书馆项目可以正常工作..。
同样,在构建gradle调试版本时,这两个版本中的任何一个都没有问题。我还能够创建一个版本构建,使用ant启用了proguard,没有任何问题(能够同时登录到Dropbox和Box)。
有什么想法吗?
发布于 2014-03-25 17:46:53
您需要防止删除或重命名它无法确定的所有类和方法名称,这些名称是从它不处理的代码中引用的,这些代码是通过反射(例如-keep引用)引用的。
保留所有apache类可能会保持更多的必要(这是好的),但它可能不足以修复所有Proguard问题。
很好地问一问,为什么它在没有这个-keep的情况下从ant构建中工作。也许ant构建实际上并没有调用Proguard (ant是棘手的),可能它使用了不同的Proguard数据文件,或者相关的库在此期间发生了变化。您可以通过列出假设并对它们进行测试来调试它。例如,如果您将格式错误的命令放入Proguard数据文件中,然后运行ant build,则可以判断它是否实际运行Proguard。
https://stackoverflow.com/questions/22393406
复制相似问题