L'erreur indique - «Le nom de l'entrée 'res / layout / test_toolbar.xml' est entré en collision» lors de la création de l'apk signé

17

J'ai mis à jour mon studio Android de 3.5.x à 3.6 aujourd'hui et j'obtiens une erreur lors de la génération de l'apk signé pour la variante de construction affichant le message suivant - Le nom de l'entrée 'res / layout / test_toolbar.xml' est entré en collision Je n'ai pas de disposition nommée comme celle-ci un dans l'ensemble du projet. J'ai une variante de construction personnalisée nommée " stage " et chaque fois que j'essaye de construire une apk signée, elle échoue toujours. Je compte encore trouver une solution. Veuillez m'aider avec ce problème. Merci

Mise à jour: le même problème peut également survenir avec les messages suivants (comme je l'ai trouvé dans AS-3.6.1 ). Ne vous inquiétez donc pas de ce type de messages inconnus et non résolus. Jusqu'à présent, j'ai trouvé deux nouveaux types de messages lors de la génération d'apk signé:

  • Entry name 'kotlin/collections/MapWithDefault.kotlin_metadata' collided
  • Access Denied

La solution est la même. Parfois, vous aurez peut-être besoin de Invalidate Cache and Restartvotre AS pour cela. Faites-moi part de vos constatations. Merci

Saadat
la source

Réponses:

16

Avant de lire la solution ci-dessous, veuillez lire ma mise à jour du 01.04.2020, le problème est plus profond et c'est dans votre code.

J'ai le même problème après cette mise à jour 3.6.

* La solution rapide est: *

  1. supprimer projectFolder \ build
  2. supprimer projectFolder \ debug *
  3. supprimer projectFolder \ release *
  4. supprimer projectFolder \ app \ build
  5. supprimer projectFolder \ app \ build \ debug *
  6. supprimer projectFolder \ app \ build \ release *

Vous devez donc supprimer tous les répertoires de génération, de débogage et de publication.

Notez que vous ne pourrez peut-être pas supprimer tous les répertoires de débogage et de publication , mais vous pouvez supprimer tout son contenu.

UPD:

Je pense qu'ils ont corrigé ce bug aujourd'hui: entrez la description de l'image ici

UPD 03.03.2020: Malheureusement, le bug n'a pas été corrigé.

UPD 01.04.2020: (Pas une blague du 1er avril :))

Depuis un mois, je travaille avec des développeurs d'Android Studio et aujourd'hui, on m'a dit d'utiliser jdk au lieu d'utiliser jre, car une des erreurs profondes dans les journaux l'a dit.

Après avoir défini jdk ( Fichier-> Structure du projet- > Emplacement du SDK- > Emplacement du JDK ) au lieu de jre, j'ai quelques autres erreurs qui ne sont pas affichées dans la "sortie de génération", donc je lance Analyser -> Inspecter le code et j'ai dix-huit erreurs telles que la référence à un mauvais identifiant de vue dans les mises en page, des erreurs d'orientation (salut à tools:ignore="MissingDefaultResource") et des erreurs de manifeste également avec l'orientation: j'ai lu qu'il s'agit d'une nouvelle mise à jour dans 3.6.1 - sur le paysage ou le portrait screenOrientation, corrigée rapidement par Studio avec ceci: <activity tools:ignore="LockedOrientationActivity" />

Lorsque toutes les erreurs ont été corrigées avec Analyser -> Inspecter le code, j'ai réussi à générer l'APK signé à l'aide de jdk, puis à l'aide de jre (juste pour le test).

Donc, en résumé, ce bogue est dû à des erreurs profondes que vous ne pouvez découvrir qu'avec l' Inspect Codeoutil.

Je pense qu'AS ne pensera pas que c'est un bug, je pense qu'ils diront qu'il s'agit d'une nouvelle fonctionnalité pour améliorer votre code. Je pense également que vous devriez essayer d'inspecter votre code même sans définir jdk au lieu de jre.

Recommandation supplémentaire du support AS:

BTW lors de l'exportation d'une releaseconstruction, nous exécutons également lintVitaldes vérifications supplémentaires et des erreurs marquées comme fatal. Cette vérification est chère donc elle ne se produit pas dans les debugbuilds

danyapd
la source
1
Merci beaucoup. Je l'ai déjà résolu. Êtes-vous sûr que c'est une version stable (vraiment)?
Saadat
1
@Saadat non, j'ai vérifié maintenant - bug toujours là.
danyapd
Merci beaucoup. J'allais mettre à jour à nouveau en attendant une correction. @danyapd
Saadat
Je trouve que je dois projectFolder\app\[all flavor folders]aussi supprimer .
drmrbrewer
1
Merci, Build > Rebuild Projectje l'ai corrigé pour moi, dans Android Studio 3.6.2.
gregn3
7

Lors de la génération de l'apk, recherchez le dossier de destination, à partir duquel supprimer output.json et app-debug.apk du dossier de débogage. Essayez de construire le même après cela. AFAIK, c'est un bug pour le studio Android, j'espère qu'ils pourraient résoudre ce problème bientôt :)

Ameena Shafeer
la source
1
Merci pour votre réponse. J'ai déjà fait la même chose et résolu mon problème. :)
Saadat
1
Merci beaucoup!! trouvé cela après 2,5 heures de lutte
Kishita Variya
Merci pour cela, a fonctionné comme un charme
Brian
4

J'ai supprimé les sorties de build précédentes pour la variante de build, y compris le fichier APK. Voilà ce qui m'a aidé

Vladislav Vatrushkin
la source
1
J'ai essayé de supprimer le buildrépertoire dans son ensemble, toujours le même problème. Pouvez-vous expliquer en détail ce que vous avez fait?
Pusparaj
Supprimez-vous également le répertoire de construction à la racine du projet et le répertoire app / build? Dans mon projet, le chemin de sortie d'apk est modifié et je supprime simplement le fichier apk précédent où il se trouvait.
Vladislav Vatrushkin
1

Cela se produit lorsque vous utilisez auto viewBinding, Binding using Kotlin ou la fonction viewBinding de 3.6.

Dans le cas, vous ajoutez des fichiers dont l'élément partage les mêmes identifiants, ViewBinding confond et crée une telle erreur.

Permettez-moi de vous aider par exemple la classe Adapter qui a deux fichiers de mise en page séparés par type de vue:

import kotlinx.android.synthetic.main.frag_subscription_recommend.view.*


override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
   return ViewHolder(
        LayoutInflater.from(parent.context).inflate(
            if (viewType == 1) {
                R.layout.frag_subscription_recommend
            } else
                R.layout.frag_subscription_common,
            parent,
            false
        )
    )
}

onBinding(){
  holder.itemView.id_button_submit.setOnClickListener {}
}

// qui en cas de confusion sur la ressource ou la mise en page complète remplit l'exigence bcoz ont tous deux les mêmes identifiants de bouton. si vous devez utiliser:

 onBinding(){
  holder.itemView.findViewById<Button>(R.id.id_button_submit).setOnClickListener {}
}

qui permettent l'ancienne implémentation.

Faites-moi savoir si cela fonctionne de votre côté?

Jatin Sahgal
la source
1
Désolé, mais le problème venait des répertoires de construction, de débogage et de publication. y compris le fichier json de sortie. Quoi qu'il en soit, merci pour votre réponse
Saadat
1

J'ai eu la même erreur après la mise à jour d'Android Studio et j'ai résolu le problème en ne nettoyant que le projet (Build> Clean Project)! :)

Agathe Casgrain-Cyr
la source