Beim Abrufen des Fehlers wird angezeigt, dass der Eintragsname 'res / layout / test_toolbar.xml' beim Erstellen einer signierten apk kollidiert ist

17

Ich habe mein Android Studio heute von 3.5.x auf 3.6 aktualisiert und beim Generieren einer signierten Apk für die Build-Variante mit der folgenden Meldung wird ein Fehler angezeigt: Eintragsname 'res / layout / test_toolbar.xml' kollidiert Ich habe kein Layout wie dieses eine im ganzen Projekt überhaupt. Ich habe eine benutzerdefinierte Build-Variante namens " stage " und wenn ich versuche, eine signierte apk zu erstellen, schlägt dies immer fehl. Ich zähle noch keine Lösung. Bitte helfen Sie mir bei diesem Problem. Vielen Dank

Update: Das gleiche Problem kann auch bei den folgenden Meldungen auftreten (wie ich es in AS - 3.6.1 gefunden habe ). Machen Sie sich also keine Sorgen über diese Art von unbekannten und nicht auflösbaren Nachrichten. Bisher habe ich beim Generieren von signierten apk zwei neue Arten von Nachrichten gefunden:

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

Lösung ist die gleiche. Manchmal müssen Sie dafür Invalidate Cache and RestartIhren AS. Lassen Sie mich Ihre Ergebnisse wissen. Vielen Dank

Saadat
quelle

Antworten:

16

Bevor Sie die unten stehende Lösung lesen, lesen Sie bitte mein Update vom 01.04.2020. Das Problem ist tiefer und befindet sich in Ihrem Code.

Ich habe das gleiche Problem nach diesem 3.6-Update.

* Die schnelle Lösung ist: *

  1. Löschen Sie projectFolder \ build
  2. Löschen Sie projectFolder \ debug *
  3. Löschen Sie projectFolder \ release *
  4. Löschen Sie projectFolder \ app \ build
  5. Löschen Sie projectFolder \ app \ build \ debug *
  6. Löschen Sie projectFolder \ app \ build \ release *

Sie müssen also alle Build-, Debug- und Release-Verzeichnisse löschen.

Beachten Sie, dass Sie möglicherweise nicht ganze Debug- und Release- Verzeichnisse löschen können, aber Sie können den gesamten Inhalt löschen.

UPD:

Ich denke, sie haben diesen Fehler heute behoben: Geben Sie hier die Bildbeschreibung ein

UPD 03.03.2020: Leider wurde der Fehler nicht behoben.

UPD 01.04.2020: (Nicht 1. April Witz :))

Seit einem Monat habe ich mit Android Studio-Entwicklern zusammengearbeitet und heute wurde mir gesagt, ich solle jdk anstelle von jre verwenden, weil einer der tiefgreifenden Fehler in den Protokollen dies sagte.

Nachdem ich jdk ( Datei-> Projektstruktur-> SDK-Speicherort-> JDK- Speicherort) anstelle von jre festgelegt habe, habe ich einige andere Fehler, die nicht in "Build-Ausgabe" angezeigt wurden, also starte ich Analysieren -> Code überprüfen und erhalte achtzehn Fehler B. Verweis auf falsche Ansichts-ID in Layouts, Fehler bei der Ausrichtung (hi to tools:ignore="MissingDefaultResource") und Fehler im Manifest auch bei der Ausrichtung: Ich habe gelesen, dass dies ein neues Update in 3.6.1 ist - über Quer- oder Hochformat screenOrientation, das von Studio schnell behoben wurde: <activity tools:ignore="LockedOrientationActivity" />

Wenn alle Fehler mit Analysieren -> Code überprüfen behoben wurden, habe ich erfolgreich signierte APK mit jdk und dann mit jre generiert (nur zum Testen).

Zusammenfassend lässt sich sagen, dass dieser Fehler auf tiefe Fehler zurückzuführen ist, die Sie nur mit dem Inspect CodeTool herausfinden können .

