java - apkをビルドできません - android studio


1 週間経ちましたが、Android プロジェクトの apk ファイルをコンパイルできません。受け取ったエラーはプロガードに関連しています (添付のエラーを参照):

<ブロック引用>

警告: クラスまたはインターフェースへの未解決の参照が 416 ありました。

エラー: タスク ':application:transformClassesAndResourcesWithProguardForDebug' の実行エラー。 java.io.IOException: 最初に上記の警告を修正してください。

最近の婚約の前に。したがって、そのコミットメントの支払いを行うと、それは機能します!これに関連して、stackoverflow/internet で利用可能なすべてのものを試しましたが、何も機能しません! 最悪の部分は、1 台のコンピューターでしかコンパイルできず、同じ Android Studio バージョンの他のコンピューターではなぜ動作しないのか理解できないことです。

以下を使用して警告を抑制しようとさえします:

<ブロック引用>

-警告しないでください

-l を長押しクラスへ

したがって、この場合、ビルドは成功しましたが、アプリは失敗しました。

使用されているさまざまなコンポーネントのバージョン:

<ブロック引用>

アンドロイド スタジオ - 2.1.2

プロガード - 5.2.1

buildTools バージョン 23.0.2

保護エラー

これらは、私たちのプロジェクトで使用しているプロガード ルールです:

-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 がコードの依存関係を難読化する変更。 -dontwarn を使用する代わりに (基本的に未解決の参照について警告しません)、-maintain class を使用する必要があります。

依存パッケージ名を見つけて、proguard がクラスを難読化するのを防ぎます。

-- 更新 --

レジストリから、解決する必要がある 2 つの依存関係があります: facebook と android-shape-imageview。

Facebook の場合は、これをあなたのプロガード:

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

画像形式で表示する場合:

-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.**{ *; }

詳細:

<オール>
  • Facebook 用の Android ProGuard の構成
  • ProGuard を有効にして誰でもこれを使用できますか?
  • タグ:

    関連記事:

    GRADLE が Grails アプリケーションの間違った JAR ファイルを MAVEN リポジトリにアップロードするのはなぜですか?

    sql: インデックスを追加して、Geocoder Near Search を高速化します