これらの Maven 設定を使用してアプリに署名しました。
<profiles>
<profile>
<id>sign</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>/home/markus/.android/release.keystore</keystore>
<storepass>mypass</storepass>
<keypass>mypass</keypass>
<alias>androidreleasekey</alias>
<arguments>
<argument>-sigalg</argument>
<argument>MD5withRSA</argument>
<argument>-digestalg</argument>
<argument>SHA</argument>
</arguments>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>com.jayway.maven.plugins.android.generation2</groupId>
<artifactId>android-maven-plugin</artifactId>
<inherited>true</inherited>
<configuration>
<sign>
<debug>false</debug>
</sign>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
ここからこの情報を取得しました: http://code.google.com/p/maven-android-plugin/wiki/SigningAPKWithMavenJarsigner。しかし、アプリを携帯電話 (Android 2.1) にデプロイしているときに、常にこのエラー メッセージ "INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION" が表示され、電話に "アプリがインストールされていません" というメッセージが表示されました。私はここで説明されているこれらの提案を試しました (さらにそれ以上): 'App not Installed' Error on Android . しかし、これらの解決策はどれもうまくいきませんでした。LogCat には次のエラーが表示されます。
12-27 21:01:28.177: W/PackageParser(1165): java.lang.SecurityException: /data/app/vmdl60304.tmp failed verification of META-INF/ANDROIDR.SF
12-27 21:01:28.177: W/PackageParser(1165): at java.util.jar.JarVerifier.verifyCertificate(JarVerifier.java:350)
12-27 21:01:28.177: W/PackageParser(1165): at java.util.jar.JarVerifier.readCertificates(JarVerifier.java:273)
12-27 21:01:28.177: W/PackageParser(1165): at java.util.jar.JarFile.getInputStream(JarFile.java:416)
12-27 21:01:28.177: W/PackageParser(1165): at android.content.pm.PackageParser.loadCertificates(PackageParser.java:317)
12-27 21:01:28.177: W/PackageParser(1165): at android.content.pm.PackageParser.collectCertificate
半日ほどいじくり回した後、上記のプロファイルがどういうわけか署名を破壊していることに気付きました。この部分を通常のビルド セクションに追加すると、次のようになります。
<plugin>
<groupId>com.jayway.maven.plugins.android.generation2</groupId>
<artifactId>android-maven-plugin</artifactId>
<inherited>true</inherited>
<configuration>
<sign>
<debug>false</debug>
</sign>
</configuration>
</plugin>
Mavenが手動でアプリをインストールして署名している間、アプリに署名しないようにするには、次のようにします。
jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore /home/markus/.android/release.keystore myapp-1.0.apk androidreleasekey
どうにか管理できてよかったのですが、スマートフォンの Maven の署名プロファイルで機能しない理由を誰か説明してもらえますか? そして興味深いのは、Maven を使用していても、Android 3.0 のタブレットにいつでもインストールできたことです。Android 3.0 Galaxy Tab では Maven で動作し、Android 2.1 フォンでは動作しないのはなぜですか?
ちなみに、私のスマートフォンでも、デバッグ展開は常に機能していました。