it-swarm.com.de

Wie kann ich APK auch bei nicht übersetzten Zeichenfolgen unter Android Studio signieren?

Hintergrund

Ich habe kürzlich meine App zu Android-Studio migriert. Ich hatte einige Probleme damit, aber ich habe sie schließlich überwunden.

Das Problem

Wenn ich versuche, ein APK zu signieren, erhalte ich unter Android Studio eine Reihe von Fehlern, die folgendermaßen aussehen:

Error:(16) Error: "..." is not translated in "de" (German), "el" (Greek), "iw" (Hebrew) [MissingTranslation]

(wobei "..." eine Zeichenfolge ist) 

Unten sehe ich nach vielen Fehlern dieser Art folgendes:

Error:Execution failed for task ':app:lintVitalRelease'.
> Lint found fatal errors while assembling a release target.
To proceed, either fix the issues identified by lint, or modify your build script as follows:
...
Android {
    lintOptions {
        checkReleaseBuilds false
        // Or, if you prefer, you can continue to check for errors in release builds,
        // but continue the build even when errors are found:
        abortOnError false
    }
}
...

Die Frage

Ich bin mir nicht sicher, was falsch ist und wie ich es reparieren kann. Bei Eclipse habe ich es sehr leicht gemacht. Fehlende Übersetzungen sollten mich nicht davon abhalten, ein APK zu unterschreiben ... 

Mir scheint es, als ob Lint den Export der APK verhindert, und der Grund ist, dass ich nicht alle Zeichenketten übersetzt habe. Ist das wahr?

Kann mir bitte jemand helfen? Wie kann ich das beheben, so dass Lint mir stattdessen nur Warnungen anzeigt? oder ein Bestätigungsdialogfeld, wenn ich sicher bin, dass ich es tun möchte?

52

Der sauberste Weg, das Problem zu lösen, besteht darin, Lint-Überprüfungen für fehlende Übersetzungen nur für Release-Builds zu deaktivieren.

Fügen Sie Ihrer "build.gradle" -Datei wie folgt hinzu: "disable 'MissingTranslation" ":

Android {
    buildTypes {
        release {
            lintOptions {
                disable 'MissingTranslation'
            }
        }
    }
}
114
yvolk

Mir scheint es, als ob Lint den Export der APK verhindert, und Der Grund ist, dass ich nicht alle Zeichenketten übersetzt habe. Ist dass wahr?

Ja. Standardeinstellung ist lintOptions.abortOnError = true

Kann mir bitte jemand helfen?

Sie sollten die build.gradle-Datei, die sich im Hauptprojektmodul befindet, oder den generischen Ordner öffnen, wenn Sie kein Modul haben. Fügen Sie dann die vorgeschlagenen Zeilen hinzu:

Android {
    lintOptions {
        checkReleaseBuilds false
        // Or, if you prefer, you can continue to check for errors in release builds,
        // but continue the build even when errors are found:
        abortOnError false
    }
}

Einige Lint-Warnungen werden standardmäßig in Studio als Fehler umgewandelt. Ich weiß nicht warum, aber in Bezug auf Übersetzungen ist dies ein Weg, um das "Veröffentlichen" einer App anzuhalten, die die Übersetzung aufgrund von Ergänzungen in letzter Minute unvollständig macht von einigen Texten.

Mit lintOptions checkReleaseBuilds abortOnError setzen Sie die Überprüfung von Lint so, dass sie für Release-Versionen nicht läuft und auch nicht stoppt, wenn ein "Fehler" gefunden wird. Im Folgenden erkläre ich, wo die Lintfehlereinstellungen gefunden werden können. Wenn Sie also weiter gehen möchten, können Sie einen Schritt vorwärts gehen und sie nacheinander lesen. Einige von ihnen enthalten hilfreiche Anweisungen zur Codeoptimierung.

Wie kann ich das beheben, so dass Lint mir stattdessen nur Warnungen anzeigt? oder ein Bestätigungsdialogfeld, wenn ich sicher bin, dass ich es tun möchte?

Es gibt auch eine Option in den Android Studio-Einstellungen, um einen Lint-Fehler in eine Lint-Warnung zu ändern, aber ich teste das nie. Ich wende mich normalerweise an die gradle-Lösung.

Die Option befindet sich unter Settings> Inspections> Android Lint. Um die Suche zu erleichtern, öffnen Sie die Einstellungen und geben Sie bei der Suche (oben) Lint translation ein. Dort können Sie die Übersetzungsoptionen ändern, die auf der linken Seite von Fehlern in Warnungen angezeigt werden. 

Wenn Ihre Fehlerzeichenfolgen nicht übersetzt werden sollen, können Sie auch die XML-Zeichenfolgendateien tools:ignore="MissingTranslation" entweder am Stammelement oder an jeder nicht übersetzbaren Zeichenfolge hinzufügen.

30
madlymad

Einfache Möglichkeit, diesen Fehler zu beheben

Fügen Sie einfach folgenden Code hinzu: Fügen Sie Ihrer build.gradle -Datei "Deaktivieren von" MissingTranslation "hinzu (siehe unten):

...
  Android {
      lintOptions {
          checkReleaseBuilds false
          // Or, if you prefer, you can continue to check for errors in release builds,
          // but continue the build even when errors are found:
          abortOnError false
      }
  }
  ...

ODERSie können auch Folgendes hinzufügen:

Android {
        buildTypes {
            release {
                lintOptions {
                    disable 'MissingTranslation'
                }
            }
        }
    }
5
Snoopy

Sie könnten versuchen, "Translations Editor" zu öffnen und die Zeichenfolge "..." als "Unstranlatable" ..__ festzulegen. Sie müssen auch alle Übersetzungen dieser Zeichenfolge entfernen.

1
valenta

Arbeiten  

             buildTypes {
                        release {
                            lintOptions {
                                checkReleaseBuilds false
                                abortOnError false
                            }
                            minifyEnabled false
                            proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
                        }
                    }
0
Keshav Gera

FWIW: Wenn Sie nicht beabsichtigen, andere Sprachen zu unterstützen, müssen Sie die Fusselprüfungen überhaupt nicht deaktivieren. Manchmal wurde in Ihrem Projekt-Setup (oder einer Bibliothek, die Sie importieren) versehentlich - oder absichtlich - eine Konfiguration zur Unterstützung zusätzlicher Sprachen eingefügt, indem Sie einen Wertordner für diese Sprache wie den folgenden deklarieren:

<your project source folder>/main/res/values-ar

Dies war der Fall für mich, also entfernte ich einfach den Ordner. Wenn Sie jedoch keine Kontrolle über die betreffende Bibliothek haben, können Sie Lint abortOnError wie in der akzeptierten Antwort angegeben deaktivieren oder einen Weg finden, 'bibliotheksimportierte' Ordner irgendwie auszuschließen. Für die letztere Option können Sie hier starten

0
kip2

es gibt viele Lösungen, aber ich habe es versucht

<string name="hello" translatable="false">hello</string>

Dies ist das Ignore-Attribut des Tools-Namespaces in Ihrer Strings-Datei:

<?xml version="1.0" encoding="utf-8"?>
<resources
  xmlns:tools="http://schemas.Android.com/tools"
  tools:ignore="MissingTranslation" >

  <!-- your strings here; no need now for the translatable attribute -->

</resources>

und aus dem Gradle

 release {
            lintOptions {
                disable 'MissingTranslation'
            }
        }

und

Android {
     lintOptions {
        disable 'MissingTranslation'
    }
}