2012-01-05 9 views
24

免責事項:私はAPKに署名するための基本を知っています。私は自分のプロジェクトのうちの1つだけに問題があり、Microsoft WindowsをOSとして署名するときにのみ問題があります。Android APKの署名にはどのような落とし穴がありますか?

私はMavenと私のAPKを構築するとMaven-jarsignerの-プラグインでそれらに署名しています:インストールし、アプリケーションを起動しようとすると、私は次のエラーを取得する私のプロジェクトの一つで今

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jarsigner-plugin</artifactId> 
    <executions> 
     <execution> 
     <id>signing</id> 
     <goals> 
      <goal>sign</goal> 
     </goals> 
     <phase>package</phase> 
     <inherited>true</inherited> 
     <configuration> 
      <archive>target/${project.build.finalName}.apk</archive> 
      <sigfile>CERT</sigfile> 
      <keystore>${env.HOME}/.keystore</keystore> 
      <storepass>${env.KEY_STOREPASS}</storepass> 
      <keypass>${env.KEY_KEYPASS}</keypass> 
      <alias>${env.KEY_ALIAS}</alias> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 

1360 KB/s (2057872 bytes in 1.477s) 
     pkg: /data/local/tmp/FX-602P-Droid-5.0.0.apk 
Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES] 

私が最初の文章で言ったように、Mac OS Xで署名するときはうまく動作します。Windows 7を使用して署名するときにのみ失敗します。 Mavenを呼び出すとき--debugを使用して

私はjarsignerには、[OK]と呼ばれていることを確認し、報告しませんエラー:

[INFO] 
[INFO] --- maven-jarsigner-plugin:1.2:sign (signing) @ FX-602P-Droid --- 
[DEBUG] org.apache.maven.plugins:maven-jarsigner-plugin:jar:1.2: 
[DEBUG] org.apache.maven:maven-plugin-api:jar:2.0.6:compile 
[DEBUG] org.apache.maven:maven-project:jar:2.0.6:compile 
[DEBUG]  org.apache.maven:maven-settings:jar:2.0.6:compile 
[DEBUG]  org.apache.maven:maven-profile:jar:2.0.6:compile 
[DEBUG]  org.apache.maven:maven-model:jar:2.0.6:compile 
[DEBUG]  org.apache.maven:maven-artifact-manager:jar:2.0.6:compile 
[DEBUG]   org.apache.maven:maven-repository-metadata:jar:2.0.6:compile 
[DEBUG]  org.apache.maven:maven-plugin-registry:jar:2.0.6:compile 
[DEBUG]  org.codehaus.plexus:plexus-container-default:jar:1.0-alpha-9-stable-1:compile 
[DEBUG]   junit:junit:jar:3.8.1:compile 
[DEBUG]   classworlds:classworlds:jar:1.1-alpha-2:compile 
[DEBUG] org.apache.maven:maven-artifact:jar:2.0.6:compile 
[DEBUG] org.codehaus.plexus:plexus-utils:jar:1.5.15:compile 
[DEBUG] Created new class realm plugin>org.apache.maven.plugins:maven-jarsigner-plugin:1.2 
[DEBUG] Importing foreign packages into class realm plugin>org.apache.maven.plugins:maven-jarsigner-plugin:1.2 
[DEBUG] Imported: < project>net.sourceforge.uiq3:FX-602P-Droid:5.0.0 
[DEBUG] Populating class realm plugin>org.apache.maven.plugins:maven-jarsigner-plugin:1.2 
[DEBUG] Included: org.apache.maven.plugins:maven-jarsigner-plugin:jar:1.2 
[DEBUG] Included: junit:junit:jar:3.8.1 
[DEBUG] Included: org.codehaus.plexus:plexus-utils:jar:1.5.15 
[DEBUG] Excluded: org.apache.maven:maven-plugin-api:jar:2.0.6 
[DEBUG] Excluded: org.apache.maven:maven-project:jar:2.0.6 
[DEBUG] Excluded: org.apache.maven:maven-settings:jar:2.0.6 
[DEBUG] Excluded: org.apache.maven:maven-profile:jar:2.0.6 
[DEBUG] Excluded: org.apache.maven:maven-model:jar:2.0.6 
[DEBUG] Excluded: org.apache.maven:maven-artifact-manager:jar:2.0.6 
[DEBUG] Excluded: org.apache.maven:maven-repository-metadata:jar:2.0.6 
[DEBUG] Excluded: org.apache.maven:maven-plugin-registry:jar:2.0.6 
[DEBUG] Excluded: org.codehaus.plexus:plexus-container-default:jar:1.0-alpha-9-stable-1 
[DEBUG] Excluded: classworlds:classworlds:jar:1.1-alpha-2 
[DEBUG] Excluded: org.apache.maven:maven-artifact:jar:2.0.6 
[DEBUG] Configuring mojo org.apache.maven.plugins:maven-jarsigner-plugin:1.2:sign from plugin realm ClassRealm[plugin>org.apache.maven.plugins:maven-jarsigner-plugin:1. 
2, parent: [email protected]] 
[DEBUG] Configuring mojo 'org.apache.maven.plugins:maven-jarsigner-plugin:1.2:sign' with basic configurator --> 
[DEBUG] (f) alias = krischik 
[DEBUG] (f) archive = C:\Work\uiq3\Java\FX-602P-Droid\target\FX-602P-Droid-5.0.0.apk 
[DEBUG] (f) arguments = [] 
[DEBUG] (f) keypass = Atlan. 
[DEBUG] (f) keystore = C:\Users\martin.krischik/.keystore 
[DEBUG] (f) processAttachedArtifacts = true 
[DEBUG] (f) processMainArtifact = true 
[DEBUG] (f) project = MavenProject: net.sourceforge.uiq3:FX-602P-Droid:5.0.0 @ C:\Work\uiq3\Java\FX-602P-Droid\pom.xml 
[DEBUG] (f) removeExistingSignatures = false 
[DEBUG] (f) sigfile = CERT 
[DEBUG] (f) skip = false 
[DEBUG] (f) storepass = !AtlanRhodan! 
[DEBUG] (f) verbose = false 
[DEBUG] -- end configuration -- 
[DEBUG] Verarbeite C:\Work\uiq3\Java\FX-602P-Droid\target\FX-602P-Droid-5.0.0.apk 
[DEBUG] 'cmd.exe /X /C "C:\opt\Java\jdk\1.7.0\bin\jarsigner.exe -keystore C:\Users\martin.krischik/.keystore -storepass '*****' -keypass '*****' -sigfile CERT C:\Work\u 
iq3\Java\FX-602P-Droid\target\FX-602P-Droid-5.0.0.apk krischik"' 
[INFO] 1 Archiv(e) verarbeitet 
[INFO] 

