web-dev-qa-db-fra.com

Comment signer APK sur Android Studio même avec des chaînes non traduites?

Contexte

J'ai récemment migré mon application vers Android-Studio. J'ai eu quelques problèmes à le faire, mais je les ai finalement surmontés.

Le problème

Pour une raison quelconque, sur Android Studio, lorsque je tente de signer un fichier APK, de nombreuses erreurs ressemblent à ceci:

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

(où "..." est une chaîne) 

Au fond, après de nombreuses erreurs de ce type, je vois ceci:

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

La question

Je ne sais pas ce qui ne va pas et comment je peux le réparer. Sur Eclipse je l'ai fait très facilement. Les traductions manquantes ne devraient pas m'empêcher de signer un APK ... 

Pour moi, il semble que Lint empêche l'exportation de l'APK, et la raison en est que je n'ai pas traduit toutes les chaînes. Est-ce vrai?

Est-ce que quelqu'un peut m'aider s'il vous plait? Comment puis-je résoudre ce problème, de sorte que Lint ne me montre que des avertissements? ou un dialogue de confirmation si je suis sûr de vouloir le faire?

52
android developer

Le moyen le plus propre de résoudre le problème consiste à désactiver les contrôles Lint des traductions manquantes pour les versions validées uniquement.

Pour ce faire, ajoutez "disable 'MissingTranslation" "à votre fichier build.gradle comme indiqué ci-dessous:

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

Il me semble que Lint empêche l'exportation de l'APK, et que la raison est que je n'ai pas traduit toutes les chaînes. Est-ce vrai?

Oui. L'option par défaut est lintOptions.abortOnError = true

Est-ce que quelqu'un peut m'aider s'il vous plait?

Vous devez ouvrir le fichier build.gradle situé dans le module principal du projet ou le dossier générique si vous ne possédez pas de module. Ajoutez ensuite les lignes suggérées:

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

Certains avertissements de Lint sont par défaut considérés comme des erreurs par le studio, je ne sais pas vraiment pourquoi, mais en termes de traduction, je suppose que c'est un moyen "d'arrêter" la publication d'une application que la traduction est incomplète en raison d'ajouts de dernière minute. de certains textes.

Avec le lintOptions checkReleaseBuilds abortOnError, vous indiquez que la vérification de Lint ne doit pas être exécutée pour les versions et que vous ne vous arrêtez pas si une "erreur" est détectée. Ci-dessous, je vous explique où trouver les paramètres d'erreurs Lint. Si vous voulez aller plus loin, vous pouvez aller un pas en avant et les lire un à un. Certains d'entre eux fournissent des instructions utiles pour l'optimisation du code.

Comment puis-je résoudre ce problème, de sorte que Lint ne me montre que des avertissements à la place? ou un dialogue de confirmation si je suis sûr de vouloir le faire?

Il existe également une option dans les paramètres d’Android Studio qui permet de modifier toute erreur Lint en avertissement Lint, mais je ne l’essaie jamais. Je me tourne habituellement vers la solution gradle.

L'option est située à Settings> Inspections> Android Lint. Pour faciliter la recherche des paramètres ouverts et à la recherche (située en haut), saisissez Lint translation, vous pouvez modifier les options de traduction qui apparaissent à gauche des erreurs en avertissements. 

Une autre option si vos chaînes d'erreur ne seront jamais traduites consiste à ajouter vos fichiers de chaîne XML tools:ignore="MissingTranslation" à l'élément racine ou à chaque chaîne non traduisible.

30
madlymad

Un moyen simple de résoudre cette erreur

Ajoutez simplement le code suivant pour ajouter "désactivez" MissingTranslation "" à votre fichier build.gradle comme indiqué ci-dessous:

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

OUVous pouvez également ajouter ceci:

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

Vous pouvez essayer d'ouvrir "Editeur de traductions" et définir la chaîne "..." comme "Incontrôlable" . Vous devez également supprimer toutes les traductions de cette chaîne.

1
valenta

Travail  

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

FWIW: Si vous ne prévoyez pas de prendre en charge d’autres langues, vous n’avez pas besoin de désactiver la vérification des peluches. Parfois, la configuration de votre projet (ou une bibliothèque que vous importez) peut avoir accidentellement - ou intentionnellement - inclus une configuration pour prendre en charge d'autres langues en déclarant un dossier de valeurs pour cette langue, comme par exemple:

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

C'était le cas pour moi alors j'ai simplement supprimé le dossier. Mais si vous n'avez aucun contrôle sur la bibliothèque incriminée, vous avez le choix entre désactiver lint abortOnError comme indiqué dans la réponse acceptée ou trouver un moyen d'exclure les dossiers 'importés par la bibliothèque'. Pour cette dernière option, vous pouvez commencer ici

0
kip2

il y a beaucoup de solution mais j'ai essayé

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

C'est l'attribut ignore de l'espace de noms d'outils dans votre fichier de chaînes, comme suit:

<?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>

et du Gradle

 release {
            lintOptions {
                disable 'MissingTranslation'
            }
        }

et

Android {
     lintOptions {
        disable 'MissingTranslation'
    }
}
0