【问题标题】:C2DM permission.C2D_MESSAGE gives Installation errorC2DM 权限.C2D_MESSAGE 给出安装错误
【发布时间】: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


【解决方案1】:

给定的打击是我的代码,我已将此代码用于 C2DM,它运行良好。 将您的代码与我给定的代码进行比较,并检查我给予的打击。 1) 您注册 C2DM 的电子邮件地址。 2)检查您的本地服务器。 3)http://code.google.com/android/c2dm/index.html 获取此网址以获取更多信息,并将您的所有代码与这个给定的谷歌教程进行比较,我已经用这个教程完成了。我希望这对你很有帮助。

<?xml version="1.0" encoding="utf-8"?>

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

 <!-- This app has permission to register and receive message -->

<application android:icon="@drawable/icon" android:label="@string/app_name"
    android:debuggable="true" android:theme="@android:style/Theme.NoTitleBar">
    <uses-library android:name="com.google.android.maps" />
    <activity android:name="com.cipl.TennisApp.TennisAppActivity" android:label="@string/app_name">

    </activity>

    <activity android:name=".HomeActivity" android:label="@string/app_name"
        android:screenOrientation="portrait">
    <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

<!-- C2DM service Receive  -->
    <service android:name="com.commonsware.android.c2dm.C2DMReceiver" />

            <receiver android:name="com.google.android.c2dm.C2DMBroadcastReceiver"
                    android:permission="com.google.android.c2dm.permission.SEND">
                    <intent-filter>
                            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
                            <category android:name="com.cipl.TennisApp" />
                    </intent-filter>
                    <intent-filter>
                            <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
                            <category android:name="com.cipl.TennisApp" />
                    </intent-filter>
            </receiver>
    <!-- C2DM service Receive End -->

    <activity android:name="com.google.android.c2dm.NotificationIntent"
        android:label="@string/app_name" android:screenOrientation="portrait"/>

    <activity android:name="com.cipl.More.ChangePasswordActivity"
        android:label="@string/app_name" android:screenOrientation="portrait"/>
    <activity android:name="com.cipl.More.AccountsActivity"
        android:label="@string/app_name" android:screenOrientation="portrait"/>
    <activity android:name="com.cipl.More.DiscussionActivity"
        android:label="@string/app_name" android:screenOrientation="portrait"/>
    <activity android:name="com.cipl.More.MoreListActivity"
        android:label="@string/app_name" android:screenOrientation="portrait"/>
    <activity android:name="com.cipl.More.MessageActivity"
        android:label="@string/app_name" android:screenOrientation="portrait"/>
    <activity android:name="com.cipl.More.AboutUsActivity"
        android:label="@string/app_name" android:screenOrientation="portrait"/>
    <activity android:name="com.cipl.More.ContactUSActivity"
        android:label="@string/app_name" android:screenOrientation="portrait"/>
    <activity android:name="com.cipl.More.BlockUserActivity"
        android:label="@string/app_name" android:screenOrientation="portrait"/>
    <activity android:name="com.cipl.More.CreateNewTopic"
        android:label="@string/app_name" android:screenOrientation="portrait"/>
    <activity android:name="com.cipl.More.AddCommentActivity"
        android:label="@string/app_name" android:screenOrientation="portrait"/>
    <activity android:name="com.cipl.More.PrivacyPolicyActivity"
        android:label="@string/app_name" android:screenOrientation="portrait"/>
    <activity android:name="com.cipl.More.MoreTabActivityGroupNew"
        android:label="@string/app_name" android:screenOrientation="portrait"/>

    <activity android:name="com.cipl.TennisApp.DefaultDisplay"
        android:label="@string/app_name" android:screenOrientation="portrait"/>
    <activity android:name="com.cipl.TennisApp.MatchesListActivity"
        android:label="@string/app_name" android:screenOrientation="portrait"/>
    <activity android:name="com.cipl.TennisApp.PlayersListActivity"
        android:label="@string/app_name" android:screenOrientation="portrait"/>
    <activity android:name="com.cipl.TennisApp.CourtsListActivity"
        android:label="@string/app_name" android:screenOrientation="portrait"/>
    <activity android:name="com.cipl.TennisApp.MatchListDetailsActivity"
        android:label="@string/app_name" android:screenOrientation="portrait"/>
    <activity android:noHistory="true" android:stateNotNeeded="true" android:name="com.cipl.TennisApp.Login"
        android:label="@string/app_name" android:screenOrientation="portrait" android:launchMode="singleInstance"/>
    <activity android:name="com.cipl.Courts.AddCourtActivity"
        android:label="@string/app_name" android:screenOrientation="portrait"/>
    <activity android:name="com.cipl.TennisApp.ForgotPasswordActivity"
        android:label="@string/app_name" android:screenOrientation="portrait"/>
    <activity android:name="com.cipl.TennisApp.InviteForMatchActivity"
        android:label="@string/app_name" android:screenOrientation="portrait"/>
    <activity android:name="com.cipl.TennisApp.SendMessageActivity"
        android:label="@string/app_name" android:screenOrientation="portrait" android:windowSoftInputMode="adjustResize|adjustPan"/>
    <activity android:name="com.cipl.TennisApp.RegistrationActivity"
        android:label="@string/app_name" android:screenOrientation="portrait"/>
    <activity android:name="com.cipl.TennisApp.TabGroupActivity"
        android:label="@string/app_name" android:screenOrientation="portrait"/>
    <activity android:name="com.cipl.TennisApp.TabGroupActivity"
        android:label="@string/app_name" android:screenOrientation="portrait"/>
    <activity android:name="com.cipl.TennisApp.PlayersListActivity"
        android:label="@string/app_name" android:screenOrientation="portrait"/>
    <activity android:name="com.cipl.TennisApp.CourtsListActivity"
        android:label="@string/app_name" android:screenOrientation="portrait"/>
    <activity android:name="com.cipl.TennisApp.HomeTabActivityGroup"
        android:label="@string/app_name" android:screenOrientation="portrait"/>
    <activity android:name="com.cipl.TennisApp.TermsActivity"
        android:label="@string/app_name" android:screenOrientation="portrait"/>




    <activity android:name="com.cipl.Courts.AddCourtActivity"
        android:label="@string/app_name" android:screenOrientation="portrait"/>
    <activity android:name="com.cipl.TennisApp.PlayerProfileActiviy"
        android:label="@string/app_name" android:screenOrientation="portrait"/>
    <activity android:name="com.cipl.Courts.CourtDetailActivity"
        android:label="@string/app_name" android:screenOrientation="portrait"/>


    <activity android:name="com.cipl.Matches.AddMatchActivity"
        android:label="@string/app_name" android:screenOrientation="portrait"/>
    <activity android:name="com.cipl.Matches.AddMatchActivity"
        android:label="@string/app_name" android:screenOrientation="portrait"/>
    <activity android:name="com.cipl.Matches.MatchDetailActivity"
        android:label="@string/app_name" android:screenOrientation="portrait"/>

    <activity android:name="com.cipl.Profile.MyProfile"
        android:label="@string/app_name" android:screenOrientation="portrait"/>
    <activity android:name="com.cipl.Profile.EditMyProfileActivity"
        android:label="@string/app_name" android:screenOrientation="portrait" android:windowSoftInputMode="adjustResize|adjustPan"/>
    <activity android:name="com.cipl.Profile.SkillInfoActivity"
        android:label="@string/app_name" android:screenOrientation="portrait"/>
    <activity android:name="com.cipl.Profile.ProfileTabActivityGroup"
        android:label="@string/app_name" android:screenOrientation="portrait"/>

    <activity android:name="com.cipl.Favorites.FavoritesTabActivityGroup"
        android:label="@string/app_name" android:screenOrientation="portrait"/>
    <activity android:name="com.cipl.Favorites.FavoritesActivity"
        android:label="@string/app_name" android:screenOrientation="portrait"/>

    <!-- <activity android:name="com.cipl.Courts.CourtDetailGetDirectionActivity" 
        android:label="@string/app_name" /> -->


    <activity android:name="com.cipl.TennisApp.SetCurrentLocation"
        android:label="@string/app_name" android:screenOrientation="portrait"/>

    <activity android:name="com.cipl.Courts.DrivingDirection"
        android:label="@string/app_name" android:screenOrientation="portrait"/>

    <activity android:name="com.cipl.Notifications.NotificationTabActivityGroup"
        android:label="@string/app_name" android:screenOrientation="portrait"/>


    <activity android:name="com.cipl.Notifications.ShowAllNotificationActiviry"
        android:label="@string/app_name" android:screenOrientation="portrait"/>


    <!-- AdMobActivity definition -->
    <activity android:name="com.admob.android.ads.AdMobActivity"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
        android:configChanges="orientation|keyboard|keyboardHidden" />
    <!-- Track Market installs -->
    <receiver android:name="com.admob.android.ads.analytics.InstallReceiver"
        android:exported="true">
        <intent-filter>
            <action android:name="com.android.vending.INSTALL_REFERRER" />
        </intent-filter>
    </receiver>

    <meta-data android:value="true" android:name="ADMOB_ALLOW_LOCATION_FOR_ADS"/>
    <!-- The application's publisher ID assigned by AdMob -->
    <meta-data android:value="a14d6f97d8ea9fc" android:name="ADMOB_PUBLISHER_ID" />

</application>
<uses-permission android:name="android.permission.ACCESS_GPS" />
<uses-permission android:name="android.permission.ACCESS_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_OWNER_DATA" />
<uses-permission android:name="android.permission.WRITE_OWNER_DATA" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.UPDATE_DEVICE_STATS"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-24
    • 2018-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-28
    • 2015-01-16
    相关资源
    最近更新 更多