android - válida - ¿Cómo crear un archivo APK firmado usando la interfaz de línea de comandos de Cordova?




has subido un apk con una firma no válida (7)

Hice una aplicación de muestra llamada checkStatus . Ahora quiero crear un archivo APK firmado. Entonces puedo instalarlo en diferentes dispositivos para mis pruebas.

Para esto, busqué en Google y encontré esta documentation .

Según el documento, cambié a mi directorio de proyecto y ejecuté el siguiente comando:

keytool -genkey -v -keystore key-name.keystore -alias alias-name -keyalg RSA -keysize 2048 -validity 10000

Después de ejecutar el comando anterior, obtuve un archivo llamado key-name.keystore en projectRoot/key-name.keystore .

Y luego projectRoot/platforms/android/key-name.keystore ese archivo en projectRoot/platforms/android/key-name.keystore .

Después de eso, creé un archivo llamado ant.properties y lo projectRoot/platforms/android en projectRoot/platforms/android .

Escribí el siguiente código dentro del archivo:

key.store=projectRoot/key-name.keystore
key.alias=myApp

Después de eso, ejecuté el siguiente comando para liberar

Cordova builds android --release

Está arrojando el siguiente error:

 /home/projectRoot/platforms/android/cordova/node_modules/q/q.js:126
                throw e;
                      ^
Error code 1 for command: ant with args: release,-f,/home/projectRoot/platforms/android/build.xml,-Dout.dir=ant-build,-Dgen.absolute.dir=ant-gen

 Error: /home/projectRoot/platforms/android/cordova/build: Command failed with exit code 8
at ChildProcess.whenDone (/usr/lib/node_modules/cordova/node_modules/cordova-lib/src/cordova/superspawn.js:135:23)
at ChildProcess.EventEmitter.emit (events.js:98:17)
at maybeClose (child_process.js:753:16)
at Process.ChildProcess._handle.onexit (child_process.js:820:5)

Entonces, esta vez, modifiqué el valor de ant.properties en el archivo ant.properties de la siguiente manera.

 key.store=/home/projectRoot/platforms/android/key-name.keystore

Nuevamente, ejecuté el comando cordova build android --release . Lanza el mismo error.

¿Alguien puede decirme qué he hecho mal?


Paso 1:

D:\projects\Phonegap\Example> cordova plugin rm org.apache.cordova.console --save

agregue --save para que elimine el complemento del archivo config.xml .

Paso 2:

Para generar una versión de lanzamiento para Android, primero tenemos que hacer un pequeño cambio en el archivo AndroidManifest.xml que se encuentra en plataformas / android. Edite el archivo y cambie la línea:

<application android:debuggable="true" android:hardwareAccelerated="true" android:icon="@drawable/icon" android:label="@string/app_name">

y cambie android:debuggable a false :

<application android:debuggable="false" android:hardwareAccelerated="true" android:icon="@drawable/icon" android:label="@string/app_name">

A partir de cordova 6.2.0, elimine completamente la etiqueta android: debuggable. Aquí está la explicación de Córdoba:

Explicación de los problemas de tipo "HardcodedDebugMode": es mejor omitir el atributo android: debuggable del manifiesto. Si lo hace, las herramientas insertarán automáticamente android: debuggable = true al crear un APK para depurar en un emulador o dispositivo. Y cuando realiza una compilación de lanzamiento, como Exportar APK, lo configurará automáticamente en falso.

Si, por otro lado, especifica un valor específico en el archivo de manifiesto, las herramientas siempre lo usarán. Esto puede llevar a publicar accidentalmente su aplicación con información de depuración.

Paso 3:

Ahora podemos decirle a cordova que genere nuestra versión de lanzamiento:

D:\projects\Phonegap\Example> cordova build --release android

Luego, podemos encontrar nuestro archivo APK sin firmar en platforms/android/ant-build . En nuestro ejemplo, el archivo era platforms/android/ant-build/Example-release-unsigned.apk

Paso 4:

Nota: Tenemos nuestro almacén de keystoreNAME-mobileapps.keystore en este repositorio de Git, si desea crear otro, continúe con los siguientes pasos.

Generación clave:

Sintaxis:

keytool -genkey -v -keystore <keystoreName>.keystore -alias <Keystore AliasName> -keyalg <Key algorithm> -keysize <Key size> -validity <Key Validity in Days>

Egs:

keytool -genkey -v -keystore NAME-mobileapps.keystore -alias NAMEmobileapps -keyalg RSA -keysize 2048 -validity 10000


keystore password? : xxxxxxx
What is your first and last name? :  xxxxxx
What is the name of your organizational unit? :  xxxxxxxx
What is the name of your organization? :  xxxxxxxxx
What is the name of your City or Locality? :  xxxxxxx
What is the name of your State or Province? :  xxxxx
What is the two-letter country code for this unit? :  xxx

Luego, el almacén de claves se ha generado con el nombre NAME-mobileapps.keystore

Paso 5:

Coloque el almacén de claves generado en

versión antigua cordova

D:\projects\Phonegap\Example\platforms\android\ant-build

Nueva versión cordova

D:\projects\Phonegap\Example\platforms\android\build\outputs\apk

Para firmar el APK sin firmar, ejecute la herramienta jarsigner que también se incluye en el JDK:

Sintaxis:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore <keystorename> <Unsigned APK file> <Keystore Alias name>

Egs:

D:\projects\Phonegap\Example\platforms\android\ant-build> jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore NAME-mobileapps.keystore Example-release-unsigned.apk xxxxxmobileapps

