apk创建的Proguard问题

时间:2013-05-15 13:29:02

标签: java android eclipse duplicates proguard

好的,这让我疯狂了一天。我主要是一个iOS人,所以我不太了解Proguard和东西。我制作了一款包含Dropbox和Google Drive API的Android应用。如果我通过Eclipse在手机上部署它,该应用程序工作得很好但是当我尝试导出用于apk文件生成的应用程序时,我在控制台上遇到了一个令人讨厌的错误。 我的project.properties文件是这样的......

# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt:proguard-google-api-client.txt

# Project target.
target=android-17
android.library=false

错误对话框就是这个...... PROJECT_FOLDER_NAME / proguard-project.txt不存在或不是常规文件

所以我编辑了我的project.properties并删除了 proguard-project.txt 部分。

现在在创建apk时我在控制台上收到这些错误......

[2013-05-15 18:48:28 - BackMyAppUp] Proguard returned with error code 1. See console
[2013-05-15 18:48:28 - BackMyAppUp] Note: there were 367 duplicate class definitions.
[2013-05-15 18:48:28 - BackMyAppUp] Warning: org.apache.commons.logging.impl.ServletContextCleaner: can't find superclass or interface javax.servlet.ServletContextListener
[2013-05-15 18:48:28 - BackMyAppUp] Warning: org.apache.http.entity.mime.FormBodyPart: can't find superclass or interface org.apache.james.mime4j.message.BodyPart
[2013-05-15 18:48:28 - BackMyAppUp] Warning: org.apache.http.entity.mime.HttpMultipart: can't find superclass or interface org.apache.james.mime4j.message.Multipart
[2013-05-15 18:48:28 - BackMyAppUp] Warning: org.apache.http.entity.mime.MinimalField: can't find superclass or interface org.apache.james.mime4j.parser.Field
[2013-05-15 18:48:28 - BackMyAppUp] Warning: org.apache.http.entity.mime.content.AbstractContentBody: can't find superclass or interface org.apache.james.mime4j.message.SingleBody
[2013-05-15 18:48:28 - BackMyAppUp] Warning: org.apache.http.entity.mime.content.ContentBody: can't find superclass or interface org.apache.james.mime4j.message.Body
[2013-05-15 18:48:28 - BackMyAppUp] Warning: org.apache.http.entity.mime.content.ContentBody: can't find superclass or interface org.apache.james.mime4j.descriptor.ContentDescriptor
[2013-05-15 18:48:28 - BackMyAppUp] Warning: library class android.net.http.AndroidHttpClient extends or implements program class org.apache.http.client.HttpClient
[2013-05-15 18:48:28 - BackMyAppUp] Warning: com.google.android.gms.auth.GoogleAuthUtil: can't find referenced class com.google.android.gms.R
[2013-05-15 18:48:28 - BackMyAppUp] Warning: com.google.android.gms.auth.GoogleAuthUtil: can't find referenced class com.google.android.gms.R$string
[2013-05-15 18:48:28 - BackMyAppUp] Warning: com.google.android.gms.auth.GoogleAuthUtil: can't find referenced class com.google.android.gms.R$string
[2013-05-15 18:48:28 - BackMyAppUp] Warning: com.google.android.gms.auth.GoogleAuthUtil: can't find referenced class com.google.android.gms.R$string

和大约300条类似的线。

如果我使用从bin文件夹生成的apk,则谷歌驱动器功能在手机中不起作用,但如果我通过Ecipse部署,则可以使用。 请帮帮我。

3 个答案:

答案 0 :(得分:4)

FWIW,在升级到ADT 22后,我有超过800个类似的错误,Proguard配置以前工作正常,在没有Proguard的情况下构建时,应用程序也崩溃了ClassDefNotFound错误的设备..

最终的解决方案是在我的主项目及其所有库项目的构建路径编辑器的Order and Export选项卡上勾选“Android Private Libraries”。

答案 1 :(得分:2)

要么使用Proguard(优化,混淆,......),要么不要。

如果你不想要,只需在project.properties中注释指向你的proguard配置的部分(带#):

proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt:proguard-google-api-client.txt

如果您愿意,解决方案是保持行,并创建以下文件:proguard-project.txt和proguard-google-api-client.txt

对于proguard-google-api-client.txt,您可以在此处找到一个示例: https://google-api-java-client.googlecode.com/hg/google-api-client-assembly/proguard-google-api-client.txt

对于proguard-project.txt,它取决于你提交另一个错误后得到的错误。 您可能需要添加几个:

-libjars <path_to_a_jar_used_in_app>

和其他一些-dontwarn,取决于你得到的警告......

答案 2 :(得分:0)

嗯这感觉有点愚蠢,3天我搞乱了proguard,但问题是我在发布apk中使用了调试密钥库SHA1密钥,因此谷歌驱动器应用程序崩溃,我在Google API中使用了正确的SHA1密钥控制台解决它。