maven-jarsigner-plugin: impossibile firmare jar: java.util.zip.ZipException: dimensione compressa della voce non valida


Dall'aggiornamento di un progetto molto vecchio a android-maven-plugin versione 4.1.0 Ho il seguente errore quando firmo il mio apk per il rilascio:

Impossibile firmare jar: java.util.zip.ZipException: voce non valida dimensione compressa

La mia configurazione di firma maven in pom:

  <profiles>
    <profile>
      <id>release</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jarsigner-plugin</artifactId>
            <version>1.2</version>
            <executions>
              <execution>
                <id>signing</id>
                <goals>
                  <goal>sign</goal>
                </goals>
                <phase>package</phase>
                <inherited>true</inherited>
                <configuration>
                  <archiveDirectory></archiveDirectory>
                  <includes>
                    <include>target/*.apk</include>
                  </includes>
                  <keystore>keystore/keystore</keystore>
                  <storepass>sjdjjfdf</storepass>
                  <keypass>sjdjjfdf</keypass>
                  <alias>v110</alias>
                  <arguments>
                    <argument>-sigalg</argument>
                    <argument>MD5withRSA</argument>
                    <argument>-digestalg</argument>
                    <argument>SHA1</argument>
                  </arguments>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>com.simpligility.maven.plugins</groupId>
            <artifactId>android-maven-plugin</artifactId>
            <inherited>true</inherited>
            <configuration>
              <sign>
                <debug>false</debug>
              </sign>
              <zipalign>
                <skip>false</skip>
                <verbose>true</verbose>
                <inputApk>${project.build.directory}/${project.artifactId}-${project.version}.apk</inputApk>
                <outputApk>${project.build.directory}/${project.artifactId}-release-v${project.version}.apk</outputApk>
              </zipalign>
            </configuration>
            <executions>
              <execution>
                <id>alignApk</id>
                <phase>install</phase>
                <goals>
                  <goal>zipalign</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>

Dopo le indagini ho scoperto che:

  • La diversa dimensione era dovuta alla cartella META-INF nell'apk di debug generato.
  • Ciò era dovuto a una firma automatica del debug apk.

Qualcuno ha avuto questo problema e ha trovato una soluzione per questo?

Post correlato, ma non collegato a pom e maven config:

Jarsigner: impossibile firmare jar: java.util.zip.ZipException: dimensione compressa della voce non valida (prevista 463 ma ottenuta 465 byte)

Author: Community, 2015-03-12

1 answers

Dopo aver cercato di rimuovere i file META-INF dalla generazione jar nel profilo di rilascio, ho scoperto che la soluzione più semplice è aggiungere <removeExistingSignatures>true</removeExistingSignatures> a maven-jarsigner-plugin config:

  <profiles>
    <profile>
      <id>release</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jarsigner-plugin</artifactId>
            <version>1.2</version>
            <executions>
              <execution>
                <id>signing</id>
                <goals>
                  <goal>sign</goal>
                </goals>
                <phase>package</phase>
                <inherited>true</inherited>
                <configuration>
                  <!-- Remove debug signature added to the apk automatically since x android plugin version -->
                  <removeExistingSignatures>true</removeExistingSignatures>
                  <archiveDirectory></archiveDirectory>
                  <includes>
                    <include>target/*.apk</include>
                  </includes>
                  <keystore>keystore/keystore</keystore>
                  <storepass>sjdjjfdf</storepass>
                  <keypass>sjdjjfdf</keypass>
                  <alias>v110</alias>
                  <arguments>
                    <argument>-sigalg</argument>
                    <argument>MD5withRSA</argument>
                    <argument>-digestalg</argument>
                    <argument>SHA1</argument>
                  </arguments>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>com.simpligility.maven.plugins</groupId>
            <artifactId>android-maven-plugin</artifactId>
            <inherited>true</inherited>
            <configuration>
              <sign>
                <debug>false</debug>
              </sign>
              <zipalign>
                <skip>false</skip>
                <verbose>true</verbose>
                <inputApk>${project.build.directory}/${project.artifactId}-${project.version}.apk</inputApk>
                <outputApk>${project.build.directory}/${project.artifactId}-release-v${project.version}.apk</outputApk>
              </zipalign>
            </configuration>
            <executions>
              <execution>
                <id>alignApk</id>
                <phase>install</phase>
                <goals>
                  <goal>zipalign</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>
 1
Author: L. G., 2015-03-12 10:13:24