2015-10-12 90 views
1

对不起,如果这是一个重复问题,它看起来很基本,但我找不到任何答案。 我试图运行在的Kindle Fire平板电脑亚马逊的SNS KindleMobilePushApp演示应用程序,但我得到了以下错误:java.lang.RuntimeException:无法实例化Android存根

10-09 14:19:33.508 3101-3101/? W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x40b05228) 
10-09 14:19:33.508 3101-3101/? E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    java.lang.RuntimeException: Unable to instantiate service com.amazonaws.kindletest.ADMMessageHandler: java.lang.RuntimeException: Stub! 
      at android.app.ActivityThread.handleCreateService(ActivityThread.java:2315) 
      at android.app.ActivityThread.access$1600(ActivityThread.java:127) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1231) 
      at android.os.Handler.dispatchMessage(Handler.java:99) 
      at android.os.Looper.loop(Looper.java:137) 
      at android.app.ActivityThread.main(ActivityThread.java:4533) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:511) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
      at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.RuntimeException: Stub! 
      at com.amazon.device.messaging.ADMMessageHandlerBase.<init>(Unknown Source) 
      at com.amazonaws.kindletest.ADMMessageHandler.<init>(ADMMessageHandler.java:32) 
      at java.lang.Class.newInstanceImpl(Native Method) 
      at java.lang.Class.newInstance(Class.java:1319) 
      at android.app.ActivityThread.handleCreateService(ActivityThread.java:2312) 
            at android.app.ActivityThread.access$1600(ActivityThread.java:127) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1231) 
            at android.os.Handler.dispatchMessage(Handler.java:99) 
            at android.os.Looper.loop(Looper.java:137) 
            at android.app.ActivityThread.main(ActivityThread.java:4533) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:511) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
            at dalvik.system.NativeStart.main(Native Method) 
10-09 14:21:08.359 3101-3101/? E/AndroidRuntime﹕ Handle UnCaght exceptions. KILLING PID: 3101 

这发生在这个类样本项目的默认构造函数:

package com.amazonaws.kindletest; 

import java.util.HashMap; 
import java.util.Map; 
import java.util.Set; 

import android.app.Notification; 
import android.app.Notification.Builder; 
import android.app.NotificationManager; 
import android.app.PendingIntent; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.util.Log; 

import com.amazon.device.messaging.ADMConstants; 
import com.amazon.device.messaging.ADMMessageHandlerBase; 
import com.amazon.device.messaging.ADMMessageReceiver; 

public class ADMMessageHandler extends ADMMessageHandlerBase { 
    private static String savedMessage = null; 
    private static int numberOfMissedMessages = 0; 
    public static boolean inBackground = true; 

    public ADMMessageHandler(){ 
     super(ADMMessageHandler.class.getName()); //ERROR! 
    } 

    ... 
} 

这是从这个类派生于亚马逊的库:

package com.amazon.device.messaging.ADMMessageHandlerBase 

import android.app.IntentService; 
import android.content.Intent; 

public abstract class ADMMessageHandlerBase extends IntentService { 
    public ADMMessageHandlerBase(String var1) { 
     super((String)null); 
     throw new RuntimeException("Stub!"); 
    } 

    protected final void onHandleIntent(Intent var1) { 
     throw new RuntimeException("Stub!"); 
    } 

    protected abstract void onMessage(Intent var1); 

    protected abstract void onRegistrationError(String var1); 

    protected abstract void onRegistered(String var1); 

    protected abstract void onUnregistered(String var1); 
} 

我理解亚马逊的类是旨在通过行为来代替存根ual实现,但是这是如何完成的?这是我的build.gradle:

buildscript { 
    repositories { 
     mavenCentral() // or jcenter() 
    } 

    dependencies { 
     classpath 'com.android.tools.build:gradle:1+' 
    } 
} 
apply plugin: 'com.android.application' 
android { 
    compileSdkVersion 18 
    buildToolsVersion "23.0.1" 

    dependencies { 
     compile fileTree(dir: 'libs', include: '*.jar') 
    } 

    defaultConfig { 
     applicationId "com.amazonaws.kindletest" 
     minSdkVersion 11 
     targetSdkVersion 18 
    } 

    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' 
     } 
    } 
} 

和清单:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:amazon="http://schemas.amazon.com/apk/res/android" 
    package="com.amazonaws.kindletest" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="11" 
     android:targetSdkVersion="18" /> 

    <!-- This permission ensures that no other application can intercept your ADM messages. It 
    should have the form packagename.permission.RECIEVE_ADM_MESSAGE where packagename is the 
    name defined in the "package" property of the manifest tag. --> 
    <permission android:name="com.amazonaws.kindletest.permission.RECEIVE_ADM_MESSAGE" 
     android:protectionLevel="signature"/> 

    <!-- Required permissions --> 
    <uses-permission android:name="com.amazonaws.kindletest.permission.RECEIVE_ADM_MESSAGE"/> 
    <uses-permission android:name="com.amazon.device.messaging.permission.RECEIVE"/> 
    <uses-permission android:name="android.permission.INTERNET"/> 
    <uses-permission android:name="android.permission.WAKE_LOCK"/> 

    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name"   
     android:theme="@style/AppTheme" > 
     <activity 
      android:name="com.amazonaws.kindletest.KindleMobilePushApp" 
      android:screenOrientation="portrait" 
      android:label="@string/title_activity_main" 
      android:launchMode="singleTop" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

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

     <!-- Declare your ADMMessageHandlerBase implementation as a service --> 
     <service android:name="com.amazonaws.kindletest.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.amazonaws.kindletest.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> 

    </application> 

</manifest> 

我在亚马逊的没有成功开发者论坛发布posted about this呢。请让我知道你是否需要更多信息,谢谢。

回答

2

这是为什么你的问题:

你需要的地方亚马逊设备messaging.jar文件来编译您的应用程序,但是你并不需要在运行时将它作为亚马逊的设备将有必要的类和方法。

这里是解决方案:

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

相反,你必须使用

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

你的情况:

... 
     dependencies { 
      compile fileTree(dir: 'libs', include: '*.jar', exclude: 'amazon-device-messaging-1.0.1.jar') 
      provided files('libs/amazon-device-messaging-1.0.1.jar') 
     } 
    ... 
:您可以通过以下替换你的依赖

d重复的答案:Android Studio runtime error Stub! at com.amazon.device.messaging.ADMMessageReceiver.<init>()

相关问题