間違っている可能性が他に何が?

PS:私はちょうどC:\opt\Java\jdk\1.7.0\bin\jarsigner.exeを指摘 - 1.6から1.7へのjarsignerのに変更がありましたか? Mavenはなぜ1.6のプロジェクトに1.7の署名者を使用しますか?

+0

**アップデート:**実際にはjarsignerに問題があります。コマンドラインの1.6 jar-signerを使用すると、期待どおりに動作します。 - これはMavenの質問になります:どのjarsignerをMavenで使うのかを指定する方法は? – Martin

+1

**アップデート:** 1.7 jarsignerは、Androidと互換性のない別のアルゴリズムを使用しています。 – Martin

+1

これはバグとしてここにトラッキングされていますhttp://code.google.com/p/android/issues/detail?id=19567 –

答えて

45

ソリューションは、のmaven-jarsignerの-プラグインの<configuration>にこれを追加することです:

<arguments> 
    <argument>-sigalg</argument><argument>MD5withRSA</argument> 
    <argument>-digestalg</argument><argument>SHA1</argument> 
</arguments> 

のAnt already has direct supportこのため、しかし、Mavenプラグインはしていません。

+0

jarsignerプラグインのバグレポート/機能要求やパッチを作成しましたか? –

+0

いいえ、ここにアカウントはありません。しかし同様の問題は既にhttp://jira.codehaus.org/browse/MJARSIGNER-21に存在しますが、それは蟻の方法で修正することを示唆していません:-( – ATom

+0

@Manfred Moser:jarsignerのバグではなくAndroid望ましくない機能 – Martin

10

1.7と使用に関する情報を見つけることは非常にトリッキーですが、一度それが合理的でシンプルですが見つかりました:keytoolについては

は、次のとおりです。jarsignerについては

-sigalg SHA1withDSA -keyalg DSA -keysize 1024 

を含める:

-sigalg SHA1withDSA -digestalg SHA1 

(1024が最大で動作しますが、トリックを行う可能性は低いです)

+1

jarsignerエラー:java.security.SignatureException:秘密鍵アルゴリズムが署名アルゴリズムと互換性がありません。 – Martin

+1

Iこれらの設定を使用しているときにMartinと同じエラーが発生しました。 'keytool'引数を' -sigalg MD5withRSA -keyalg RSA -keysize 1024'に変更するのは私の仕事でした。 – vaughandroid

+1

Baqueta、元の鍵を使用し、新しい鍵を生成しない場合はどうなりますか?私はマーティンと同じ問題があります –

2

Baquetaのソリューションは私にとっても機能します。

キーツールでこれらの引数を使用します。

-sigalg MD5withRSA -keyalg RSA -keysize 1024 

私はまだjarsignerの中に存在し使用しています:

-sigalg MD5withRSA -digestalg SHA1 

はAPKが最終的にJavaの7を使用して、デバイス上でコンパイルしてインストール、ありがとうございます!

0

それは署名の問題を修正するには、私を助けた...ありがとう...

jarsigner -verbose -sigalg SHA1withRSA -digestalg 
keytool -sigalg MD5withRSA -keyalg RSA 

最後に、zipalignに忘れてはいけません。

私は同様のkeytooljarsignerの方法を使用し、問題は解決されました。

関連する問題