忍者ブログ
アンドロイド アプリ  ランキング HOME > > [PR] > android > 【解決】apk は前のバージョンと同じ証明書で署名する必要があります。 RSS   Admin NewEntry Comment
プログラミング、Linux、Androidについて、検索しても出てこなかったことについて、自分用メモをつける。
  • 2017.06≪
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • ≫ 2017.08
アンドロイド アプリ  ランキング
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

 androidマーケット登録用に自己作成の証明書を使用しているが、アプリをアップデートする際に受け付けてくれないandroidマーケットのバグ?に悩まされている。

アップデートNGとなる理由は「 apk は前のバージョンと同じ証明書で署名する必要があります。」である。

shomeisho_error.png







androidマーケットに初登録して以来、一貫して同じ証明書を使用しているが、アップデートを受け付けないのは、まったく意味不明である。

仕方がないので、パッケージ名を変えて別のアプリとして登録し直して対処・・・。

登録し直した後は、問題の証明書と同じ証明書を引き続き使用していますが、正常にアプリをアップロードすることができる。

ますます、謎は深まるばかりである。

謎1.証明書の変更をしていないが、突如アップデートNGとなる。
謎2.アップデート受付不可となったあと、何度apkファイルを再作成&再書名してもアップデートが受け付けられない。
謎3.パッケージ名を変更し、別アプリとして登録した後、同じ証明書を使用しても正常にアップデートできる。

 
原因(私の場合)
 
以下の手順でマーケットにアップデートしてました。
  1. Eclipseにてプロジェクトをビルド
  2. 「bin」配下にある「XXXX.apk」に対して「jarsigner」で従来の証明書で署名を実施。
  3. zipalignで最適化する。
  4. アンドロイドマーケットにアップデート
手順2が問題となっていることが今回判明した。

マーケットにあるapkファイルの証明書を確認すると、「従来の証明書」と「デバッグ証明書」が署名されていることがわかった。

<<証明書確認コマンド>>
$ jarsigner -verify -verbose -certs  XXXXX.apk
 
<<証明書確認コマンド実行結果>>
sm    xxxxxx Tue Mar 08 21:58:40 JST 2011 classes.dex
 
 
      X.509, CN=oreore, OU=oredayo, O=ore, L=bachan, ST=oredayo, C=ore   ←従来の署名
      [証明書は 10/12/23 7:57 から 38/05/10 7:57 まで有効です]
 
      X.509, CN=Android Debug, O=Android, C=US                                          ←デバッグ用署名
      [証明書は 11/01/13 23:48 から 12/01/13 23:48 まで有効です]

 ※従来の署名内容はイメージです。

 
これは、eclipseビルド時?、エミュレータ、実機起動時?にeclipseが「デバッグ用証明書」を署名してくれた「 XXXXX.apk」に対して、jarsignerで「 従来の証明書」で署名したため、二重署名された「 XXXXX.apk」ができたことを示している。

つまり、元々マーケット上にあるapkファイルは「従来の証明書」「デバッグ証明書」の二重署名で、今回アップデートしようとしたapkファイルは、「 従来の証明書」のみの署名であったため、マーケットが「 apk は前のバージョンと同じ証明書で署名する必要があります。」としていたのである。


※解決方法※


上記問題の解決方法は、「パッケージ名を変更する方法 」「二重署名を継続する方法」「地デジ方式」が考えられる。
  1. パッケージ名を変更する方法は、二重署名を解消できるメリットがある半面、旧パッケージのユーザがアップデートできないというデメリットがある。
  2. 二重署名を継続する方法は、現在のユーザを維持することができるメリットがあるが、デバッグ署名が期限切れとなった場合、新規ユーザが利用できなくなる恐れがある。(検証&調査してませんので、どうなるか私にはわかりません。)
  3. パッケージ名変更方法に加えて、二重署名APKには、起動時に「このアプリをアンインストールして、新アプリXXXXをインストールしてください。ごめんなさい。」とアプリにメッセージを出してユーザを誘導する地デジ方方式。有料アプリの場合、この方式はとりづらいので要注意!

※二重署名アプリのアップデート方法※
 
  1. 「eclipse」にて、「Project Explorer」より問題のプロジェクトを右クリックし、「Android Tools」「Export Unsigned Application Package...」を選択し、署名のないapkファイルを生成する。
  2. eclipseが使っていたと思われるデバッグ証明書「default.keyset」を探す。
    Ubuntuの場合、「~/.android/default.keyset」
  3. jarsignerにて、デバッグ証明書「default.keyset」で署名する。

    $  jarsigner -sectionsonly -keystore ~/.android/debug.keystore -verbose XXXXX.apk androiddebugkey
        ※パスワードは「android」
     
  4. jarsignerにて、従来の証明書「XXXX.keyset」で署名する。
  5. zipalignで最適化する。
  6. マーケットにアップデートする。
この方法で「apk は前のバージョンと同じ証明書で署名する必要があります。」と拒否していたエラーメッセージも収まり、正常にアップデートできました。

 
※本来の署名方法※
  1. 「eclipse」にて、「Project Explorer」より問題のプロジェクトを右クリックし、「Android Tools」「Export Signed Application Package...」を選択し、署名のあるapkファイルを生成する。
  2. zipalignで最適化する。
  3. マーケットにアップデートする。
PR
postこの記事にコメントする
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
この記事へのトラックバック
この記事にトラックバックする:
[11]  [10]  [9]  [8]  [7]  [6]  [5]  [4]  [2
カレンダー
06 2017/07 08
S M T W T F S
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
フリーエリア
最新CM
最新TB
プロフィール
HN:
kstv2011
性別:
男性
職業:
プログラマ
趣味:
作ること
自己紹介:
プログラマー、Javaを中心にネットワーク通信系アプリを作成する男。
バーコード
ブログ内検索
アクセス解析
技なれど波高し Produced by kstv2011
日めくりカレンダーBLUE Designed by がりんぺいろ
忍者ブログ [PR]