sirve samsung qué plugin para p10 funciona como cable android ant

android - samsung - huawei p10 ant+



Android firma con Ant (6)

La solución a largo plazo es parchear la tarea de signjar de Ant:

https://issues.apache.org/bugzilla/show_bug.cgi?id=52344

Los nuevos atributos se agregaron a signjar en Ant 1.8.3, pero el script de construcción de Android (a partir de r19) aún no se ha modificado para utilizarlos:

http://code.google.com/p/android/issues/detail?id=19567

Mientras tanto, "presetdef" puede proporcionar una solución alternativa:

<presetdef name="signjar"> <signjar sigalg="MD5withRSA" digestalg="SHA1" /> </presetdef>

Usando Ant, estoy tratando de construir una aplicación de Android en modo de lanzamiento para su distribución. Mi problema está en el proceso de firma. Creé un keystore y un alias a través de Eclipse usando el asistente Exportar aplicación Android y la aplicación está correctamente firmada si se exporta a través de Eclipse. Cuando intento completar el mismo proceso a través de Ant, hago referencia a mi keystore y alias en mi archivo build.properties:

key.store=C://Users//a512091//.android//release.keystore key.alias=application key.store.password=android key.alias.password=android

El proceso de compilación es exitoso y recibo un archivo Application-release.apk. Optimicé este APK con jarsigner y todos los archivos tienen etiquetas "sm". Esta es la cola de la salida:

jar verified. Warning: This jar contains entries whose certificate chain is not validated.

Cuando intento instalar este APK en un emulador o dispositivo, obtengo lo siguiente:

Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]

Logcat muestra problemas de firma en mi archivo CSS y activos de imagen:

11-07 11:06:20.060: WARN/PackageParser(58): Exception reading assets/www/css/base.css in /data/app/vmdl48898.tmp 11-07 11:06:20.060: WARN/PackageParser(58): java.lang.SecurityException: META-INF/XXXXX.SF has invalid digest for assets/www/res/droidhdpi/favorite_off.png in /data/app/vmdl48898.tmp 11-07 11:06:20.060: WARN/PackageParser(58): at java.util.jar.JarVerifier.verifyCertificate(JarVerifier.java:369) 11-07 11:06:20.060: WARN/PackageParser(58): at java.util.jar.JarVerifier.readCertificates(JarVerifier.java:272) 11-07 11:06:20.060: WARN/PackageParser(58): at java.util.jar.JarFile.getInputStream(JarFile.java:392) 11-07 11:06:20.060: WARN/PackageParser(58): at android.content.pm.PackageParser.loadCertificates(PackageParser.java:337) 11-07 11:06:20.060: WARN/PackageParser(58): at android.content.pm.PackageParser.collectCertificates(PackageParser.java:508) 11-07 11:06:20.060: WARN/PackageParser(58): at com.android.server.PackageManagerService.installPackageLI(PackageManagerService.java:5885) 11-07 11:06:20.060: WARN/PackageParser(58): at com.android.server.PackageManagerService.access$2100(PackageManagerService.java:134) 11-07 11:06:20.060: WARN/PackageParser(58): at com.android.server.PackageManagerService$5.run(PackageManagerService.java:4743) 11-07 11:06:20.060: WARN/PackageParser(58): at android.os.Handler.handleCallback(Handler.java:587) 11-07 11:06:20.060: WARN/PackageParser(58): at android.os.Handler.dispatchMessage(Handler.java:92) 11-07 11:06:20.060: WARN/PackageParser(58): at android.os.Looper.loop(Looper.java:123) 11-07 11:06:20.060: WARN/PackageParser(58): at android.os.HandlerThread.run(HandlerThread.java:60) 11-07 11:06:20.069: ERROR/PackageParser(58): Package com.xxxxx.xxxxx has no certificates at entry assets/www/css/base.css; ignoring!


