Отсутствует библиотека поддержки One Signal - Android SDK

Обновить Я добавил в правила proguard -keep class firebase, так что теперь я могу получить токен GCM. Но OneSignal обнаруживает, что в моем приложении все еще отсутствует библиотека поддержки Android. Раньше у меня было приложение, в котором я мог создать подписанный apk и использовать с ним One Signal. Но теперь, когда я проверил это приложение, я испытал, когда я могу создать отладочный apk с помощью Build-> Build APK, установив minifyEnabled на false, но когда я устанавливаю minifyEnabled на true, я получаю ту же ошибку для этого проект тоже. После того, как я попытался добавить -keep класс com.android.support. ** и -сохранить интерфейс com.android.support. **, но One Signal все еще обнаруживает, что мое приложение не содержит библиотеки поддержки (во всяком случае, которая поддерживает lib ??).

Я реализовал One Signal в своем приложении. Если я запускаю приложение с помощью «Запустить приложение» в Android Studio, все работает нормально. Но если я создаю Apk с помощью «Build-> Build apk (s)» или создаю подписанный apk, после того, как я его установлю, на панели управления One Signal появится сообщение «Отсутствует библиотека поддержки Android». Я весь день читал руководства на сайте One Signal, но мне не удалось решить эту проблему. Как я могу это исправить?

Я получаю эту ошибку

05-10 21:12:21.054 17990-18243/com.aff.index.main.debug E/OneSignal: Unknown error getting GCM Token java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/gms/gcm/GoogleCloudMessaging; at com.onesignal.av.a(PushRegistratorGCM.java:41) at com.onesignal.at.a(PushRegistratorAbstractGoogle.java:97) at com.onesignal.at.a(PushRegistratorAbstractGoogle.java:37) at com.onesignal.at$1.run(PushRegistratorAbstractGoogle.java:84) at java.lang.Thread.run(Thread.java:762) Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.gcm.GoogleCloudMessaging" on path: DexPathList[[zip file "/system/framework/com.sec.android.app.multiwindow.jar", zip file "/data/app/com.aff.index.main.debug-1/base.apk"],nativeLibraryDirectories=[/data/app/com.aff.index.main.debug-1/lib/arm64, /data/app/com.aff.index.main.debug-1/base.apk!/lib/arm64-v8a, /system/lib64, /vendor/lib64]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) at java.lang.ClassLoader.loadClass(ClassLoader.java:380) at java.lang.ClassLoader.loadClass(ClassLoader.java:312) at com.onesignal.av.a(PushRegistratorGCM.java:41)  at com.onesignal.at.a(PushRegistratorAbstractGoogle.java:97)  at com.onesignal.at.a(PushRegistratorAbstractGoogle.java:37)  at com.onesignal.at$1.run(PushRegistratorAbstractGoogle.java:84)  at java.lang.Thread.run(Thread.java:762) 

такая же проблема здесь

Payam Kokabi 14.05.2018 13:04

На данный момент я решил, установив minifyEnabled = false и multidexEnable = true (потому что без него я не могу создать свое приложение из-за ограничения в 65 тысяч методов).

user3057944 14.05.2018 14:53

@ user3057944 показать ваши правила прогурда и файл градиента

MJM 21.05.2018 05:50
3
3
2 514
2

Ответы 2

После многих попыток и ошибок я нашел решение и использовал эти строки в app / build.gradle:

plugins {
    id 'com.onesignal.androidsdk.onesignal-gradle-plugin' version '0.8.1'
}
apply plugin: 'com.onesignal.androidsdk.onesignal-gradle-plugin'

apply plugin: 'com.android.application'

android {
    ...
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    ...
    implementation 'com.onesignal:OneSignal:**3.8.4**'
}

apply plugin: 'com.google.gms.google-services'

Примечание. 3.8.4 - это точка, которая использовалась вместо [3.8.3, 3.99.99].

и эти зависимости в project / build.gradle:

