Quel genre de pitfals existent pour la signature Android APK?
Avertissement: je connais les bases de la signature D'un APKs et j'ai un problème avec un seul de mes projets et seulement lors de la signature avec Microsoft Windows comme système d'exploitation.
Je construis mon APK Avec Maven et les signe avec le plugin Maven-jarsigner:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jarsigner-plugin</artifactId>
<executions>
<execution>
<id>signing</id>
<goals>
<goal>sign</goal>
</goals>
<phase>package</phase>
<inherited>true</inherited>
<configuration>
<archive>target/${project.build.finalName}.apk</archive>
<sigfile>CERT</sigfile>
<keystore>${env.HOME}/.keystore</keystore>
<storepass>${env.KEY_STOREPASS}</storepass>
<keypass>${env.KEY_KEYPASS}</keypass>
<alias>${env.KEY_ALIAS}</alias>
</configuration>
</execution>
</executions>
</plugin>
Maintenant avec l'un de mes projets j'obtiens l'erreur suivante lorsque vous essayez d'installer et de démarrer l'application:
1360 KB/s (2057872 bytes in 1.477s)
pkg: /data/local/tmp/FX-602P-Droid-5.0.0.apk
Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]
Comme je l'ai dit dans la première phrase: cela fonctionne bien lors de la signature avec Mac OS X. Il ne échoue lors de L'utilisation de Windows 7 pour signer.
En utilisant --debug
lors de L'appel de Maven, je vois que le jarsigner est appelé ok et ne signale aucune erreur:
[INFO]
[INFO] --- maven-jarsigner-plugin:1.2:sign (signing) @ FX-602P-Droid ---
[DEBUG] org.apache.maven.plugins:maven-jarsigner-plugin:jar:1.2:
[DEBUG] org.apache.maven:maven-plugin-api:jar:2.0.6:compile
[DEBUG] org.apache.maven:maven-project:jar:2.0.6:compile
[DEBUG] org.apache.maven:maven-settings:jar:2.0.6:compile
[DEBUG] org.apache.maven:maven-profile:jar:2.0.6:compile
[DEBUG] org.apache.maven:maven-model:jar:2.0.6:compile
[DEBUG] org.apache.maven:maven-artifact-manager:jar:2.0.6:compile
[DEBUG] org.apache.maven:maven-repository-metadata:jar:2.0.6:compile
[DEBUG] org.apache.maven:maven-plugin-registry:jar:2.0.6:compile
[DEBUG] org.codehaus.plexus:plexus-container-default:jar:1.0-alpha-9-stable-1:compile
[DEBUG] junit:junit:jar:3.8.1:compile
[DEBUG] classworlds:classworlds:jar:1.1-alpha-2:compile
[DEBUG] org.apache.maven:maven-artifact:jar:2.0.6:compile
[DEBUG] org.codehaus.plexus:plexus-utils:jar:1.5.15:compile
[DEBUG] Created new class realm plugin>org.apache.maven.plugins:maven-jarsigner-plugin:1.2
[DEBUG] Importing foreign packages into class realm plugin>org.apache.maven.plugins:maven-jarsigner-plugin:1.2
[DEBUG] Imported: < project>net.sourceforge.uiq3:FX-602P-Droid:5.0.0
[DEBUG] Populating class realm plugin>org.apache.maven.plugins:maven-jarsigner-plugin:1.2
[DEBUG] Included: org.apache.maven.plugins:maven-jarsigner-plugin:jar:1.2
[DEBUG] Included: junit:junit:jar:3.8.1
[DEBUG] Included: org.codehaus.plexus:plexus-utils:jar:1.5.15
[DEBUG] Excluded: org.apache.maven:maven-plugin-api:jar:2.0.6
[DEBUG] Excluded: org.apache.maven:maven-project:jar:2.0.6
[DEBUG] Excluded: org.apache.maven:maven-settings:jar:2.0.6
[DEBUG] Excluded: org.apache.maven:maven-profile:jar:2.0.6
[DEBUG] Excluded: org.apache.maven:maven-model:jar:2.0.6
[DEBUG] Excluded: org.apache.maven:maven-artifact-manager:jar:2.0.6
[DEBUG] Excluded: org.apache.maven:maven-repository-metadata:jar:2.0.6
[DEBUG] Excluded: org.apache.maven:maven-plugin-registry:jar:2.0.6
[DEBUG] Excluded: org.codehaus.plexus:plexus-container-default:jar:1.0-alpha-9-stable-1
[DEBUG] Excluded: classworlds:classworlds:jar:1.1-alpha-2
[DEBUG] Excluded: org.apache.maven:maven-artifact:jar:2.0.6
[DEBUG] Configuring mojo org.apache.maven.plugins:maven-jarsigner-plugin:1.2:sign from plugin realm ClassRealm[plugin>org.apache.maven.plugins:maven-jarsigner-plugin:1.
2, parent: sun.misc.Launcher$AppClassLoader@214c4ac9]
[DEBUG] Configuring mojo 'org.apache.maven.plugins:maven-jarsigner-plugin:1.2:sign' with basic configurator -->
[DEBUG] (f) alias = krischik
[DEBUG] (f) archive = C:Workuiq3JavaFX-602P-DroidtargetFX-602P-Droid-5.0.0.apk
[DEBUG] (f) arguments = []
[DEBUG] (f) keypass = Atlan.
[DEBUG] (f) keystore = C:Usersmartin.krischik/.keystore
[DEBUG] (f) processAttachedArtifacts = true
[DEBUG] (f) processMainArtifact = true
[DEBUG] (f) project = MavenProject: net.sourceforge.uiq3:FX-602P-Droid:5.0.0 @ C:Workuiq3JavaFX-602P-Droidpom.xml
[DEBUG] (f) removeExistingSignatures = false
[DEBUG] (f) sigfile = CERT
[DEBUG] (f) skip = false
[DEBUG] (f) storepass = !AtlanRhodan!
[DEBUG] (f) verbose = false
[DEBUG] -- end configuration --
[DEBUG] Verarbeite C:Workuiq3JavaFX-602P-DroidtargetFX-602P-Droid-5.0.0.apk
[DEBUG] 'cmd.exe /X /C "C:optJavajdk1.7.0binjarsigner.exe -keystore C:Usersmartin.krischik/.keystore -storepass '*****' -keypass '*****' -sigfile CERT C:Worku
iq3JavaFX-602P-DroidtargetFX-602P-Droid-5.0.0.apk krischik"'
[INFO] 1 Archiv(e) verarbeitet
[INFO]
Quoi d'autre aurait pu mal tourner?
PS: je viens de noter C:optJavajdk1.7.0binjarsigner.exe
- y a-t-il eu un changement au jarsigner de 1.6 à 1.7? Et pourquoi Maven utiliserait-il le 1.7 signer pour un projet 1.6?
4 réponses
La solution est d'ajouter ceci au <configuration>
du plugin Maven-jarsigner:
<arguments>
<argument>-sigalg</argument><argument>MD5withRSA</argument>
<argument>-digestalg</argument><argument>SHA1</argument>
</arguments>
Ant a déjà un support direct pour cela, mais le plugin Maven ne le fait pas.
, Il est très difficile de trouver des informations sur l'utilisation de 1,7, mais une fois trouvé, il est raisonnable simple:
Pour keytool
inclure:
-sigalg SHA1withDSA -keyalg DSA -keysize 1024
Pour jarsigner
inclure:
-sigalg SHA1withDSA -digestalg SHA1
(1024 est le maximum et fonctionne, moins pourrait faire l'affaire)
La solution de Baqueta fonctionne aussi pour moi.
Utilisez ces arguments dans keytool:
-sigalg MD5withRSA -keyalg RSA -keysize 1024
Je l'utilise toujours dans jarsigner:
-sigalg MD5withRSA -digestalg SHA1
Merci, L'APK compilé et installé sur un périphérique utilisant Java 7, enfin!
Je vous Remercie... Cela m'a aidé à corriger les problèmes de signature...
jarsigner -verbose -sigalg SHA1withRSA -digestalg
keytool -sigalg MD5withRSA -keyalg RSA
Enfin, n'oubliez pas de zipalign
.
J'ai utilisé des méthodes similaires keytool
et jarsigner
et le problème a été résolu.