无法生成APK - Android Studio

3
现在已经过去一周了,我们无法为我们的安卓项目构建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错误

以下是我们项目使用的Proguard规则:

-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规则吗? - Botz
没有更改Proguard规则,但我们在build.gradle文件中添加了一些依赖项。 - Ashish Ranjan
你能提供一个新添加依赖的列表吗?大多数依赖项都会为你的Proguard文件提供规则。 - Botz
@AshishRanjan:请阅读我的更新答案。 - ישו אוהב אותך
这些是新添加的依赖项: compile 'com.hannesdorfmann.sqlbrite:dao:0.6.1'
  • compile 'com.hannesdorfmann.sqlbrite:annotations:0.6.1'
  • apt 'com.hannesdorfmann.sqlbrite:object-mapper:0.6.1'
- Ashish Ranjan
1个回答

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设置适用于Facebook
  2. 有人能在ProGuard上使用它吗?

我不明白的是为什么它在其中一台电脑上构建?这与构建工具版本或Gradle版本有关吗? - Ashish Ranjan
@AshishRanjan:什么错误?也许该电脑上的项目与其他电脑上的项目不完全相同。首先尝试清理和重建项目。有时候当我们尝试运行应用程序时,Android Studio会使用旧的编译代码。 - ישו אוהב אותך
项目完全相同,因为我们刚从Git上拉取了代码,是的,我们尝试了多次清理和重建,但都没有成功! - Ashish Ranjan
好的,我会尝试使用你的Proguard规则。顺便说一下,这是警告的完整列表:http://pastebin.com/qFFwu1kH - Ashish Ranjan
嘿,我们使用了一些-dontwarn、-keep规则来摆脱警告,但是我们所有的活动/应用程序类仍然会收到以下类似的注释:**注意:配置引用了未知类'com.mypackage.activity'**。 - Ashish Ranjan
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接