maven-jarsigner-plugin:无法签名jar:java.util.zip.ZipException:无效的条目压缩大小

时间:2015-03-12 10:05:36

标签: android maven android-maven-plugin

由于将一个非常旧的项目更新为android-maven-plugin版本4.1.0,因此在签署我的apk以供发布时出现以下错误:

  

无法签署jar:java.util.zip.ZipException:无效条目   压缩大小

我的maven在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>

经过调查我发现:

  • 不同的大小是由生成的调试apk中的META-INF文件夹引起的。
  • 这是由于调试apk的自动签名。

是否有人遇到此问题并找到解决方案?

相关帖子,但没有链接到pom和maven配置:

jarsigner: unable to sign jar: java.util.zip.ZipException: invalid entry compressed size (expected 463 but got 465 bytes)

1 个答案:

答案 0 :(得分:1)

搜索从发布配置文件中的jar生成中删除META-INF文件后,我发现最简单的解决方案是将<removeExistingSignatures>true</removeExistingSignatures>添加到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>