android - One Signal 缺少支持库 - Android SDK

标签 android android-support-library onesignal

更新 我添加到 proguard 规则 -keep class firebase,所以现在我可以获得 GCM token 。 但 OneSignal 检测到我的应用程序仍然缺少 Android 支持库。 我之前有一个应用程序,我可以在其中构建一个签名的 apk 并使用 One Signal。 但是现在当我检查这个应用程序时,我遇到了当我能够使用 Build->Build APK(s) 将 minifyEnabled 设置为 false 来构建调试 apk 时,但是当我将 minifyEnabled 设置为 true 时,我得到了同样的错误项目也是。 在我尝试添加 -keep class com.android.support. ** 和 -keep interface com.android.support. ** 但 One Signal 仍然检测到我的应用程序后不包含支持库(无论如何支持 lib??)。

我在我的应用中实现了 One Signal。 如果我在 Android Studio 中通过“运行应用程序”启动应用程序,一切正常。 但是如果我通过“Build->Build apk(s)”构建一个 Apk 或者我生成一个签名的 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) 

最佳答案

经过大量尝试和错误后,我找到了解决方案,我在 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
}

关于android - One Signal 缺少支持库 - Android SDK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50277710/

相关文章:

android - PreferenceFragmentCompat 自定义布局

java - 按钮在 Android AudioManager 中不起作用

java - 如何加载 Assets 文件夹中的属性文件?

android - 支持库(v4 与 v13)

android - 无法解析 : com. android.support :appcompat-v7:30. 0.0

unity3d - Google.JarResolver.ResolutionException : Cannot resolve com. google.firebase :firebase-analytics-unity:1. 0.0()

php - 如何在 Laravel 中切换一个信号键以将推送通知发送到不同的帐户

android - Nexus 9 主采样率

Android 的 ContentResolver.isSyncActive 在实际同步结束之前返回 false

push-notification - Gamethrive Onesignal 从一个单元发送到另一个单元