Quel genre de pitfals existent pour Android APK signature?
Avertissement: je connais les principes de base de la signature d'un Apk et j'ai un problème avec l'un de mes projets, et seulement lors de la signature avec Microsoft Windows comme système d'exploitation.
Je suis de la création de mon APK avec Maven et de signer avec le maven-jarsigner-plugin:
<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: Il fonctionne très bien lors de la signature avec Mac OS X. Il échoue uniquement lors de l'utilisation de Windows 7 à signer.
À l'aide de --debug
lors de l'appel de Maven, je vois que la jarsigner est appelé ok et ne rapporte pas d'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:\Work\uiq3\Java\FX-602P-Droid\target\FX-602P-Droid-5.0.0.apk
[DEBUG] (f) arguments = []
[DEBUG] (f) keypass = Atlan.
[DEBUG] (f) keystore = C:\Users\martin.krischik/.keystore
[DEBUG] (f) processAttachedArtifacts = true
[DEBUG] (f) processMainArtifact = true
[DEBUG] (f) project = MavenProject: net.sourceforge.uiq3:FX-602P-Droid:5.0.0 @ C:\Work\uiq3\Java\FX-602P-Droid\pom.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:\Work\uiq3\Java\FX-602P-Droid\target\FX-602P-Droid-5.0.0.apk
[DEBUG] 'cmd.exe /X /C "C:\opt\Java\jdk\1.7.0\bin\jarsigner.exe -keystore C:\Users\martin.krischik/.keystore -storepass '*****' -keypass '*****' -sigfile CERT C:\Work\u
iq3\Java\FX-602P-Droid\target\FX-602P-Droid-5.0.0.apk krischik"'
[INFO] 1 Archiv(e) verarbeitet
[INFO]
Quoi d'autre aurait pu mal?
PS: je viens de remarquer C:\opt\Java\jdk\1.7.0\bin\jarsigner.exe
— A-t-il eu un changement à la jarsigner de 1.6 à 1.7? Et pourquoi serait-Maven utiliser le signataire de 1,7 1,6 projet?
- mise à Jour: C'est en effet un problème avec l'jarsigner. À l'aide de la 1.6 jar-signataire de la ligne de commande fonctionne comme prévu. — Alors, cela devient une maven question: comment spécifier jarsigner à l'utilisation de maven?
- mise à Jour: 1,7 jarsigner utilise un algorithme différent, ce qui est incompatible avec Android.
- C'est à suivre comme un bug ici code.google.com/p/android/issues/detail?id=19567
- Mais je pense que ce doit être fixé dans maven-jarsigner-plugin la même, comme il a été fixé dans ANT déjà, voir: issues.apache.org/bugzilla/show_bug.cgi?id=52344
Vous devez vous connecter pour publier un commentaire.
La solution est d'ajouter ce pour les
<configuration>
de l'maven-jarsigner-plugin:Ant a déjà le soutien direct pour cela, mais le Maven plugin ne fonctionne 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
comprennent:Pour
jarsigner
comprennent:(1024 est le maximum et fonctionne, moins pourrait faire l'affaire)
jarsigner error: java.security.SignatureException: private key algorithm is not compatible with signature algorithm
keytool
args à-sigalg MD5withRSA -keyalg RSA -keysize 1024
a fonctionné pour moi.La solution de Baqueta fonctionne aussi pour moi.
Utiliser ces arguments dans l'utilitaire keytool:
Je suis toujours à l'aide de n'en jarsigner:
Merci, l'APK est compilé et installé sur un périphérique à l'aide de Java 7, enfin!!!
Merci... Il m'a aidé à corriger des problèmes de signature...
Enfin, n'oubliez pas de
zipalign
.J'ai utilisé la même
keytool
etjarsigner
méthodes et le problème a été résolu.