buildscript {
    repositories {
        jcenter()
        google()
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.2'
        classpath 'com.google.gms:google-services:3.2.0'
    }
}

allprojects {
    repositories {
        jcenter()
        google()
        mavenCentral()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

Это проблема OneSignal v3.9.0. Добавьте эти строки в свои правила программы:

-keep class android.support.v4.view.MenuCompat
-keep class android.support.v4.content.WakefulBroadcastReceiver
-keep class android.support.v4.app.NotificationManagerCompat
-keep class android.support.v4.app.JobIntentService
-keep class com.google.firebase.messaging.FirebaseMessaging

В их репозитории есть закрытая проблема https://github.com/OneSignal/OneSignal-Android-SDK/issues/533

Полные рабочие правила программы Proguard для OneSignal v3.9.0:

-dontwarn com.onesignal.**

# These 2 methods are called with reflection.
-keep class com.google.android.gms.common.api.GoogleApiClient {
    void connect();
    void disconnect();
}


-keep class com.onesignal.ActivityLifecycleListenerCompat** {*;}


# Observer backcall methods are called with reflection
-keep class com.onesignal.OSSubscriptionState {
    void changed(com.onesignal.OSPermissionState);
}

-keep class com.onesignal.OSPermissionChangedInternalObserver {
    void changed(com.onesignal.OSPermissionState);
}

-keep class com.onesignal.OSSubscriptionChangedInternalObserver {
    void changed(com.onesignal.OSSubscriptionState);
}

-keep class ** implements com.onesignal.OSPermissionObserver {
    void onOSPermissionChanged(com.onesignal.OSPermissionStateChanges);
}

-keep class ** implements com.onesignal.OSSubscriptionObserver {
    void onOSSubscriptionChanged(com.onesignal.OSSubscriptionStateChanges);
}

-keep class com.onesignal.shortcutbadger.impl.AdwHomeBadger { <init>(...); }
-keep class com.onesignal.shortcutbadger.impl.ApexHomeBadger { <init>(...); }
-keep class com.onesignal.shortcutbadger.impl.AsusHomeLauncher { <init>(...); }
-keep class com.onesignal.shortcutbadger.impl.DefaultBadger { <init>(...); }
-keep class com.onesignal.shortcutbadger.impl.EverythingMeHomeBadger { <init>(...); }
-keep class com.onesignal.shortcutbadger.impl.HuaweiHomeBadger { <init>(...); }
-keep class com.onesignal.shortcutbadger.impl.LGHomeBadger { <init>(...); }
-keep class com.onesignal.shortcutbadger.impl.NewHtcHomeBadger { <init>(...); }
-keep class com.onesignal.shortcutbadger.impl.NovaHomeBadger { <init>(...); }
-keep class com.onesignal.shortcutbadger.impl.OPPOHomeBader { <init>(...); }
-keep class com.onesignal.shortcutbadger.impl.SamsungHomeBadger { <init>(...); }
-keep class com.onesignal.shortcutbadger.impl.SonyHomeBadger { <init>(...); }
-keep class com.onesignal.shortcutbadger.impl.VivoHomeBadger { <init>(...); }
-keep class com.onesignal.shortcutbadger.impl.XiaomiHomeBadger { <init>(...); }
-keep class com.onesignal.shortcutbadger.impl.ZukHomeBadger { <init>(...); }

-dontwarn com.google.firebase.messaging.**
-dontwarn com.amazon.**

# Proguard ends up removing this class even if it is used in AndroidManifest.xml so force keeping it.
-keep public class com.onesignal.ADMMessageHandler {*;}

-keep class com.onesignal.JobIntentService$* {*;}

-keep class com.onesignal.OneSignalUnityProxy {*;}

-keep class android.support.v4.view.MenuCompat
-keep class android.support.v4.content.WakefulBroadcastReceiver
-keep class android.support.v4.app.NotificationManagerCompat
-keep class android.support.v4.app.JobIntentService
-keep class com.google.firebase.messaging.FirebaseMessaging

Другие вопросы по теме