亚马逊Kindle的ADM集成中发生NoClassDefFoundError错误

3

我正在尝试使用亚马逊设备消息传递API。

我按照亚马逊的建议使用导入方式添加了jar文件。当我在设备上部署时,出现了一个错误。

06-03 16:24:13.680: E/AndroidRuntime(11038): java.lang.NoClassDefFoundError: com.amazon.device.messaging.ADM
06-03 16:24:13.680: E/AndroidRuntime(11038):    at com.myapp.MainActivity.onCreate(MainActivity.java:74)
06-03 16:24:13.680: E/AndroidRuntime(11038):    at android.app.Activity.performCreate(Activity.java:4635)
06-03 16:24:13.680: E/AndroidRuntime(11038):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
06-03 16:24:13.680: E/AndroidRuntime(11038):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2031)
06-03 16:24:13.680: E/AndroidRuntime(11038):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2092)
06-03 16:24:13.680: E/AndroidRuntime(11038):    at android.app.ActivityThread.access$600(ActivityThread.java:126)
06-03 16:24:13.680: E/AndroidRuntime(11038):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1172)
06-03 16:24:13.680: E/AndroidRuntime(11038):    at android.os.Handler.dispatchMessage(Handler.java:99)
06-03 16:24:13.680: E/AndroidRuntime(11038):    at android.os.Looper.loop(Looper.java:137)
06-03 16:24:13.680: E/AndroidRuntime(11038):    at android.app.ActivityThread.main(ActivityThread.java:4586)
06-03 16:24:13.680: E/AndroidRuntime(11038):    at java.lang.reflect.Method.invokeNative(Native Method)
06-03 16:24:13.680: E/AndroidRuntime(11038):    at java.lang.reflect.Method.invoke(Method.java:511)
06-03 16:24:13.680: E/AndroidRuntime(11038):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
06-03 16:24:13.680: E/AndroidRuntime(11038):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
06-03 16:24:13.680: E/AndroidRuntime(11038):    at dalvik.system.NativeStart.main(Native Method)

由于会导致存根错误并且不被亚马逊推荐,我无法将jar文件添加到订单和导出中。

他们说当应用程序安装时,它应该从设备中选择api,而不是在应用程序中搜索类文件,这导致了这个问题。

我尝试过从eclipse IDE构建,也尝试过手动使用ANT。

3个回答

2
请检查您的manifeat文件,您可能已经将以下代码放在application标签外部。
  <amazon:enable-feature
        android:name="com.amazon.device.messaging"
        android:required="true" />

这些行必须在application标签内。

如果您使用的是Android Studio,则应该记住这一点:

从这个进行更改:

dependencies {
    compile files('libs/amazon-device-messaging-1.0.1.jar')
}

转换为:

dependencies {
    provided files('libs/amazon-device-messaging-1.0.1.jar')
}

谢谢!


Jignesh,我也遇到了同样的问题。实际上,我正在安装有亚马逊应用商店的Android手机上运行相同的应用程序(而不是Kindle平板电脑)。我已经在应用程序中集成了ADM。在Kindle模拟器上它可以正常工作。如果您需要其他信息,请告诉我。 - Gem
我不明白你的问题是什么。 - Jignesh Ansodariya
好的,让我解释一下我的问题:我有一个应用程序,目前已经在Play商店和亚马逊应用商店上线(未针对Kindle进行优化)。现在我想添加推送通知功能,为此我已经添加了ADM代码。现在当我在Kindle模拟器上测试它时,它可以正常工作,但是当我在Android设备上运行它时,它会崩溃,并显示与@dcanh121在问题中提供的相同堆栈跟踪。这很明显。我无法将jar文件添加到订单和导出中,因为它会导致存根错误。那么解决方案是什么呢? - Gem
你应该首先从lib目录中删除jar文件,然后转到“Libraries”选项卡并单击“Add External Jars..”(第二个按钮),从其他目录(项目外部)选择jar文件。希望它能正常工作。 - Jignesh Ansodariya
@JigneshAnsodariya 即使使用相同的标签,在Android Studio中仍会出现相同的错误。有什么想法吗? - Keyur Thumar
显示剩余3条评论

0

我想补充一点,造成这个错误的原因可能是您正在尝试在非Kindle/Fire设备上设置ADM。我来到这里的假设是所有亚马逊商店应用都可以使用ADM,但实际上只有亚马逊设备可以。


0

您在清单文件中缺少以下行

<!-- Your application's API Key -->
<meta-data android:name="AmazonAPIKey" android:value=""/>

<!--  Declare your ADMMessageHandlerBase implementation as a service -->
<service android:name="com.cbsnews.ott.adm.ADMMessageHandler"
    android:exported="false" />

<!-- You must explicitly enable ADM. You must also declare whether your application will run with or without ADM.
If you specify android:required="false", your app must degrade gracefully when ADM is unavailable. -->
<amazon:enable-feature android:name="com.amazon.device.messaging"
    android:required="true" />

<receiver android:name="com.cbsnews.ott.adm.ADMMessageHandler$MessageAlertReceiver"
    android:permission="com.amazon.device.messaging.permission.SEND">
    <intent-filter>
        <action android:name="com.amazon.device.messaging.intent.REGISTRATION" />
        <action android:name="com.amazon.device.messaging.intent.RECEIVE" />
        <category android:name="com.amazonaws.kindletest"/>
    </intent-filter>
</receiver>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接