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

最近我把Android Studio从0.4.2更新到了0.5.0,Android Gradle插件从0.7.2更新到了0.9.0。 该项目运行并安装好,但当我按Build->重build项目它会引发一个错误,这将停止重build。 消息标签中有一个错误:

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. 

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

我发现唯一的解决scheme是真正做到这一点,它是添加线

 -dontwarn com.facebook.** 

到proguardconfiguration文件,但它不是真正的溶剂。

Solutions Collecting From Web of "Android Studio 0.5.0重build不与Proguard一起使用"

问题是我们的库不包装BuildConfig。 这是因为我们允许(现在)库具有相同的包名称。 我们将改变这一点。

这不应该是一个问题,因为BuildConfig只是代码中应该内联的常量。 您只需排除BuildConfig即可进行临时修复:

 -dontwarn com.facebook.android.BuildConfig 

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

从警告中的链接 :

  • 如果缺less的类是从预编译的第三方库中引用的,并且您的原始代码在没有它的情况下运行良好,那么缺less的依赖关系似乎不会受到影响。 最简洁的解决scheme是从input中筛选出引用的类或类,并使用“-libraryjars mylibrary.jar(!somepackage / SomeUnusedReferencingClass.class)”这样的filter。 然后ProGuard将完全在input中跳过这个类,它不会碰到它缺less参考的问题。 但是,您可能必须筛选出其他类,然后再引用已删除的类。 在实践中,如果你可以一次过滤掉所有未使用的包,使用通配符filter(如“-libraryjars mylibrary.jar(!someunusedpackage / **)”),那么效果最好。
  • 如果您不想过滤有问题的课程,可以使用-ignorewarnings选项或者-dontwarn选项尝试运气。 只有使用这些选项,如果你真的知道你在做什么。