Urban-airship + Facebook cordova插件android-support-v4冲突
Urban-airship + Facebook cordova plugin android-support-v4 conflict
我正在尝试使用 Urban-airship cordova 插件(phonegap-ua-push) along with Facebook plugin (phonegap-facebook-plugin),但我遇到了这个错误:
Multiple dex files define Landroid/support/annotation/AnimRes
这似乎是由于 facebook android-support-v4 和 phonegap-ua-push 之间的冲突,因为它使用不同的 support-v4 版本编译。
dependencies {
compile 'com.android.support:cardview-v7:22.2.0'
compile 'com.android.support:support-v4:22.2.0'
compile 'com.google.android.gms:play-services-location:7.5.0'
compile 'com.google.android.gms:play-services-gcm:7.5.0'
compile 'com.urbanairship.android:urbanairship-sdk:6.1.3'
}
我尝试更新了phonegap-ua-push的依赖,并排除了它依赖的support-v4,希望它能和Facebook一起工作。
这是我的做法:
dependencies {
compile ('com.android.support:cardview-v7:22.2.0') {
exclude module: 'support-v4'
}
compile ('com.google.android.gms:play-services-location:7.5.0') {
exclude module: 'support-v4'
}
compile ('com.google.android.gms:play-services-gcm:7.5.0') {
exclude module: 'support-v4'
}
compile ('com.urbanairship.android:urbanairship-sdk:6.1.3') {
exclude module: 'support-v4'
}
}
但是当应用程序收到推送通知时,应用程序崩溃了..
这是 logcat 的例外情况:
E/AndroidRuntime(24095): java.lang.NoSuchMethodError: No virtual method setColor(I)Landroid/support/v4/app/NotificationCompat$Builder; in class Landroid/support/v4/app/NotificationCompat$Builder; or its super classes (declaration of 'android.support.v4.app.NotificationCompat$Builder' appears in /data/app/com.****.****-1/base.apk)
有人实现了同时使用 facebook 和 urbanairship 插件吗?
编辑:
正如 ralepinski 所说,我试图从 platforms/android/FacebookLib/libs/ 文件夹中删除 android-support-v4.jar ,当我这样做时,我得到了以下错误提示音:
FacebookLib/src/com/facebook/AppEventsLogger.java:24: error: package
android.support.v4.content does not exist import
android.support.v4.content.LocalBroadcastManager; ...
我认为他找不到 android-support-v4
这对我来说没有意义,因为 FacebookLib 的 build.gradle 如下:
dependencies {
compile 'com.android.support:support-v4:[20,21)'
compile 'com.parse.bolts:bolts-android:1.1.2'
}
所以应该可以理解需要android-support-v4。我可能在这里误解了一些东西..
我也尝试用 phonegap-ua-push 使用的 android-support-v4 替换 android-support-v4-22.2.0,但它似乎在那里是一些缺失的符号:
error: cannot find symbol
FragmentManagerImpl mFragmentManager;
error: cannot find symbol
FragmentManagerImpl mChildFragmentManager;
您使用的 Facebook 插件提供了过时版本的支持库。我会向他们提出问题。看起来他们可能正在使用 gradle,所以他们只需要删除支持库。
因为看起来您必须克隆 Facebook 插件,您可以尝试从插件中删除支持库 - https://github.com/Wizcorp/phonegap-facebook-plugin/blob/master/platforms/android/FacebookLib/libs/android-support-v4.jar 看看是否适合您。如果没有,请尝试使用较新版本更新支持库并保留 gradle 排除项。
我终于解决了我的问题,通过使用 Facebook 插件的这个分支 https://github.com/jeduan/cordova-plugin-facebook4,它使用了最后一个 Facebook sdk。
我正在尝试使用 Urban-airship cordova 插件(phonegap-ua-push) along with Facebook plugin (phonegap-facebook-plugin),但我遇到了这个错误:
Multiple dex files define Landroid/support/annotation/AnimRes
这似乎是由于 facebook android-support-v4 和 phonegap-ua-push 之间的冲突,因为它使用不同的 support-v4 版本编译。
dependencies {
compile 'com.android.support:cardview-v7:22.2.0'
compile 'com.android.support:support-v4:22.2.0'
compile 'com.google.android.gms:play-services-location:7.5.0'
compile 'com.google.android.gms:play-services-gcm:7.5.0'
compile 'com.urbanairship.android:urbanairship-sdk:6.1.3'
}
我尝试更新了phonegap-ua-push的依赖,并排除了它依赖的support-v4,希望它能和Facebook一起工作。 这是我的做法:
dependencies {
compile ('com.android.support:cardview-v7:22.2.0') {
exclude module: 'support-v4'
}
compile ('com.google.android.gms:play-services-location:7.5.0') {
exclude module: 'support-v4'
}
compile ('com.google.android.gms:play-services-gcm:7.5.0') {
exclude module: 'support-v4'
}
compile ('com.urbanairship.android:urbanairship-sdk:6.1.3') {
exclude module: 'support-v4'
}
}
但是当应用程序收到推送通知时,应用程序崩溃了.. 这是 logcat 的例外情况:
E/AndroidRuntime(24095): java.lang.NoSuchMethodError: No virtual method setColor(I)Landroid/support/v4/app/NotificationCompat$Builder; in class Landroid/support/v4/app/NotificationCompat$Builder; or its super classes (declaration of 'android.support.v4.app.NotificationCompat$Builder' appears in /data/app/com.****.****-1/base.apk)
有人实现了同时使用 facebook 和 urbanairship 插件吗?
编辑: 正如 ralepinski 所说,我试图从 platforms/android/FacebookLib/libs/ 文件夹中删除 android-support-v4.jar ,当我这样做时,我得到了以下错误提示音:
FacebookLib/src/com/facebook/AppEventsLogger.java:24: error: package android.support.v4.content does not exist import android.support.v4.content.LocalBroadcastManager; ...
我认为他找不到 android-support-v4
这对我来说没有意义,因为 FacebookLib 的 build.gradle 如下:
dependencies {
compile 'com.android.support:support-v4:[20,21)'
compile 'com.parse.bolts:bolts-android:1.1.2'
}
所以应该可以理解需要android-support-v4。我可能在这里误解了一些东西..
我也尝试用 phonegap-ua-push 使用的 android-support-v4 替换 android-support-v4-22.2.0,但它似乎在那里是一些缺失的符号:
error: cannot find symbol FragmentManagerImpl mFragmentManager;
error: cannot find symbol FragmentManagerImpl mChildFragmentManager;
您使用的 Facebook 插件提供了过时版本的支持库。我会向他们提出问题。看起来他们可能正在使用 gradle,所以他们只需要删除支持库。
因为看起来您必须克隆 Facebook 插件,您可以尝试从插件中删除支持库 - https://github.com/Wizcorp/phonegap-facebook-plugin/blob/master/platforms/android/FacebookLib/libs/android-support-v4.jar 看看是否适合您。如果没有,请尝试使用较新版本更新支持库并保留 gradle 排除项。
我终于解决了我的问题,通过使用 Facebook 插件的这个分支 https://github.com/jeduan/cordova-plugin-facebook4,它使用了最后一个 Facebook sdk。