Android: после включения ProGuard Google Cloud Messaging (GCM) не работает - PullRequest
0 голосов
/ 18 мая 2018

Я работаю над приложением, которое работает правильно, пока ProGuard был отключен.Затем я пытаюсь уменьшить размер apk и нашел ProGuard в качестве рекомендуемого инструмента .

Когда я включил ProGuard, я получил всего 1153 предупреждений.Затем добавили proguard-rules.txt для настройки.Я только что добавил фрагмент кода, приведенный в Пример руководства ProGuard для приложения Android .И добавил -ignorewarnings в конце файла proguard-rules.text.Затем он скомпилировал, собрал подписанный apk и apk работал без сбоев.

Но есть одна проблема (могут быть и другие нераскрытые проблемы).То есть apk не может установить GCM ID, служба непрерывно отправляет один запрос на сервер, уведомление GCM не получено.Но все эти проблемы решаются в отладочном apk, так как для отладочного apk не включен ProGuard.

Вот мой build.gradle файл

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion '25.0.2'

    defaultConfig {
        applicationId "com.example.ett"
        minSdkVersion 15
        targetSdkVersion 20
        versionCode 31
        versionName "1.0.18"
        multiDexEnabled true
    }

    buildTypes {
        release {
            shrinkResources true
            minifyEnabled true
            useProguard true
            zipAlignEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.txt'
        }
    }

    dexOptions {
        preDexLibraries = false
        incremental true
        javaMaxHeapSize "2048M"
    }

    lintOptions {
        // set to true to turn off analysis progress reporting by lint
        quiet true
        // if true, stop the gradle build if errors are found
        abortOnError false
        // if true, only report errors
        ignoreWarnings true
    }
}

dependencies {
    compile files('libs/MultipartUtility.jar')
    compile files('libs/javax.mail.jar')
    compile files('libs/picasso-2.5.0.jar')
    compile files('libs/FCJsonParser.jar')
    compile files('libs/JSON.jar')
    compile files('libs/FCJsonChatParser.jar')
    compile files('libs/revmob.jar')
    compile files('libs/commons-net-3.6.jar')

    compile project(':viewPagerIndicator')
    compile project(':connectionclass')
    compile project(':emojicons')

    compile 'com.android.support:support-v4:23.1.0'

    compile 'com.android.support:appcompat-v7:23.1.0'
    compile 'com.android.support:support-annotations:23.1.0'
    compile 'com.android.support:recyclerview-v7:23.1.0'
    compile 'com.android.support:design:23.1.0'
    compile 'com.android.support:cardview-v7:23.1.0'
    compile 'com.getbase:floatingactionbutton:1.10.1'
    compile 'com.android.support:multidex:1.0.1'
    compile 'com.google.android.gms:play-services-location:11.8.0'
    compile 'com.google.android.gms:play-services-gcm:11.8.0'
    compile 'com.google.android.gms:play-services-analytics:11.8.0'
    compile 'com.google.android.gms:play-services-ads:11.8.0'
    compile 'com.google.zxing:core:3.2.0'
    compile 'com.facebook.android:facebook-android-sdk:4.0.0'
    compile 'com.astuetz:pagerslidingtabstrip:1.0.1'
    compile 'net.glxn.qrgen:android:2.0'
    compile 'org.apmem.tools:layouts:1.10@aar'
    compile 'me.dm7.barcodescanner:zbar:1.8.4'
    compile 'com.soundcloud.android:android-crop:1.0.0@aar'
    compile 'com.nineoldandroids:library:2.4.0'
    compile 'com.bartoszlipinski.recyclerviewheader:library:1.2.0'
    compile 'com.makeramen:roundedimageview:2.2.0'
    compile 'de.hdodenhof:circleimageview:2.0.0'
    compile 'com.github.danielnilsson9:color-picker-view:1.4.0@aar'

    compile 'com.facebook.stetho:stetho:1.3.1'
    compile 'com.facebook.stetho:stetho-okhttp3:1.3.1'
    compile 'com.squareup.okhttp3:okhttp:3.3.1'
    compile 'com.facebook.stetho:stetho-js-rhino:1.3.1'

    compile 'com.github.chrisbanes:PhotoView:1.3.0'

    compile 'com.github.orangegangsters:swipy:1.2.3@aar'

    compile 'com.anjlab.android.iab.v3:library:1.0.44'
}

, а вот мой proguard-rules.txt:

#-injars      bin/classes
-injars      libs
#-outjars     bin/classes-processed.jar
#-libraryjars /home/adnan/Android/Sdk/platforms/android-23/android.jar

-android
-dontpreverify
-repackageclasses ''
-allowaccessmodification
-optimizations !code/simplification/arithmetic
-keepattributes *Annotation*
-keepattributes Signature

-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService

-keep public class * extends android.view.View {
      public <init>(android.content.Context);
      public <init>(android.content.Context, android.util.AttributeSet);
      public <init>(android.content.Context, android.util.AttributeSet, int);
      public void set*(...);
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}

-keepclassmembers class * extends android.content.Context {
    public void *(android.view.View);
    public void *(android.view.MenuItem);
}

-keepclassmembers class * implements android.os.Parcelable {
    static ** CREATOR;
}

-keepclassmembers class **.R$* {
    public static <fields>;
}

-keepclassmembers class * {
    @android.webkit.JavascriptInterface <methods>;
}

-dontwarn android.support.**
-ignorewarnings

Как решить эту проблему?Есть ли что-то, что я не упомянул в файле proguard-rules.txt?Заранее спасибо.Я использовал ProGuard version 6.0.3

...