【问题标题】:Android UrbanAirship Crash in takeOffAndroid UrbanAirship 在起飞时崩溃
【发布时间】:2016-09-16 06:47:49
【问题描述】:

您好,希望有人能帮到我。

我正在开发一个使用 UrbanAirship 接收PushNotifications 的应用程序。

我的问题是,从今天早上开始,我的应用程序在使用 takeOff 初始化 UrbanAirship 时崩溃。

我正在使用 Android Studio v2.1.1(稳定版)并更新了我的 Build 和 Platform-Tools 以使用最新版本。崩溃发生后,我使用这些工具的旧版本和不同的 Android Studio 版本(2.0、1.3 和 1.5)测试了它是否是由新工具引起的。所以我确信这不应该是问题。

这是我正在使用的代码和我的 LogCat 中的堆栈跟踪:

UAirship.takeOff(this, Config.getOptions(), mAirshipReadyCallback);

getOptions 返回以下内容:

public static AirshipConfigOptions getOptions() {
    return new AirshipConfigOptions.Builder()
        .setDevelopmentAppKey("Key")
        .setDevelopmentAppSecret("Secret")
        .setProductionAppKey("Key")
        .setProductionAppSecret("Secret")
        .setInProduction(!BuildConfig.DEBUG)
        .setGcmSender("Sender")
        .setProductionLogLevel(3).build();
}

我的回调如下:

private UAirship.OnReadyCallback mAirshipReadyCallback = new UAirship.OnReadyCallback() {
        @Override
        public void onAirshipReady(UAirship uAirship) {
            DefaultNotificationFactory notificationFactory;
            notificationFactory = new DefaultNotificationFactory(getApplicationContext());

            notificationFactory.setSmallIconId(R.drawable.ic_push);
            notificationFactory.setLargeIcon(R.drawable.ic_launcher);
            try {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                    notificationFactory.setColor(getColor(R.color.main_list_item_text_enabled));
                } else {
                    notificationFactory.setColor(getResources().getColor(R.color.main_list_item_text_enabled));
                }
            } catch (Resources.NotFoundException ex) {
                Timber.e(ex.getCause(), ex.getMessage());
                notificationFactory.setColor(Color.parseColor("0e457e"));
            }

            // Enable user notifications
            Timber.i("Enable Airship!");
            Timber.i("UAirship ChannelId: " + UAirship.shared().getPushManager().getChannelId());
            uAirship.getPushManager().setNotificationFactory(notificationFactory);
            uAirship.getPushManager().setUserNotificationsEnabled(true);
        }
    };

最后是StackTrace

java.lang.IncompatibleClassChangeError: The method 'java.io.File android.support.v4.content.ContextCompat.getNoBackupFilesDir(android.content.Context)' was expected to be of type virtual but instead was found to be of type direct (declaration of 'java.lang.reflect.ArtMethod' appears in /system/framework/core-libart.jar)
at com.google.android.gms.iid.zzd.zzeb(Unknown Source)
at com.google.android.gms.iid.zzd.<init>(Unknown Source)
at com.google.android.gms.iid.zzd.<init>(Unknown Source)
at com.google.android.gms.iid.InstanceID.zza(Unknown Source)
at com.google.android.gms.iid.InstanceID.getInstance(Unknown Source)
at com.urbanairship.push.GcmRegistrar.register(GcmRegistrar.java:62)
at com.urbanairship.push.ChannelServiceDelegate.onUpdatePushRegistration(ChannelServiceDelegate.java:174)
at com.urbanairship.push.ChannelServiceDelegate.onHandleIntent(ChannelServiceDelegate.java:110)
at com.urbanairship.BaseIntentService.onHandleIntent(BaseIntentService.java:103)
at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.os.HandlerThread.run(HandlerThread.java:61)

昨天一切正常,我没有更新我正在使用的任何库。

提前谢谢你,问候:)

编辑

这是我的 gradle 依赖项:

dependencies {

compile fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
repositories {
    mavenCentral()

    flatDir {
        dirs 'libs'
    }

    maven { url 'https://repo.commonsware.com.s3.amazonaws.com' }
    maven { url 'https://urbanairship.bintray.com/android' }
    maven { url 'https://download.01.org/crosswalk/releases/crosswalk/android/maven2' }
}

    compile('com.urbanairship.android:urbanairship-sdk:7.1.3') {
    exclude group: 'com.google.android.support', module: 'support-v4'
    exclude group: 'com.google.android.gms', module: 'play-services-gcm'
        transitive = true
}

compile('de.keyboardsurfer.android.widget:crouton:1.8.5@aar') {
    exclude group: 'com.google.android.support', module: 'support-v4'
    transitive = true
}

compile('com.facebook.android:facebook-android-sdk:4.8.1') {
    exclude group: 'com.google.android.support', module: 'support-v4'
}
compile 'com.android.support:multidex:1.0.1'
compile 'com.android.support:support-v4:23.3.0'
compile 'com.android.support:appcompat-v7:23.3.0'
compile 'com.squareup.retrofit:retrofit:2.0.0-beta2'
compile 'com.squareup.retrofit:converter-gson:2.0.0-beta2'
compile 'com.squareup.okhttp:okhttp:2.5.0'
compile 'com.squareup.okhttp:logging-interceptor:2.6.0'
compile 'com.google.code.gson:gson:2.4'
compile 'com.jakewharton:butterknife:5.1.1'
compile 'com.jakewharton.timber:timber:4.1.1'
compile 'commons-io:commons-io:2.4'
compile 'org.apache.commons:commons-lang3:3.4'
compile 'com.google.android.gms:play-services-analytics:8.4.0'
compile 'com.google.android.gms:play-services-gcm:8.4.0'
compile 'com.google.android.gms:play-services-ads:8.4.0'
compile('com.crashlytics.sdk.android:crashlytics:2.5.2@aar') {
    transitive = true;
}

compile 'org.xwalk:xwalk_core_library:16.45.421.19'
compile 'com.amplitude:android-sdk:2.5.0'

}

