Welche Art von Pitfals gibt es für die Android-APK-Signierung?

Haftungsausschluss: Ich kenne die Grundlagen der Unterzeichnung eines APKs und ich habe ein Problem mit nur einem meiner Projekte und nur bei der Anmeldung mit Microsoft Windows als das Betriebssystem.

Ich baue meine APK mit Maven und unterschreibe sie mit dem mavenjarsigner-plugin:

  • AndroidStudio: Das Symbol MainActivity kann nicht aufgelöst werden
  • Auf Android wie mache ich seltsam geformte Clipping-Bereiche?
  • Android: getLastKnownLocation out-of-date - wie man die Standortaktualisierung erzwingt?
  • Broadcast-Receiver für verpasste Anrufe in Android
  • Ist SDK für NFC Leser / Schreiber acr122u Gerät erforderlich, um lesen / schreiben Anwendung?
  • View getVisibility () isShown () gibt falsche Sichtbarkeit zurück
  • <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> 

    Jetzt mit einem meiner Projekte bekomme ich folgende Fehlermeldung beim Versuch, die Anwendung zu installieren und zu starten:

     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] 

    Wie ich schon im ersten Satz gesagt habe: Es funktioniert gut bei der Anmeldung mit Mac OS X. Es scheitert nur bei der Verwendung von Windows 7 zu unterzeichnen.

    Mit --debug beim Aufruf von Maven Ich sehe, dass der Jarsigner heißt ok und berichtet kein Fehler:

     [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] 

    Was hätte sonst noch schief gehen können

    PS: Ich habe gerade C:\opt\Java\jdk\1.7.0\bin\jarsigner.exeC:\opt\Java\jdk\1.7.0\bin\jarsigner.exe es eine Änderung an der Jarsigner von 1.6 bis 1.7? Und warum sollte Maven den 1.7-Signierer für ein 1.6-Projekt nutzen?

  • Warum akzeptiert AlertDialog.Builder (Kontextkontext) nur Aktivität als Parameter?
  • NavigationView Wurffehler: Keine Ressource Bezeichner gefunden für Attribut 'Menü' im Paket
  • Realm: Verwenden Sie ein oder mehrere Realms in einer App (und ein oder mehrere Schemata)
  • Wie kann ich verhindern, dass Android Studio 2.0 nach der Deinstallation von App vom Gerät einen kompletten Clean-Build macht?
  • Android: Wie kann man Videos von Assets abspielen?
  • Welches Intervall soll ich zwischen jedem WiFi-Scan auf Android verwenden?
  • 4 Solutions collect form web for “Welche Art von Pitfals gibt es für die Android-APK-Signierung?”

    Die Lösung fügt dies der <configuration> des maven-jarsigner-plugins hinzu:

     <arguments> <argument>-sigalg</argument><argument>MD5withRSA</argument> <argument>-digestalg</argument><argument>SHA1</argument> </arguments> 

    Ameise hat bereits direkte Unterstützung dafür, aber das Maven Plugin nicht.

    Es ist sehr schwierig, Informationen über die Verwendung mit 1.7 zu finden, aber einmal gefunden, es ist vernünftig einfach:

    Für keytool gehören:

     -sigalg SHA1withDSA -keyalg DSA -keysize 1024 

    Für jarsigner gehören:

     -sigalg SHA1withDSA -digestalg SHA1 

    (1024 ist das Maximum und funktioniert, weniger könnte der Trick tun)

    Die Lösung von Baqueta funktioniert auch für mich.

    Verwenden Sie diese Argumente im Keytool:

     -sigalg MD5withRSA -keyalg RSA -keysize 1024 

    Ich benutze es immer noch in jarsigner:

     -sigalg MD5withRSA -digestalg SHA1 

    Vielen Dank, die APK kompiliert und installiert auf einem Gerät mit Java 7, endlich!

    Vielen Dank … Es hat mir bei der Korrektur von Signierungsproblemen geholfen …

     jarsigner -verbose -sigalg SHA1withRSA -digestalg keytool -sigalg MD5withRSA -keyalg RSA 

    Schließlich vergiss du nicht zu zipalign .

    Ich habe ähnliche keytool und jarsigner Methoden und das Problem wurde gelöst.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.