2016-08-25 1 views
-2

Dans mon fichier manifeste, je déclare deux BroadcastReceiver pour mon Activity. Jusqu'à présent, pendant que je travaillais en mode debug, les récepteurs étaient déclarés dans le bloc d'activité et tout allait bien. Comme mon projet est proche de la fin, j'ai décidé de construire un APK signé. Le problème est que je rencontre en studio android me renvoie l'erreur suivante:Déclaration d'un destinataire dans le fichier manifeste d'un projet android Studio

Error:(20) Error: The <receiver> element must be a direct child of the <application> element [WrongManifestParent] 

Si je déplace les blocs récepteurs hors du bloc d'activité, l'APK signé est généré. La conséquence est que j'obtiens une erreur d'exécution lorsque le récepteur est appelé (java.lang.RuntimeException: Impossible d'instancier le récepteur ...).

Comment puis-je faire fonctionner mon application correctement en mode débogage et en mode édition?

+0

Montrez votre manifeste (au moins une partie) –

Répondre

0

Eh bien, comme ma classe de récepteur était une classe intérieure, il n'y avait apparemment pas besoin de le déclarer dans le fichier manifeste (et comme il était une classe intérieure, une erreur a été générée quand je déclarai à l'extérieur le bloc d'activité). Maintenant que j'ai supprimé sa déclaration, l'APK signé est correctement généré et je n'ai plus d'erreur d'exécution.

1

La structure de votre fichier manifeste doit ressembler au code ci-dessous. Vous ne devez pas déclarer receivers ailleurs.

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 

    <!-- -- First Activity -- --> 

    <activity 
     ... 
     ... > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

    <!-- -- Second Activity -- --> 

    <activity 
     ... 
     ... > 
     <meta-data 
      android:name="android.support.PARENT_ACTIVITY" 
      android:value="..." /> 
    </activity> 

    <!-- -- First Receiver -- --> 

    <receiver android:name="..."/> 

    <!-- -- Second Receiver -- --> 

    <receiver android:name="..." android:enabled="true"> 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 
     </intent-filter> 
    </receiver> 

</application>