Bonjour, j'essaie d'expérimenter avec gcm mais je ne parviens pas à le faire fonctionner. Je ne sais pas où je m'en mêle, voici l'erreur que j'obtiens. J'essaie de déployer mon application directement sur le périphérique et de déboguer à partir de là, mais chaque fois que j'essaie de le déployer, cette erreur se produit
Waiting for device.
Target device: HT24LW108632
Uploading file
local path: D:\Data\Android\AndroidTest\out\production\AndroidTest\AndroidTest.apk
remote path: /data/local/tmp/Android.Test
Installing Android.Test
DEVICE Shell COMMAND: pm install -r "/data/local/tmp/Android.Test"
pkg: /data/local/tmp/Android.Test
Failure [INSTALL_PARSE_FAILED_MANIFEST_MALFORMED]
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="Android.Test"
Android:versionCode="1"
Android:versionName="1.0">
<uses-sdk Android:minSdkVersion="14"/>
<permission
Android:name="Android.Test.permission.C2D_MESSAGE"
Android:protectionLevel="signature" />
<uses-permission Android:name="Android.Test.permission.C2D_MESSAGE" />
<uses-permission Android:name="Android.permission.GET_ACCOUNTS" />
<uses-permission Android:name="Android.permission.WAKE_LOCK" />
<uses-permission Android:name="Android.permission.INTERNET" />
<uses-permission Android:name="com.google.Android.c2dm.permission.RECEIVE" />
<application Android:label="@string/app_name" Android:icon="@drawable/ic_launcher">
<activity Android:name="MainActivity"
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="com.google.Android.gcm.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="Android.Test" />
</intent-filter>
</receiver>
<service Android:name=".GCMIntentService" />
</application>
</manifest>
Mon appareil est HTC OneX
S'il vous plaît guider comme je suis nouveau poisson dans Android Sea.
Edit-1: J'ai remarqué que si je commente cette ligne ci-dessous, l'application est déployée et exécutée, mais je ne peux évidemment pas avancer sans la permission mentionnée ci-dessous ... aidez-moi s'il vous plaît ....
<permission Android:name="Android.Test.permission.C2D_MESSAGE" Android:protectionLevel="signature" />
Changer le paquet de noms avec des lettres majuscules en petites lettres.
Changer votre
Android:name="MainActivity"
&AGRAVE;
Android:name=".MainActivity"
OU ajoute le nom complet du paquet en minuscule avant le nom de votre classe
Android:name="thepackage.MainActivity"
Changez tous les attributs nommés Android:name
dans les balises activity
comme je l’ai suggéré.
Au lieu de:
<permission Android:name="Android.permission.C2D_MESSAGE" Android:protectionLevel="signature"/>
à:
<uses-permission Android:name="Android.permission.C2D_MESSAGE" Android:protectionLevel="signature"/>
Essayez ça.
<activity Android:name="MainActivity"
devrait être formé comme
<activity Android:name="com.company.appname"
pour ce faire sans erreurs, accédez au package (clic droit)> Outils Android> renommer le package d'application
essayez d'écrire le nom de l'activité suivi de "." Au lieu de
<activity Android:name="MainActivity"
Android:label="@string/app_name">
utilisation
<activity Android:name=".MainActivity"
Android:label="@string/app_name">
J'ai rencontré ce même problème dans le studio Android
ce qui résout cela est de laisser le domaine d’entreprise être composé uniquement de petites lettres
Il y a un problème à ce sujet: http://code.google.com/p/Android/issues/detail?id=37658 Les lettres majuscules ne peuvent pas être utilisées dans les noms de package dans les autorisations. Vous êtes (comme moi) dans une situation difficile lorsque vous avez déployé une application avec un nom de paquet comme celui-ci et que vous devez utiliser GCM .J'ai essayé d'utiliser une sorte de permission abrégée:
<permission Android:name=".permission.C2D_MESSAGE" Android:protectionLevel="signature" />
<uses-permission Android:name=".permission.C2D_MESSAGE" />
J'ai aussi défini le service de la même manière. Il devait être dans le package d'application . Cela a fonctionné sur Android 4.3. Probablement sur 4.2 également. Je sais que sur 4.0.3 ce n'était pas le cas.
assurez-vous que le nom de votre colis est en lettres minuscules ...... a fonctionné pour moi
Dans mon cas, le nom du paquet n'a été mentionné qu'en lettres minuscules. Mais pour quelques activités, je l’ai nommée avec le nom partiel i.e Android:name=".ContactUs"
. Après je l'ai résolu en préfixant le nom complet du paquet avant tous les noms d'activité, de service et de fournisseur de diffusion dans le fichier manifeste.
Code de travail
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android" package="vcan.doit.com">
<!-- To auto-complete the email text field in the login form with the user's emails -->
<uses-permission Android:name="Android.permission.GET_ACCOUNTS" />
<uses-permission Android:name="Android.permission.READ_PROFILE" />
<uses-permission Android:name="Android.permission.READ_CONTACTS" />
<application
Android:allowBackup="true"
Android:icon="@mipmap/ic_launcher"
Android:label="@string/app_name"
Android:roundIcon="@mipmap/ic_launcher_round"
Android:supportsRtl="true"
Android:theme="@style/Theme.DesignDemo">
<activity
Android:name="vcan.doit.com.LoginActivity"
Android:label="@string/app_name">
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.DEFAULT" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
Android:name="vcan.doit.com.MainActivity"
Android:theme="@style/Theme.DesignDemo" />
<activity
Android:name="vcan.doit.com.CheeseDetailActivity"
Android:parentActivityName="vcan.doit.com.MainActivity">
<meta-data
Android:name="Android.support.PARENT_ACTIVITY"
Android:value="vcan.doit.com.MainActivity" />
</activity>
<service Android:name="vcan.doit.com.PushNotification.MyAndroidFirebaseMsgService">
<intent-filter>
<action Android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
<service Android:name="vcan.doit.com.PushNotification.MyAndroidFirebaseInstanceIdService">
<intent-filter>
<action Android:name="com.google.firebase.INSTANCE_ID_EVENT" />
</intent-filter>
</service>
<activity
Android:name="vcan.doit.com.AboutUs"
Android:label="@string/abt_us"
Android:parentActivityName="vcan.doit.com.MainActivity">
<meta-data
Android:name="Android.support.PARENT_ACTIVITY"
Android:value="vcan.doit.com.MainActivity" />
</activity>
<activity
Android:name="vcan.doit.com.ContactUs"
Android:label="@string/contact_us"
Android:parentActivityName="vcan.doit.com.MainActivity">
<meta-data
Android:name="Android.support.PARENT_ACTIVITY"
Android:value="vcan.doit.com.MainActivity" />
</activity>
<activity Android:name="vcan.doit.com.WriteToUs"
Android:label="@string/write_us"
Android:parentActivityName="vcan.doit.com.MainActivity">
<meta-data
Android:name="Android.support.PARENT_ACTIVITY"
Android:value="vcan.doit.com.MainActivity" />
</activity>
</application>
écrivez le nom du paquet Java et le nom de tous les dossiers en minuscule, cela fonctionnera bien ...