Parece que puedes estar usando JDK 7 (1.7.0) así que intenta agregar estas opciones cuando firmes con jarsigner:

-digestalg SHA1 -sigalg MD5withRSA


Según la documentación del desarrollador de Android , debe colocar estas propiedades dentro del archivo ant.properties:

$ cat ant.properties key.store=C://Users//a512091//.android//release.keystore key.alias=application key.store.password=android key.alias.password=android


Si está atascado (como yo) con una versión de Ant anterior a la 1.8.3 y Java 7, aquí hay una solución alternativa:

<exec executable="${java.bin.path}/jarsigner"> <arg value="-signedjar"/> <arg value="signed-${app.apk.name}"/> <arg value="-keystore"/> <arg value="my.keystore"/> <arg value="-storepass"/> <arg value="passwd"/> <arg value="-sigalg"/> <arg value="MD5withRSA"/> <arg value="-digestalg"/> <arg value="SHA1"/> <arg value="${app.apk.name}"/> <arg value="my_keystore"/> </exec> <!-- Where old version was: --> <signjar alias="my_keystore" keystore="my.keystore" storepass="passwd" preservelastmodified="true" signedjar="signed-${app.apk.name}"> <path> <fileset dir="." includes="${app.apk.name}" /> </path> </signjar>


Si tiene la versión Ant <1.8.3 ( ant -version ) pruebe este enfoque para el problema con JDK 7 (basado en la respuesta anterior):

  1. Agrega signjarjdk7 a ANDROID_SDK / tools / ant / build.xml

    <macrodef name="signjarjdk7"> <attribute name="jar" /> <attribute name="signedjar" /> <attribute name="keystore" /> <attribute name="storepass" /> <attribute name="alias" /> <attribute name="keypass" /> <attribute name="verbose" /> <sequential> <exec executable="jarsigner" failonerror="true"> <!-- Magic key, always verbose --> <arg line="-verbose -digestalg SHA1 -sigalg MD5withRSA" /> <arg line="-keystore @{keystore} -storepass @{storepass} -keypass @{keypass}" /> <arg line="-signedjar &quot;@{signedjar}&quot;" /> <arg line="&quot;@{jar}&quot; @{alias}" /> </exec> </sequential> </macrodef>

  2. Reemplaza ''signjar'' por ''signjarjdk7'' en ''release'' objetivo ''release'' en el mismo build.xml.

NOTA: Debe definir las propiedades ''key.store.password'' y ''key.alias.password'' para su proyecto (en project.properties o en local.properties).

ACTUALIZACIÓN 1:

Si ha instalado Ant 1.8.3 (o posterior), tiene una mejor solución:

Abra su ANDROID_SDK / tools / ant / build.xml y agregue dos nuevos parámetros - sigalg y digestalg - en la invocación original de ''signjar'':

<signjar sigalg="MD5withRSA" digestalg="SHA1" jar="${out.packaged.file}" signedjar="${out.unaligned.file}" keystore="${key.store}" storepass="${key.store.password}" alias="${key.alias}" keypass="${key.alias.password}" verbose="${verbose}" />

ACTUALIZACIÓN 2: Parece que esta respuesta está en desuso después de que ''signjar'' se reemplazó por ''signapk'' en la última versión de las herramientas de Android SDK.


Usando Ubuntu 14.04 (Trusty Tahr) y Windows, crea un archivo ".keystore".

Este archivo debe generarse, lo que se puede hacer con el comando keytool que viene con Java. Normalmente se puede encontrar en ''C: / Archivos de programa / Java / jre7 / bin''. Que también debe agregarse a su variable PATH.

Vaya a la raíz de su proyecto y use este comando:

Generando un archivo .keystore:

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

Cree un archivo llamado ant.properties en la carpeta "plataformas / android /" ant.properties.

key.store=D://path//to//the//project//keyname.keystore key.alias=alias-name

Crea el archivo APK de compilación:

$ cordova build android --release