2017-11-02 5 views
0

Ich habe ein Problem, dass ich meine App nur im Debug-Modus erstellen kann. Wenn ich versuche, es bei der Veröffentlichung zu erstellen, entweder mit Android Studio oder ./gradlew assembleRelease bekomme ich die Keystore wurde manipuliert, oder das Passwort war falsch Fehlermeldung.App kann nicht im Freigabemodus erstellt werden - Keystore wurde manipuliert oder das Passwort war falsch

Die Sache ist, ich kann eine signierte generieren, ich habe nur Probleme mit dem Erstellen meiner App im Freigabemodus.

Hier ist, wie ich die Release-Build-Typ in meinem build.gradle konfiguriert:

gradle.taskGraph.whenReady { taskGraph -> 
    if (taskGraph.hasTask(':app:assembleRelase')) { 
     def password = "" 

     if (System.console() == null) { 
      new SwingBuilder().edt { 
       dialog(modal: true, 
         title: "Enter password", 
         alwaysOnTop: true, 
         resizable: false, 
         locationRelativeTo: null, 
         pack: true, 
         show: true 
       ) { 
        vbox { 
         label(text: "Enter password: ") 
         input = passwordField() 
         button(defaultButton: true, text: 'OK', actionPerformed: { 
          password = input.password 
          dispose() 
         }) 
        } 
       } 
      } 
     } else { 
      password = System.console().readPassword("\nEnter password: ") 
      password = new String(password) 
     } 

     if (password.size() <= 0) { 
      throw new InvalidUserDataException("Empty password") 
     } 

     android.signingConfigs.release.storePassword = password 
     android.signingConfigs.release.keyPassword = password 
    } 
} 

Die Funktion oben sollte für den Schlüssel und speichern Passwörter fragen, entweder durch einen Dialog oder Befehlszeile, aber es wird ignoriert .

Bitte, ich muss wissen, ob irgendetwas falsch gemacht wurde oder ob ich etwas vergessen habe.

+0

sicherstellen, dass Ihr Alias ​​ist richtig – Manny265

+0

@ Manny265 es ist. Ich benutze genau denselben Alias, wenn ich eine signierte Apk erzeuge und es funktioniert – AlanC92

Antwort

0

Da Gradle Daemon zu Gradle hinzugefügt wurde, kann es die Funktion System.console() nicht mehr verwenden, es sei denn, Sie fügen das Flag --no-daemon hinzu.

Für die Verwendung von Swing-Features in einem Gradle-Build-Prozess ist es keine gute Übung und zumindest für diesen Fall funktioniert es überhaupt nicht.

Zusammenfassend ist das Beste, was zu tun ist, eine Eigenschaftendatei zu erstellen, die den Alias, die Passwörter und den Pfad der Keystore-Datei enthält und diese Datei natürlich in .gitignore enthält und sicherstellt, dass sich die Keystore-Datei in einem anderen Verzeichnis befindet als das Projekt aus Sicherheitsgründen.

Die Art und Weise der Unterzeichnung Konfigurationseigenschaften aus der Eigenschaften-Datei festgelegt ist in dem folgenden Code dargestellt:

signingConfigs { 
    config { 
     def properties = new Properties() 
     file("my_properties_file.properties").withInputStream { properties.load(it) } 
     keyPassword = properties.getProperty("my.key.password") 
     storePassword = properties.getProperty("my.store.password") 
     keyAlias = properties.getProperty("my.key.alias") 
     storeFile = file(properties.getProperty("my.file.path")) 
    } 
} 
Verwandte Themen