Amazon SNS Unity - 找不到 GCMBroadcastReceiver

Amazon SNS Unity - Cannot find GCMBroadcastReceiver

我已经在亚马逊上浏览了 SNS 的自述文件,它是 git 回购协议。

注册工作正常,移动设备创建了一个端点。使用 arn 端点发布消息 phone 显示带有以下堆栈跟踪的应用程序崩溃消息:

03-01 19:53:34.781 17484 17484 E AndroidRuntime:java.lang.RuntimeException: Unable to instantiate receiver com.company.appname.GCMBroadcastReceiver: java.lang.ClassNotFoundException: Didn't find class "com.company.animamobile.GCMBroadcastReceiver" on path: DexPathList[[zip file "/data/app/com.company.appname-2/base.apk"],nativeLibraryDirectories=[/data/app/com.company.appname-2/lib/arm, /data/app/com.company.appname-2/base.apk!/lib/armeabi-v7a, /vendor/lib, /system/lib]]

Assets/Plugins/Android 包含所有相关的 .jar 文件,我使用 jar tf 命令检查了亚马逊 jar 文件是否包含 class。它做到了。

我的 AndroidManifest.xml 看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.company.appname"
      android:installLocation="preferExternal"
    android:versionCode="1"
    android:versionName="1.0">

  <supports-screens
      android:smallScreens="true"
      android:normalScreens="true"
      android:largeScreens="true"
      android:xlargeScreens="true"
      android:anyDensity="true"/>

  <uses-sdk android:minSdkVersion="15" />


  <uses-permission android:name="android.permission.INTERNET" />
  <uses-permission android:name="android.permission.GET_ACCOUNTS" />
  <uses-permission android:name="android.permission.WAKE_LOCK" />
  <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

  <permission android:name="com.amazonaws.unity.permission.C2D_MESSAGE"
      android:protectionLevel="signature" />
  <uses-permission android:name="com.amazonaws.unity.permission.C2D_MESSAGE" />


  <application
      android:theme="@android:style/Theme.NoTitleBar"
      android:icon="@drawable/app_icon"
      android:label="@string/app_name"
      android:debuggable="true">

    <activity android:name="com.unity3d.player.UnityPlayerActivity"
              android:label="@string/app_name">
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
        <category android:name="android.intent.category.LEANBACK_LAUNCHER" />
      </intent-filter>
      <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
      <meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="false" />
    </activity>

    <receiver
        android:name="com.company.appname.GCMBroadcastReceiver"
        android:permission="com.google.android.c2dm.permission.SEND" >
      <intent-filter>
        <action android:name="com.google.android.c2dm.intent.RECEIVE" />
        <action android:name="com.google.android.c2dm.intent.REGISTRATION"/>
        <category android:name="com.company.appname" />
      </intent-filter>
    </receiver>

    <service android:name="com.company.appname.GCMIntentService" />
  </application>
</manifest>

[编辑] 在 posting 之前,我决定进一步检查 SO。发现 post 建议添加 google GCM.jar。我在 AndroidManifest 中做了并引用了。应用程序现在没有崩溃,所以我查看了 LogCat 并得到以下信息:

03-01 20:09:31.911  3582  3637 V BroadcastQueue: [background] Process cur broadcast BroadcastRecord{be5a3b5 u0 com.google.android.c2dm.intent.RECEIVE qIdx=4}, state= (APP_RECEIVE) DELIVERED for app ProcessRecord{d9ba83e 20867:com.company.appname/u0a253}
03-01 20:09:31.921 20867 20867 V GCMBroadcastReceiver: onReceive: com.google.android.c2dm.intent.RECEIVE
03-01 20:09:31.921 20867 20867 V GCMBroadcastReceiver: GCM IntentService class: com.company.appname.GCMIntentService
03-01 20:09:31.921 20867 20867 V GCMBaseIntentService: Acquiring wakelock
03-01 20:09:31.921  3582  5879 W ActivityManager: Unable to start service Intent { act=com.google.android.c2dm.intent.RECEIVE flg=0x10 pkg=com.company.appname cmp=com.company.appname/com.activate.gcm.GCMIntentService bqHint=4 (has extras) } U=0: not found

原来我的 android-support-v4.jar 没有包含 WakefullBroadcastReceiver class.

我在浏览亚马逊 java 文件时发现了这一点,发现它的 BroadcastReceiver 正在扩展这一点。在 android-suppotv4.jar 上使用 jar tf 显示这个 class 不存在。我将 android-support-v13.jar 添加到我的项目中。确保我的 class 清单中的路径正确并且问题已解决。