编辑 2

我也尝试使用 UrbanAirship-SDK 版本 6.4.1,不排除 google.gms 和 android 支持库,没有任何效果。

此外,我使用最新版本(只是更改)更新了我的 gradle 中的所有可能依赖项:

compile'com.urbanairship.android:urbanairship-sdk:7.1.3'
compile 'com.google.android.gms:play-services:9.0.0'
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.android.support:support-v4:23.4.0'

还是没有变化

【问题讨论】:

  • 您能否添加您的 Gradle 文件。我认为您在 build.gradle 下的依赖项部分中使用了旧的播放服务库。
  • @Nithinjith 添加了 gradle 依赖项
  • @Nithinjith 我更新了所有依赖项以匹配最新版本。所以播放服务库现在是 v 9.0.0 但仍然抛出异常
  • 您应该避免发布您的应用凭据和发件人 ID。请编辑您的问题并将其删除。
  • @ralepinski 你说得对。谢谢你:)

标签: android urbanairship.com


【解决方案1】:

正如@ralepinski 指出的那样。 UA 的示例应用程序按预期工作。于是我深入研究了库和gradle的使用,发现这个问题是由内部使用引起的

'com.android.support:support-v4:23.4.0'
'com.android.support:appcompat-v7:23.4.0'

一些使用的插件也使用这些库,冲突在于这些库的不同版本的使用。 我通过在 gradle 中使用 force 命令解决了这个问题(见下文):

configurations.all {
    resolutionStrategy {
        force 'com.android.support:design:23.4.0'
        force 'com.android.support:support-v4:23.4.0'
        force 'com.android.support:appcompat-v7:23.4.0'
    }
}

我要感谢大家的帮助,我赞成@ralepinskis 的回答,它暗示了查看示例项目。我现在没有足够的声望,但是当我有赞时应该自动添加。

:)

【讨论】:

  • 很高兴你明白了:)
  • 这行得通,非常感谢。只是想了解这段代码的作用?
  • – Siddharth_Vyas 它覆盖给定库的所有导入以使用描述的版本。 :)
【解决方案2】:

看起来支持库中的一个重大变化,其中接口现在是一个抽象类。确保 23.3 的支持库和应用程序兼容以及 8.4 的 Google 位置服务。清洁和重建。您可以检查构建目录以验证版本。有时其他依赖项会引入更新的依赖项。

【讨论】:

  • 恐怕这也无济于事:/
  • 你正在构建哪个 android 版本(api 23?N?)你能发布 ./gradlew 依赖项的输出
  • 我刚刚使用 23.3、android studio 2.1、android gradle plugin 2.1 和构建工具“23.0.3”构建了 UA 示例应用程序。一切正常。
【解决方案3】:
This what your gradle should look like and Hope you have added permission in manifest for the same:

repositories {
    jcenter()
    maven { url 'https://maven.fabric.io/public' }
    maven { url 'http://dl.bintray.com/urbanairship/android' }
}

dependencies {
    compile fileTree(include: '*.jar', dir: 'libs')
    compile 'com.google.android.gms:play-services-analytics:8.4.0'
    compile 'com.google.android.gms:play-services-identity:8.4.0'
    compile 'com.google.android.gms:play-services-base:8.4.0'
    compile 'com.google.android.gms:play-services-appindexing:8.4.0'
    compile 'com.google.android.gms:play-services-location:8.4.0'
    compile 'com.google.android.gms:play-services-wearable:8.4.0'
    compile 'com.google.android.gms:play-services-ads:8.4.0'
    compile 'com.google.android.gms:play-services-plus:8.4.0'
    compile project(':PlustxtAsSDK')
    compile 'com.urbanairship.android:urbanairship-sdk:6.4.1'
}

【讨论】:

  • 我实施了您建议的更改,但他们没有成功解决我的问题我仍然收到上面显示的错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-15
  • 2017-01-15
  • 1970-01-01
  • 1970-01-01
  • 2017-10-14
  • 2013-08-18
相关资源
最近更新 更多