Android Studio 0.5.0重建不与Proguard一起使用

最近我将IDE Studio从0.4.2更新到0.5.0,将Android Gradle Plug-In从0.7.2更新到0.9.0,如IDE所示。 项目运行并安装良好,但是当我按下Build-> Rebuild Project时,它会抛出一个错误,从而停止重建。 消息选项卡中出现以下错误:

Information:See complete output in console Error:Execution failed for task ':projectName:proguardDebug'. > java.io.IOException: Please correct the above warnings first. 

以下是控制台中描述的问题:

 :projectName:proguardDebug Note: there were 2345 duplicate class definitions. Warning: com.facebook.Settings: can't find referenced class com.facebook.android.BuildConfig Warning: com.facebook.Settings: can't find referenced class com.facebook.android.BuildConfig Warning: com.facebook.internal.Utility: can't find referenced class com.facebook.android.BuildConfig Warning: com.facebook.internal.Utility: can't find referenced class com.facebook.android.BuildConfig Warning: there were 4 unresolved references to classes or interfaces. You may need to add missing library jars or update their versions. If your code works fine without the missing classes, you can suppress the warnings with '-dontwarn' options. (http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedclass) :projectName:proguardDebug FAILED FAILURE: Build failed with an exception. 

据我所知,问题是缺少BuildConfig.java,它在从Eclipse迁移之前位于/ gen文件夹中。 但是现在没有/ gen文件夹和BuildConfig.java在/ build / source / buildConfig / debug / forlder中。

我find了唯一真正做到这一点的溶剂,它正在添加生产线

 -dontwarn com.facebook.** 

到proguard配置文件,但它不是真正的sollution。

问题是我们的库没有打包BuildConfig。 这是因为我们允许(现在)库具有相同的包名称。 我们要改变这个。

这应该不是问题,因为BuildConfig只是应该在代码中内联的常量。 您可以执行临时修复,只排除BuildConfig:

 -dontwarn com.facebook.android.BuildConfig 

我们很快就会解决这个问题。

从警告中的链接 :

  • 如果从预编译的第三方库引用缺少的类,并且原始代码在没有它的情况下运行良好,那么缺少的依赖项似乎不会受到伤害。 最干净的解决方案是使用类似“-libraryjars mylibrary.jar(!somepackage / SomeUnusedReferencingClass.class)”的filter从输入中过滤出引用类或类。 然后,ProGuard将完全在输入中跳过此类,并且不会遇到其缺少引用的问题。 但是,您可能必须过滤掉其他类,这些类又引用已删除的类。 在实践中,如果您可以使用像“-libraryjars mylibrary.jar(!someunusedpackage / **)”这样的通配符filter一次过滤掉整个未使用的包,则效果最佳。
  • 如果您不想过滤掉有问题的课程,可以尝试使用-ignorewarnings选项,甚至是-dontwarn选项。 如果您真的知道自己在做什么,请仅使用这些选项。