1

我想签署一个 android .apk,我的个人资料设置如下pom.xml

<profiles>
        <profile><!-- release profile. uses keystore defined in keystore.* properties. signs and zipaligns the app to the target folder-->
            <id>release</id>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>
            <build>
                <defaultGoal>install</defaultGoal>
                <finalName>${project.artifactId}-${project.version}</finalName>
                <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>
                                    <includes>
                                        <include>
                                            ${project.build.directory}/target/${project.artifactId}-${project.version}.apk
                                        </include>
                                    </includes>
                                    <keystore>my-release-key.keystore</keystore>
                                    <storepass>mypasshere</storepass>
                                    <keypass>mypasshere</keypass>
                                    <alias>mykeystore</alias>
                                    <verbose>true</verbose>
                                    <!--<destDir>gen</destDir>-->
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <groupId>com.jayway.maven.plugins.android.generation2</groupId>
                        <artifactId>maven-android-plugin</artifactId>
                        <configuration>
                            <zipalign>
                                <verbose>true</verbose>
                                <skip>false</skip>
                                <!-- defaults to true -->
                                <inputApk>${project.build.directory}/${project.artifactId}-${project.version}.apk</inputApk>
                                <outputApk>${project.build.directory}/MyApp_v${project.version}.apk</outputApk>
                            </zipalign>
                            <sign>
                                <debug>false</debug>
                            </sign>
                        </configuration>
                        <executions>
                            <execution>
                                <id>zipalign</id>
                                <phase>verify</phase>
                                <goals>
                                    <goal>zipalign</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

我在上面使用了Novoda 教程(另一个类似的例子我也尝试过,但效果相同),并且正在执行mvn clean install -Prelease,但是我收到以下错误:

[INFO] jarsigner: attempt to rename C:\android-projects\jameselsey_andsam_branch_mavenbranch\target\LanguageSelection-1.0.0-SNAPSHOT.jar to C:\android-projects\jameselsey_ands
am_branch_mavenbranch\target\LanguageSelection-1.0.0-SNAPSHOT.jar.orig failed
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Failed executing 'cmd.exe /X /C "C:\development\tools\Java\jdk1.6.0_20\jre\..\bin\jarsigner.exe -verbose -keystore my-release-key.keystore -storepass '*****' -keypass '
*****' C:\android-projects\jameselsey_andsam_branch_mavenbranch\target\LanguageSelection-1.0.0-SNAPSHOT.jar mykeystore"' - exitcode 1
[INFO] ------------------------------------------------------------------------

据我所知,重命名失败是因为该特定文件在打包阶段仍在使用中,因此它基本上是锁定的。

我该如何纠正?我不完全确定为什么.jar要签署 a,它不应该只是最终.apk签署的吗?

我尝试添加一个<destDir>(如之前的 SO帖子所建议的)以将人工制品移出,但这似乎没有任何效果,可能是因为我没有正确使用它。

有什么建议么?

干杯

编辑:如果我从错误消息中取出命令并运行它,代替它'*****'mypassword它工作正常......

4

2 回答 2

1

尝试了所有我能想到但无法maven-jarsigner-plugin操作的方法,但是通过使用maven-jar-plugin我能够使用它来签署我的应用程序。不幸的是,该插件略微被弃用,它指的是使用 jarsigner 插件,但它对我有用。

在这里为可能陷入同一问题的其他人编写了一个教程。

于 2011-09-15T17:32:41.217 回答
0

对我来说,解决方案是不使用目标“验证”并且不使用这样的声明: <removeExistingSignatures>true</removeExistingSignatures>

于 2011-09-29T05:27:22.150 回答