【发布时间】:2011-06-01 08:08:39
【问题描述】:
我正在尝试按照他们开发人员网站上的示例在我的 Eclipse 中的 Android 应用程序中使用 C2DM。但是在尝试启动我的应用程序时,我不断收到“安装错误:INSTALL_PARSE_FAILED_MANIFEST_MALFORMED”:
[2011-06-01 09:19:09 - xVoice] 安装错误:INSTALL_PARSE_FAILED_MANIFEST_MALFORMED [2011-06-01 09:19:09 - xVoice] 请查看 logcat 输出以获取更多详细信息。 [2011-06-01 09:19:09 - xVoice] 发射取消!
Logcat 给了我以下警告: 06-01 09:18:47.882:WARN/PackageParser(2488):/data/app/vmdl46038.tmp(在二进制 XML 文件第 8 行):错误的类名 Telenet.xVoice.permission.C2D_MESSAGE 在包 Telenet.xVoice
谁能看出问题出在哪里?
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="Telenet.xVoice"
android:versionCode="1"
android:versionName="1.0">
<!-- Only this application can receive the messages and registration result -->
<permission android:name="Telenet.xVoice.permission.C2D_MESSAGE" android:protectionLevel="signature"/>
<uses-permission android:name="Telenet.xVoice.permission.C2D_MESSAGE" />
<!-- This app has permission to register and receive message -->
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<uses-sdk android:minSdkVersion="8"></uses-sdk>
<application android:label="@string/app_name" android:icon="@drawable/logo" android:name="xVoiceApp">
<activity android:name=".xVoice" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name=".xVoiceAppWidgetProvider" android:permission="com.google.android.c2dm.permission.SEND">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
<action android:name="android.net.wifi.STATE_CHANGE" />
<action android:name="android.net.wifi.supplicant.CONNECTION_CHANGE" />
<action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.HOME"/>
</intent-filter>
<!-- Receive the actual message -->
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<category android:name="Telenet.xVoice" />
</intent-filter>
<!-- Receive the registration id -->
<intent-filter>
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="Telenet.xVoice" />
</intent-filter>
<meta-data android:name="android.appwidget.provider" android:resource="@xml/xvoice_appwidgetprovider_info" />
</receiver>
<activity android:name=".xVoicemail"></activity>
<activity android:name=".xCallLog"></activity>
<activity android:name=".xConfiguration"></activity>
<activity android:name=".xVoiceIncomming" android:theme="@android:style/Theme.Dialog" android:noHistory="true" ></activity>
<service android:name=".xVoiceService" />
</application>
</manifest>
在生成的代码中我发现了以下类:
/* AUTO-GENERATED FILE. DO NOT MODIFY.
*
* This class was automatically generated by the
* aapt tool from the resource data it found. It
* should not be modified by hand.
*/
package Telenet.xVoice;
public final class Manifest {
public static final class permission {
/** Only this application can receive the messages and registration result
*/
public static final String C2D_MESSAGE="Telenet.xVoice.permission.C2D_MESSAGE";
}
}
【问题讨论】:
-
我找到了问题的原因。似乎如果你以大写字母开头你的包名,例如package="Telenet.xVoice" 权限的类构建器返回错误。至少在 Android 2.2 中。在我看来,这似乎是一个错误,因为 Google 允许我为 C2DM 注册包名称。
标签: android