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] ------------------------------------------------------------------------

私が収集できることから、その特定のファイルはパッケージング段階でまだ使用されているため、名前の変更は失敗しているため、本質的にロックされています。

どうすればこれを修正できますか? なぜ a.jarが署名されているのか完全にはわかりませんが、署名されるのは最終的なものだけではありません.apkか?

アーティファクトを移動するために (以前の SO<destDir>投稿で提案されているように)を追加しようとしましたが、おそらく正しく使用していないため、効果がないようです。

助言がありますか?

乾杯

編集:エラーメッセージからコマンドを取り出して実行すると、 に置き換え'*****'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 に答える