java - 无法构建 apk - android studio

标签 java android android-studio proguard

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

Warning:there were 416 unresolved references to classes or interfaces.

Error:Execution failed for task ':app:transformClassesAndResourcesWithProguardForDebug'. java.io.IOException: Please correct the above warnings first.

用于在我们最近的一次提交之前构建的项目。因此,当我们检查该提交时,它就起作用了!我们已经在 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;
}

最佳答案

当你添加一些依赖时,proguard 会混淆依赖代码,这是一个巨大的变化。因此,您应该使用 -keep class 而不是使用 -dontwarn(它基本上不会警告您一些 Unresolved 引用)。

找到依赖包名称,然后防止它们的类被混淆器混淆。

-- 已更新--

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

对于 facebook,请尝试将其添加到您的混淆器中:

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

对于形状 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?

关于java - 无法构建 apk - android studio,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38058201/

相关文章:

java - 如何更改 war 文件中 index.jsp 的位置

android - Android 上的 Mapbox 无法添加源异常

java - AndroidPDFViewer - 无法在我的应用程序中打开 pdf 文档

java - 当在 CustomView 中扩展 ArrayAdapter 时,将 Kotlin 翻译为 Android 中的 Java

java - Android Studio ImageView 上的 switch 语句

Android 设备监视器未在 Ubuntu 17.10 中打开

java - 以与 Java 相同的方式使用 OpenSSL 进行加密

java - 将另一个jar的程序导入到我的jar中

java - Wicket:可变 ListView/DataView 中的链接

android-studio - 应用程序崩溃 : FATAL EXCEPTION: main