2015-09-02 17 views
10

Sto provando a creare un pacchetto di rilascio firmato per la mia applicazione Android utilizzando Visual Studio 2015 Cordova Tools. Sto usando Cordova 5.1.1, che richiede che fornisca il processo di compilazione con un file build.json, dicendo all'applicazione dove si trova il keystore e quale password sta usando. Tuttavia, quando aggiungo il file build.json, non sono in grado di creare una versione di successo da rilasciare.Impossibile creare pacchetto Android firmato tramite lo studio visivo cordova

ho seguito questa guida: https://github.com/Microsoft/cordova-docs/tree/master/tutorial-package-publish#android

e ottenuto questo errore (con il percorso modificato out):

1> ANDROID_HOME=C:\Program Files (x86)\Android\android-sdk (TaskId:11) 
1> JAVA_HOME=C:\Program Files (x86)\Java\jdk1.7.0_55 (TaskId:11) 
1> \build.json (TaskId:11) 
1> Reading build config file: \build.json (TaskId:11) 
1> \platforms\android\cordova\node_modules\q\q.js:126 (TaskId:11) 
1>      throw e; (TaskId:11) 
1>       ^(TaskId:11) 
1> SyntaxError: Unexpected token  (TaskId:11) 
1>  at Object.parse (native) (TaskId:11) 
1>  at parseOpts (\platforms\android\cordova\lib\build.js:475:27) (TaskId:11) 
1>  at Object.module.exports.run (\platforms\android\cordova\lib\build.js:529:16) (TaskId:11) 
1>  at \platforms\android\cordova\build:36:22 (TaskId:11) 
1>  at _fulfilled (\platforms\android\cordova\node_modules\q\q.js:798:54) (TaskId:11) 
1>  at self.promiseDispatch.done (\platforms\android\cordova\node_modules\q\q.js:827:30) (TaskId:11) 
1>  at Promise.promise.promiseDispatch (\platforms\android\cordova\node_modules\q\q.js:760:13) (TaskId:11) 
1>  at \platforms\android\cordova\node_modules\q\q.js:574:44 (TaskId:11) 
1>  at flush (\platforms\android\cordova\node_modules\q\q.js:108:17) (TaskId:11) 
1>  at process._tickCallback (node.js:355:11) (TaskId:11) 
1> Command finished with error code 1: cmd /s /c ""\platforms\android\cordova\build.bat" --release "--buildConfig=\build.json"" (TaskId:11) 
1>ERROR building one of the platforms : error : cmd: Command failed with exit code 1 
1> You may not have the required environment or OS to build this project (TaskId:11) 
1>MDAVSCLI : error : cmd: Command failed with exit code 1 
1>Done executing task "MdaVsCli" -- FAILED. (TaskId:11) 

Che cosa sto facendo di sbagliato? Sembra che non riesca a paragonare il JSON?

risposta

48

Questo problema è dovuto al fatto che il file build.json predefinito ha una distinta materiali a cui non piace il parser JSON NodeJS. Puoi sistemarlo in molti modi, ma il più semplice è aprire il file usando l'editor Binary di Visual Studio.

Fare clic con il tasto destro del mouse su build.json, selezionare "Apri con ...", quindi selezionare "Editor binario" dall'elenco. Si dovrebbe vedere qualcosa di simile:

enter image description here

Selezionare i primi tre byte come nello screenshot, ed eliminarli, quindi salvare il file. Il parser dovrebbe ora accettare il file e la firma funzionerà come previsto.

+1

Ho avuto lo stesso identico problema e questo lo ha risolto per me, grazie! –

+3

Sei un mago, dlev. – Perfection

+0

Lo stesso per me dopo 4 ore !!! thx – toregua

0

Ho provato anche questo approccio seguendo la stessa documentazione. e ottenere esattamente lo stesso errore.

Dopo aver guardato il android build documentation, vale a dire il Firma tua applicazione manualmente

mi sono reso conto che dovrebbe essere possibile costruire l'applicazione nella modalità di rilascio (vale a dire un APK che non è firmato è generato prima), così ho rimosso build.json e provato questo, e ho avuto errori. Ho fatto alcune ricerche su google e ho trovato questo [post] [2].

[2]: Error when running cordova build –release android In sintesi questo è il mio consiglio.

  1. Rimuovere il file build.json.
  2. Pulisci la soluzione impostandola in modalità di debug e assicurati di avere una build di successo.
  3. Pulire la soluzione impostarlo sulla modalità di rilascio.
  4. Vai alla cartella delle applicazioni per trovare le piattaforme \ android vedrai build.gradle.
  5. Creare un file nuova build-extras.gradle, ho ottenuto questo suggerimento da uno dei sul [post] [2]

    [2]: Error when running cordova build –release android non si vuole essere la modifica del generato automaticamente build.gradle file.

  6. Nella tua formazione extras.gradle messo Android {{lintOptions disable MissingTranslation }}
  7. Ora vai e costruire la vostra soluzione, dovrebbe funzionare e si otterrà un APK cioè senza segno android-release- unsigned.apk nella cartella bin \ Android \ release.
    1. Iscriviti manualmente l'apk seguendo android build - signing your app manually steps
+0

Sapevo che potevo firmarlo manualmente. Voglio che Visual Studio lo faccia automaticamente però. Questo è il motivo per cui non accetterò questo come risposta. – Jacob

+0

L'errore che utilizzo utilizzando il file build.json è esattamente il contrario. Mi chiedo che cosa significhi "Inaspettato token" ", qualcuno del team Microsoft responsabile di ciò dovrebbe dare un'occhiata. –

+0

Un altro trucco è usare build-extras.gradle –

-1

Un altro trucco è quello di sfruttare il sistema di build di Android. Nelle piattaforme \ android metti il ​​file del tuo archivio di chiavi e all'interno di build-extras.gradle. il seguente

 android { 
    lintOptions { 
     checkReleaseBuilds false 
     abortOnError false 
    } 
    signingConfigs { 
     release { 
       keyAlias = "" 
       keyPassword = "yourpassword" // And these must be set to non-empty in order to have the signing step added to the task graph. 
       storeFile = file("yourfile.keystore") 
       storePassword = "yourpassword" 
      } 
     } 
     buildTypes { 
      release { 
       signingConfig signingConfigs.release 
      } 
     } 
}

Se si desidera creare l'illusione di completa automazione allora si potrebbe utilizzare un compito gulp "una fase di pre-build" per copiare il file di archivio chiavi e costruire-extra di file Gradle alle piattaforme \ Android da dove li hai.

0

In aggiunta al motivo @dlev postato ho trovato un altro motivo che potrebbe causare questo:

Io sto usando un percorso contenente i nomi delle cartelle foo\bar. Questo ha funzionato prima, ma ora sembra (non ho idea se il nodo, cordova o qualsiasi altra cosa sia stata aggiornata) questo non funziona più e devi sfuggire al separatore di directory: foo\\bar.

Dopo aver aggiunto questo, posso ricostruire il mio progetto.

Problemi correlati