O

D:\projects\Phonegap\Example\platforms\android\build\outputs\apk> jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore NAME-mobileapps.keystore Example-release-unsigned.apk xxxxxmobileapps

Enter KeyPhrase as 'xxxxxxxx'

Esto firma el apk en su lugar.

Paso 6:

Finalmente, necesitamos ejecutar la herramienta de alineación zip para optimizar el APK:

D:\projects\Phonegap\Example\platforms\android\ant-build> zipalign -v 4 Example-release-unsigned.apk Example.apk 

O

D:\projects\Phonegap\Example\platforms\android\ant-build> C:\Phonegap\adt-bundle-windows-x86_64-20140624\sdk\build-tools\android-4.4W\zipalign -v 4 Example-release-unsigned.apk Example.apk

O

D:\projects\Phonegap\Example\platforms\android\build\outputs\apk> C:\Phonegap\adt-bundle-windows-x86_64-20140624\sdk\build-tools\android-4.4W\zipalign -v 4 Example-release-unsigned.apk Example.apk

Ahora tenemos nuestro binario de lanzamiento final llamado example.apk y podemos lanzarlo en Google Play Store.


Cree el archivo APK de cordova release en cmd.

RUTA DEL ARCHIVO DE LA TIENDA CLAVE : ruta del archivo del almacén de claves (F: /cordova/myApp/xxxxx.jks)

CONTRASEÑA DE LA TIENDA CLAVE : xxxxx

ALIAS DE TIENDA CLAVE : xxxxx

CONTRASEÑA ALIAS KEY STORE : xxxxx

RUTA DE zipalign.exe : ruta del archivo zipalign.exe (C: \ Users \ xxxx \ AppData \ Local \ Android \ sdk \ build-tools \ 25.0.2 \ zipalign)

NOMBRE DE APK NO FIRMADO DE ANDROID : android-release-unsigned.apk

NOMBRE DE LA APLICACIÓN DE ANDROID : android-release.apk

Ejecute los siguientes pasos en cmd (ejecutar como administrador)

  1. cordova build --release android
  2. vaya a la ubicación del archivo android-release-unsigned.apk (PROYECTO \ plataformas \ android \ build \ salidas \ apk)
  3. jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore < KEY STORE FILE PATH > < ANDROID NO FIRMADO APK NOMBRE > < KEY STORE ALIAS >
  4. < RUTA DE zipalign.exe > -v 4 < NOMBRE DE APK NO FIRMADO DE ANDROID > < NOMBRE DE APK DE LIBERACIÓN DE ANDROID >

En la documentation actual podemos especificar un build.json con el almacén de claves:

{
     "android": {
         "debug": {
             "keystore": "..\android.keystore",
             "storePassword": "android",
             "alias": "mykey1",
             "password" : "password",
             "keystoreType": ""
         },
         "release": {
             "keystore": "..\android.keystore",
             "storePassword": "",
             "alias": "mykey2",
             "password" : "password",
             "keystoreType": ""
         }
     }
 }

Y luego, ejecute el comando con --buildConfig argumente, de esta manera:

cordova run android --buildConfig

Para Windows, he creado un archivo build.cmd :

(reemplace la ruta del almacén de claves y el alias)

Para Córdoba:

@echo off 
set /P spassw="Store Password: " && set /P kpassw="Key Password: " && cordova build android --release -- --keystore=../../local/my.keystore --storePassword=%spassw% --alias=tmpalias --password=%kpassw%

Y para Ionic:

@echo off 
set /P spassw="Store Password: " && set /P kpassw="Key Password: " && ionic build --prod && cordova build android --release -- --keystore=../../local/my.keystore --storePassword=%spassw% --alias=tmpalias --password=%kpassw%

Guárdelo en el directorio de ptoject, puede hacer doble clic o abrirlo con cmd.


Una actualización de @malcubierre para Cordova 4 (y posterior) -

Cree un archivo llamado release-signing.properties y póngalo en la APPFOLDER\platforms\android

Contenido del archivo: editar después = para todos excepto la segunda línea

storeFile=C:/yourlocation/app.keystore
storeType=jks
keyAlias=aliasname
keyPassword=aliaspass
storePassword=password

Entonces este comando debería construir una versión de lanzamiento:

cordova build android --release

En cordova 6.2.0 , tiene una manera fácil de crear una versión de lanzamiento. consulte otros pasos aquí Pasos 1, 2 y 4

cd cordova/ #change to root cordova folder
platforms/android/cordova/clean #clean if you want
cordova build android --release -- --keystore="/path/to/keystore" --storePassword=password --alias=alias_name #password will be prompted if you have any

##Generated signed apk from commandline
#variables
APP_NAME=THE_APP_NAME
APK_LOCATION=./
APP_HOME=/path/to/THE_APP
APP_KEY=/path/to/Android_key
APP_KEY_ALIAS=the_alias
APP_KEY_PASSWORD=123456789
zipalign=$ANDROID_HOME/build-tools/28.0.3/zipalign

#the logic
cd $APP_HOME
cordova build --release android
cd platforms/android/app/build/outputs/apk/release
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore $APP_KEY ./app-release-unsigned.apk $APP_KEY_ALIAS <<< $APP_KEY_PASSWORD
rm -rf "$APK_LOCATION/$APP_NAME.apk"
$zipalign -v 4 ./app-release-unsigned.apk "$APK_LOCATION/$APP_NAME.apk"
open $APK_LOCATION
#the end






ant