无法建立apk - 安卓工作室

时间:2016-06-27 15:47:00

标签: java android android-studio proguard

现在已经一周了,我们无法为我们的andorid项目构建apk文件。我们得到的错误与proguard有关(请参阅附带的错误):

  

警告:有416个未解析的类或接口引用。

     

错误:任务':app:transformClassesAndResourcesWithProguardForDebug'的执行失败。   java.io.IOException:请先纠正上述警告。

用于在我们最近的一次提交之前构建的项目。所以,当我们结账到那个提交时它会起作用!我们已经在stackoverflow / internet上尝试了与此相关的所有可用内容,但没有任何效果! 最糟糕的是,它只是在我们的一台计算机上构建而且我们无法弄清楚为什么它在使用相同版本的Android Studio的其他计算机上不起作用。

我们甚至试图通过使用:

来抑制警告
  

-dontwarn

     

-keep class

因此,在这种情况下,构建成功但应用程序崩溃。

使用的不同组件的版本:

  

Android Studio - 2.1.2

     

Proguard - 5.2.1

     

buildToolsVersion 23.0.2

Proguard errors

这些是我们用于项目的计划规则:

-dontwarn com.github.siyamed.shapeimageview.path.parser.SvgToPath
-dontwarn com.google.android.gms.internal.zzhu
-dontwarn com.squareup.okhttp.**
-keep class com.opentok.** { *; }
-keep class org.webrtc.** { *; }

-keepattributes SourceFile,LineNumberTable
-keepattributes *Annotation*
-keep class org.acra.** { *; }
-keepclassmembers class com.paytm.pgsdk.PaytmWebView$PaytmJavaScriptInterface {
    public *;
}

##MoEngage proguard rules, src : http://docs.moengage.com/docs/android-configuring-proguard
-dontwarn com.google.android.gms.location.**
-dontwarn com.google.android.gms.gcm.**
-dontwarn com.google.android.gms.iid.**
-dontwarn okio.**

-keep class com.google.android.gms.gcm.** { *; }
-keep class com.google.android.gms.iid.** { *; }
-keep class com.google.android.gms.location.** { *; }
-keep class com.facebook.drawee.**{*;}
-dontwarn com.facebook.drawee.*

-keep class com.moe.pushlibrary.activities.** { *; }
-keep class com.moe.pushlibrary.internal.MoEService
-keep class com.moe.pushlibrary.GeofenceIntentService
-keep class com.moe.pushlibrary.InstallReceiver
-keep class com.moengage.push.MoEPushWorker
-keep class com.moe.pushlibrary.PushGcmBroadcastReceiver
-keep class com.moe.pushlibrary.providers.MoEProvider
-keep class com.moengage.receiver.MoEInstanceIDListener
-keep class com.moengage.worker.MoEGCMListenerService
-keep class com.moe.pushlibrary.models.** { *;}
-keep class com.moe.pushlibrary.internal.GeoTask
-keep class com.moengage.locationlibrarynew.LocationHandlerImpl

-dontwarn com.moengage.locationlibrarynew.LocationHandlerImpl
-dontwarn com.moe.pushlibrary.internal.GeoTask
-dontwarn com.moengage.receiver.*
-dontwarn com.moengage.worker.*
-dontwarn com.moengage.*
-keep class com.delight.**  { *; }

## for rx java
-dontwarn sun.misc.**

-keepclassmembers class rx.internal.util.unsafe.*ArrayQueue*Field* {
   long producerIndex;
   long consumerIndex;
}

-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef {
    rx.internal.util.atomic.LinkedQueueNode producerNode;
}

-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueConsumerNodeRef {
    rx.internal.util.atomic.LinkedQueueNode consumerNode;
}

1 个答案:

答案 0 :(得分:0)

当你添加一些依赖项时,proguard会对依赖项代码产生很大的影响。因此,使用 -dontwarn (基本上不会警告您某些未解析的引用),您应该使用 -keep class

找到依赖项包名称,然后让他们的类不受proguard的阻碍。

- 更新 -

从您的日志中有2个需要解决的依赖项:facebook和android-shape-imageview。

对于Facebook,请尝试将此添加到您的proguard:

-keep class com.facebook.** {
   *;
}

对于shape-imageview:

-dontwarn android.support.v7.**
-keep class android.support.v7.** { ; }
-keep interface android.support.v7.* { ; }
-keepattributes *Annotation,Signature
-dontwarn com.github.siyamed.**
-keep class com.github.siyamed.shapeimageview.**{ *; }

阅读更多内容:

  1. Android ProGuard settings for Facebook
  2. Anyone able to use this with proguard on?