Ich denke, AS wird nicht denken, dass dies ein Fehler ist. Ich denke, sie werden sagen, dass dies eine neue Funktion zur Verbesserung Ihres Codes ist. Ich denke auch, dass Sie versuchen sollten, Ihren Code zu überprüfen, auch ohne jdk anstelle von jre einzustellen.

Zusätzliche Empfehlung vom AS-Support:

Übrigens, wenn releasewir einen Build exportieren , führen wir auch lintVitaleinige zusätzliche Überprüfungen durch und haben einige Fehler markiert als fatal. Diese Überprüfung ist teuer und findet in debugBuilds nicht statt

Danyapd
quelle
1
Vielen Dank. Ich habe es schon gelöst. Sind Sie sicher, dass dies (wirklich) eine stabile Version ist?
Saadat
1
@ Saadat nein, ich habe jetzt nachgesehen - Fehler immer noch da.
Danyapd
Ich danke dir sehr. Ich wollte erneut aktualisieren und erwartete eine Korrektur. @danyapd
Saadat
Ich finde, dass ich auch löschen muss projectFolder\app\[all flavor folders].
drmrbrewer
1
Danke, ein Build > Rebuild ProjectFehler für mich in Android Studio 3.6.2.
gregn3
7

Suchen Sie beim Generieren des apk nach dem Zielordner, aus dem output.json und app-debug.apk aus dem Debug-Ordner gelöscht werden. Versuchen Sie danach, dasselbe zu bauen. AFAIK, es ist ein Fehler für Android Studio, hoffe, sie könnten dies bald beheben :)

Ameena Shafeer
quelle
1
Vielen Dank für Ihre Antwort. Ich habe das auch schon getan und mein Problem gelöst. :)
Saadat
1
Vielen Dank!! fand dies nach 2,5 Stunden Kampf
Kishita Variya
Danke dafür, hat wie ein Zauber funktioniert
Brian
4

Ich habe die vorherigen Build-Ausgaben für die Build-Variante einschließlich der APK-Datei gelöscht. Das hat mir geholfen

Vladislav Vatrushkin
quelle
1
Ich habe versucht, das buildVerzeichnis als Ganzes zu löschen , habe aber immer noch das gleiche Problem. Können Sie näher erläutern, was Sie vollständig getan haben?
Pusparaj
Löschen Sie auch das Build-Verzeichnis im Stammverzeichnis des Projekts und das App / Build-Verzeichnis? In meinem Projekt wird der Ausgabepfad von apk geändert und ich lösche einfach die vorherige apk-Datei, in der sie sich befand.
Vladislav Vatrushkin
1

Dies ist der Fall, wenn Sie die automatische Ansichtsbindung, die Bindung mit Kotlin oder die viewBinding-Funktion von 3.6 verwendet haben.

Wenn Sie Dateien hinzufügen, deren Element dieselbe ID hat, verwirren ViewBinding und erstellen einen solchen Fehler.

Lassen Sie mich Ihnen anhand eines Beispiels helfen. Adapterklasse mit zwei Layoutdateien, die nach Ansicht getrennt sind. Typ:

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 {}
}

// was für den Fall, dass verwirrt wird, welche Ressource oder welches Layout die Anforderung vollständig erfüllt, da beide die gleichen IDs der Schaltfläche haben. falls Sie verwenden müssen:

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

die die alte Implementierung ermöglichen.

Lassen Sie mich wissen, ob dies auf Ihrer Seite funktioniert?

Jatin Sahgal
quelle
1
Sorry, aber das Problem war mit den Build-, Debug- und Release-Verzeichnissen. einschließlich Ausgabe json Datei. Trotzdem danke für deine Antwort
Saadat
1

Ich hatte den gleichen Fehler nach dem Update von Android Studio und ich behebe das Problem, indem ich nur das Projekt bereinige (Build> Clean Project)! :)

Agathe Casgrain-Cyr
quelle