2011-06-01 50 views
1

我想在他們的開發人員站點上的示例中使用我的Android應用程序中的C2DM。不過,我不斷收到 「安裝錯誤:INSTALL_PARSE_FAILED_MANIFEST_MALFORMED」 嘗試啓動我的應用程序時:C2DM permission.C2D_MESSAGE給出安裝錯誤

[2011-06-01 9時19分09秒 - xVoice]安裝錯誤:INSTALL_PARSE_FAILED_MANIFEST_MALFORMED [2011-06-01 09:19: 09 - xVoice]請查看logcat輸出瞭解更多詳情。 [2011-06-01 09:19:09 - xVoice]發佈取消!

而且logcat中給了我以下警告: 9月6日至1日: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"; 
     } 
    } 
+0

我發現了我的問題的原因。 似乎是,如果你用大寫字母 開始你的包名稱,例如, package =「Telenet.xVoice」 權限的類構建器返回錯誤。 至少在Android 2.2中。 由於Google允許我註冊C2DM的軟件包名稱,在我看來這似乎是一個錯誤。 – Gert 2011-06-01 11:09:07

回答

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">