您好,我希望有人可以帮助我。
我正在开发一个使用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'
仍然没有变化
答案 0 :(得分:24)
正如@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的回复,其中提示了示例项目的提示。我现在没有足够的声誉,但是我应该自动添加upvote。
:)
答案 1 :(得分:1)
在支持库中看起来像是一个重大变化,其中接口现在是一个抽象类。确保23.3的支持库和app compat以及8.4 Google的地方服务。清洁和重建。您可以检查构建目录以验证版本。有时其他依赖项会引入更新的依赖项。
答案 2 :(得分:0)
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'
}