Android maven jarsigner, jarsigner: попытка переименовать X, но безуспешно - PullRequest
1 голос
/ 14 сентября 2011

Я хочу подписать 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, разве это не должен быть только последний .apk, который будет подписан?

Я пытался добавить <destDir> (как предложено в предыдущем посте SO ), чтобы убрать артефакты, но, похоже, это не имеет никакого эффекта, возможно, из-за меня не используя его правильно.

Есть предложения?

Приветствия

РЕДАКТИРОВАТЬ : Если я извлекаю команду из сообщения об ошибке и запускаю ее, подставляя '*****' вместо mypassword, она работает нормально ....

Ответы [ 2 ]

1 голос
/ 15 сентября 2011

Перепробовал все, что мог придумать, но не смог заставить maven-jarsigner-plugin работать, однако, используя maven-jar-plugin, я смог подписать свое приложение, используя вместо этого.К сожалению, этот плагин немного устарел и касается использования плагина jarsigner, но он мне помог.

Написал учебник здесь для всех, кто может застрять в этой же проблеме

0 голосов
/ 29 сентября 2011

Для меня решение было не использовать цель «проверить» и не использовать такое утверждение: <removeExistingSignatures>true</removeExistingSignatures>

...