69
votes

Le ciblage de S + (version 31 et supérieure) nécessite qu'une valeur explicite pour Android: exportée soit définie lorsque des filtres d'intention sont présents]

Lors de la débogage de l'application dans Android 12, l'application est écrasée.


0 commentaires

8 Réponses :


101
votes

Android 12 vous obligez à ajouter un morceau de code à votre activité principale

  • Accédez à votre dossier de projet et ouvrez AndroidManifest.xml Fichier

  • Ajoutez le code ci-dessous dans l'activité

    Android: exporté = "true"

  • Exemple

    <activity
         android:name=".MainActivity"
         android:exported="true"
         android:launchMode="singleTop"
         android:theme="@style/LaunchTheme"
     </activity>
    

  • 9 commentaires

    Cette propriété doit être définie dans la balise .


    Pouvez-vous être plus précis sur l'endroit où il faut ajouter?


    Ajouter ce fichier: Android / App / Src / Main / AndroidManifest.xml


    Cela semble résoudre le problème, mais cette réponse nécessite toujours une clarification de ce que signifie ce paramètre et pourquoi définir le vrai et non faux par exemple.


    Des informations claires sont mentionnées dans le document suivant. Lien: développeur.android.com/guide/topics/ manifeste /…


    Pourquoi est-ce nécessaire? Qu'est-ce que Android: exporté = "true" signifie / faire?


    @instanceof plus d'informations sur cet attribut peuvent être trouvées à moyen .com / AndroidDevelopers /…


    Pour être clair, cette réponse n'est pas bonne. Vous avez besoin de cet attribut sur chaque activité avec un filtre d'intention et sur chaque service également. Encore une fois, merci Android pour ces mises à jour inutiles qui cassent des millions de déploiements dans le monde! Tu es des champions!


    Vérifiez également vos dépendances pour les mises à jour. I My Cas, le plugin local_notifications a provoqué l'erreur car l'ancienne version du plugin n'a pas défini la propriété exportée.



    5
    votes

    merci @ Rahul-Kavati.

    Pour Xamarin / Maui, il s'agit d'une propriété sur ActivityAttribute , utilisé comme ceci [Activité (label = "msalActivity", exporté = true)]


    3 commentaires

    Lorsque j'ajoute ceci, je reçois une erreur: System.InvalidOperationException: Attribut en double mais j'ai recherché tout mon code et exporté n'est défini qu'une seule fois. Des idées?


    Peut-être que vous l'avez plus d'une fois?


    C'est un bug de Xamarin Android, github.com/xamarin/xamarin-android/issues/6463 < / a>. Le correctif est uniquement pour VS22 et je cours toujours VS19



    18
    votes

    dans androidmanifest.xml add Android: exported = "true" :

    <manifest ...>
      <application ...>
        <activity
            android:exported="true"
    


    1 commentaires

    Cela a résolu mon problème lors de la construction en flottement, en plaçant Android: exported = "true" dans App / Src / Main / AndroidManifest.xml




    0
    votes

    Si vous utilisez un filtre ou un service d'intention, il faut avoir la propriété Android: Export


    0 commentaires

    1
    votes

    Oui, dans AndroidManifest.xml

     <activity
        android:exported="true" //here it is
        android:name="com.YOU.APP.activities.MainActivity"
        android:launchMode="singleTask"
        android:hardwareAccelerated="true">
        <intent-filter>
            <action android:name="android.intent.action.SEND" />
    
            <category android:name="android.intent.category.DEFAULT" />
    
            <data android:mimeType="text/plain" />
        </intent-filter>
    </activity>
    


    0 commentaires

    3
    votes

    Dans Android 11 et inférieur, lors de la déclaration d'une activité, d'un service ou d'un récepteur de diffusion dans AndroidManifest, vous n'avez pas explicitement déclaré Android: exporté. Étant donné que la valeur par défaut est exportée = true, il vous suffit de déclarer exporté = false lorsque vous ne voulez pas divulguer vers l'extérieur.

    <service android:name="com.example.app.backgroundService"
             android:exported="false">
        <intent-filter>
            <action android:name="com.example.app.START_BACKGROUND" />
        </intent-filter>
    </service>
    

    Android 12 Modifications: Déclaration explicite de l'exportation Les applications qui définissent l'API SDK 31 (Android 12) en tant que SDK Target sur les appareils Android 12 doivent explicitement déclarer expliqués dans des composants tels que l'activité qui a déclaré l'intention-filtre. Sinon, l'erreur suivante se produit et l'installation échoue.

    Targeting S+ (version 10000 and above) requires that an explicit value for
    android:exported be defined when intent filters are present
    The application could not be installed: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED
    Even for apps targeting SDK API 31, components without intent-filter can omit the exported declaration.
    

    Vous devez déclarer explicitement exporté comme suit:

    xxx

    intention -Le filtre est l'une des méthodes pour exposer le composant de l'application à l'extérieur. En effet, le composant de mon application peut être exécuté via la résolution de l'intention implicite.

    En revanche, il existe de nombreux cas où il est utilisé dans le but d'exécuter un composant avec une intention implicite uniquement à l'intérieur de mon application, mais il est exposé à l'extérieur car l'exportation n'est pas définie, ce qui peut affecter la résolution de l'intention implicite. .


    0 commentaires

    1
    votes

    Dans xamarin.android, j'ai fait face à la même chose dans BroadCastReceiver:

        [BroadcastReceiver(Enabled = true, Exported =true)]
        [IntentFilter(new[] { BluetoothDevice.ActionFound, BluetoothDevice .ActionUuid, BluetoothDevice .ExtraRssi})]
        public class BleReceiver : BroadcastReceiver

    et résolu avec le même exporté = true


    0 commentaires