我想在Eclipse中混淆使用Dropbox和Proguard的Android 4+应用程序。到目前为止,我有使用ProGuard没有经验,因此我用不同的教程和答案在这里SO配置我proguard-project.txt
:Proguard抱怨外部JAR中缺少类。如何正确解决这个问题?
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService
当我尝试使用File/Export.../Export Android Application/...
对话框的创建失败的Proguard的错误导出APK:
[2014-08-29 09:50:30 - MyApp] Proguard returned with error code 1. See console
[2014-08-29 09:50:30 - MyApp] Note: there were 367 duplicate class definitions.
[2014-08-29 09:50:30 - MyApp] Warning: org.apache.commons.logging.impl.ServletContextCleaner: can't find superclass or interface javax.servlet.ServletContextListener
[2014-08-29 09:50:30 - MyApp] Warning: org.apache.http.entity.mime.FormBodyPart: can't find superclass or interface org.apache.james.mime4j.message.BodyPart
...
[2014-08-29 09:50:30 - MyApp] Warning: library class android.net.http.AndroidHttpClient extends or implements program class org.apache.http.client.HttpClient
...
[2014-08-29 09:50:30 - MyApp] Warning: org.bouncycastle.x509.util.LDAPStoreHelper: can't find referenced class javax.naming.directory.DirContext
[2014-08-29 09:50:30 - MyApp] You should check if you need to specify additional program jars.
[2014-08-29 09:50:30 - MyApp] Warning: there were 223 unresolved references to classes or interfaces.
[2014-08-29 09:50:30 - MyApp] You may need to specify additional library jars (using '-libraryjars').
[2014-08-29 09:50:30 - MyApp] Warning: there were 1 instances of library classes depending on program classes.
[2014-08-29 09:50:30 - MyApp] You must avoid such dependencies, since the program classes will
[2014-08-29 09:50:30 - MyApp] be processed, while the library classes will remain unchanged.
[2014-08-29 09:50:30 - MyApp] Warning: there were 13 unresolved references to program class members.
[2014-08-29 09:50:30 - MyApp] Your input classes appear to be inconsistent.
[2014-08-29 09:50:30 - MyApp] You may need to recompile them and try again.
[2014-08-29 09:50:30 - MyApp] Alternatively, you may have to specify the option
[2014-08-29 09:50:30 - MyApp] '-dontskipnonpubliclibraryclassmembers'.
[2014-08-29 09:50:30 - MyApp] java.io.IOException: Please correct the above warnings first.
[2014-08-29 09:50:30 - MyApp] at proguard.Initializer.execute(Initializer.java:321)
[2014-08-29 09:50:30 - MyApp] at proguard.ProGuard.initialize(ProGuard.java:211)
[2014-08-29 09:50:30 - MyApp] at proguard.ProGuard.execute(ProGuard.java:86)
[2014-08-29 09:50:30 - MyApp] at proguard.ProGuard.main(ProGuard.java:492)
我想第一件事情就是添加一些-libraryjars ...
命令:
-libraryjars 'F:/Path/To/Workspace/Third Party/Dropbox/dropbox-android-sdk-1.6.1/lib/bcprov-jdk16-146.jar'
-libraryjars 'F:/Path/To/Workspace/Third Party/Dropbox/dropbox-android-sdk-1.6.1/lib/commons-logging-1.1.1.jar'
-libraryjars 'F:/Path/To/Workspace/Third Party/Dropbox/dropbox-android-sdk-1.6.1/lib/dropbox-android-sdk-1.6.1.jar'
-libraryjars 'F:/Path/To/Workspace/Third Party/Dropbox/dropbox-android-sdk-1.6.1/lib/httpclient-4.0.3.jar'
-libraryjars 'F:/Path/To/Workspace/Third Party/Dropbox/dropbox-android-sdk-1.6.1/lib/httpcore-4.0.1.jar'
-libraryjars 'F:/Path/To/Workspace/Third Party/Dropbox/dropbox-android-sdk-1.6.1/lib/httpmime-4.0.3.jar'
-libraryjars 'F:/Path/To/Workspace/Third Party/Dropbox/dropbox-android-sdk-1.6.1/lib/json_simple-1.1.jar'
这并不能解决问题。其实现在有2468所重复的类定义(前367 ...)
我试了下是忽略警告:
-dontwarn org.bouncycastle.**
-dontwarn org.apache.**
这解决了问题!现在,APK的创建没有任何错误。很好......但我对此没有很好的感觉。 是否真的忽略了警告是解决此问题的最佳方法?这是处理这些问题的“同类”方式吗?
当我在我的设备上运行APK并尝试使用Dropbox功能时,应用程序崩溃。但这可以通过添加以下内容来解决:
-keep class org.** { *; }
-keep class com.dropbox.** {*;}
这可以保护Dropbox代码不被obfruscated。但是我不确定这是否是正确的处理方法。
到目前为止,该应用似乎对此配置正常工作。但有什么办法,我可以肯定的Proguard的没有爆发什么
感谢您非常(运行的所有应用功能的完整的beta测试每次应用程序创建?旁边)!