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?

24
demandé sur Peter Mortensen 2012-01-05 11:22:35

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.

45
répondu ATom 2015-10-25 12:45:02

, 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)

10
répondu Eske Rahn 2012-01-22 22:35:29

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!

2
répondu Alejadro Xalabarder 2015-10-25 12:59:44

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.

0
répondu Rajesh Rameshan 2015-10-25 13:00:26