Android maven jarsigner,jarsigner:尝试重命名X但失败了

时间:2011-09-14 19:13:35

标签: android maven-2 maven jarsigner

我想签署一个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 tutorial(我尝试了另一个类似的例子here,但效果相同),并且正在执行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为什么会被签名,如果不是最终.apk被签名?

我尝试添加<destDir>(按照previous SO帖子的建议)将文物移出,但这似乎没有任何影响,可能是由于我没有使用它正确。

有什么建议吗?

干杯

编辑:如果我从错误消息中取出命令并运行该命令,则将'*****'替换为mypassword,它可以正常工作....

2 个答案:

答案 0 :(得分:1)

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

为可能会遇到同样问题的其他人写了tutorial here

答案 1 :(得分:0)

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