質問お願いします
APKファイルにkeytoolで作成した署名をつけるためにjarsignerの実行をしたら
キーストアのパスワードを入力してください:
追加中: META-INF/TECHKEY.SF
追加中: META-INF/TECHKEY.RSA
署名中: res/layout/main.xml
署名中: AndroidManifest.xml
署名中: resources.arsc
署名中: res/drawable-hdpi/icon.png
署名中: classes.dex
と表示されています
jarsigner -verify -verbose -certs アプリ名.apk
で署名確認すると「ファイルが見つかりません」と出ています
これでは正常に署名されていないという事でしょうか?
APKファイルに署名をつけzipalign実行をしたいのですが
zipalign実行するとなぜか署名がついていないファイルになってしまいます
お分かりになる方、どうかご教授下さい
よろしくお願い申し上げます
No.4ベストアンサー
- 回答日時:
>一体どうしてこのようになってしまうのでしょうか?
原因はANo.2に書いてあります。
>>それは"アプリ名.apk"に署名をつけた後にmain.xmlの内容を変更した場合に発生するエラーです。署名をつけた後にファイルの内容を変更してはいけません。
"jar tvf APKファイル名" を実行して、APKファイルの内容を表示してみてください。推測通りなら、META-INF/TECHKEY.SFよりもres/layout/main.xmlのタイムスタンプのほうが新しいと思います。
解決するには下記の手順でやり直してください。
[A] 今使っているAPKファイルは削除して、署名する前のAPKファイルを用意する
[B] APKファイルにjarsignerで署名する
[C] 署名後のAPKファイルをjarsignerで検証する
[B]以降にAPKの内容を変更してはいけません (ただし、zipalignは署名の検証に影響がないみたいです)。
この回答への補足
salsberry様
お忙しい中何度も回答頂き本当にありがとうございます
質問を投稿してもなかなか回答いただけない事がある中で
回答をいただけるというだけですごく嬉しい気持ちになります
APKの内容を変えるというのは一切行なってないのですが
どうしてこの表示が出ちゃうんでしょうか…
アドバイス頂いたように一旦APKファイルを削除して新しいファイルに
署名をしなおすという作業は何回も行ないました
アプリ名の変更は「.apk」の拡張子さえ変えなければ大丈夫と最初は
名前の変更を行なったりしたのですがそれさえもだめなのかもと
購入先からダウンロードしたアプリ名そのままで試したりしても
ダメでした
当方のような初心者がアプリの内容を変更するような事はできないです…
zipalign実行前に検証しても署名は検証できませんでした
jar tvf APKファイル名" を実行いたしましたところ
META-INF/TECHKEY.SFは
674 MON JUN 24 18:49:48
res/layout/main.xmlは
476 Sat JUN 01 10:24:18
になっていました
res/layout/main.xmlの方が古いものと思うのですが
違うのでしょうか?
何度も何度も本当にすみません
何卒ご教授下さい
よろしくお願い申し上げます
No.3
- 回答日時:
そもそも、署名をつけるためにjarsignerを実行したときは正しくファイルを指定できている(らしい)のですから、それと同じようにやれば署名の検証のときに「ファイルが見つかりません」が出るはずはないのです。
つまり、署名をつけるときと検証するときとで違うやり方で対象ファイルを指定しているということです。>カレントディレクトリにファイルが存在しないということは
>jarsigner.exeがあるフォルダにapkファイルをおけばうまくいくのでしょうか?
「カレントディレクトリ」と「jarsigner.exeがあるフォルダ」は同じものではありません。
下の[A][B]のどちらかにするのが普通でしょう。
[A] apkファイルのあるディレクトリをカレントディレクトリにする (CDコマンド)。jarsignerやzipalignでファイル名指定時にディレクトリ名をつける必要がなくなる。
[B] カレントディレクトリは無視して、jarsignerやzipalignでは常にファイル名にディレクトリ名をつける。
> 署名後はファイル名を変えるものなのでしょうか?
区別しやすいように-signedjarオプションで出力ファイル名を指定しただけです。好きにしてください。
この回答への補足
salsberry様
お忙しい中回答いただき本当にありがとうございます
仕事でなかなか作業が進まずお礼も遅れまして誠に申し訳ございません
「カレントディレクトリ」を私なりに調べてみましてAPKファイルや証明書を
そこに置きましたところ正しく設定できているのかどうかわかりませんが
jarsigner実行時にディレクトリ名を入れなくても
「ファイルが見つかりません」
とは表示されなくなりました
しかしやはり
jarsigner:java.lang.SecurityException: invalid SHA1 signature file digest for n ・・・es/layout/main.xml
が表示されてしまいます
ディレクトリを指定してもしなくても同じです
一体どうしてこのようになってしまうのでしょうか?
検索でいろいろなサイトを見させていただいてもみなさん
jarsigner -verify -verbose -certs
で正常に検証されています
しまいにはXPの古いPCを使っていたのでJAVAが古いのかとか、ど素人丸出しの考えで
子供のwin7のPCを借りて作業をしたりしてみたのですがやはりだめでした(当たり前?)
もうどうしていいかわからず泣きそうです
原因はどこにあるのでしょうか?
おわかりになりましたらご指導お願いいたします
お忙しい中何度もお手間をおかけして申し訳ございませんが
なにとぞよろしくお願い申し上げます
No.2
- 回答日時:
>ファイルが存在するのに「ファイルが見つかりません」と出るのはなぜでしょうか?
カレントディレクトリって知っていますか?
jarsignerに与えるファイル名にディレクトリ名をつけたら「ファイルが見つかりません」とは出なくなったということは、「ファイルが見つかりません」と出ていたときにはファイル名にディレクトリを指定していなかったのですよね。ディレクトリの指定をしなければ、カレントディレクトリにあるファイルをアクセスしようとします。
つまり、カレントディレクトリに"アプリ名.apk"という名前のファイルが存在していなかったということです。
>jarsigner:java.lang.SecurityException: invalid SHA1 signature file digest for n ・・・es/layout/main.xml
>
>のように文面が表示されてしまいます
それは"アプリ名.apk"に署名をつけた後にmain.xmlの内容を変更した場合に発生するエラーです。署名をつけた後にファイルの内容を変更してはいけません。
この回答への補足
何度も回答いただき本当に本当にありがとうございます!
カレントディレクトリにファイルが存在しないということは
jarsigner.exeがあるフォルダにapkファイルをおけばうまくいくのでしょうか?
恥ずかしながら「カレントディレクトリ」というものも知らず
検索で調べてみると作業中のディレクトリの事とありました
そんなことも知らずに大それた事をしようとして非常に恥ずかしい思いです
まさかGooglePlayにアプリを登録するのにこんなに色々な作業をしなければ
ならないと知らなかったのです…
あと、salsberry様が先ほど回答してくださった中で
署名後の
- testA.jarに署名したもの → testA1.jar
でtestAからtestA1にファイル名が変わっていますが署名後はファイル名を
変えるものなのでしょうか?
jarsigner -verbose -keystore c:\ディレクトリ\証明書名.keystore c:\ディレクトリ\アプリ名.apk 証明書別名
で署名をつけていたのですがこの方法ではファイル名は署名前と変わらない状態でした
この時点でも間違っていたのでしょうか?
お忙しい中何度もご面倒をおかけして申し訳ございません
ご教授のほどなにとぞよろしくお願い申し上げます
No.1
- 回答日時:
>「ファイルが見つかりません」と出ています
それは"アプリ名.apk"という名前のファイルが存在していないからでは?
>APKファイルに署名をつけzipalign実行をしたいのですが
>zipalign実行するとなぜか署名がついていないファイルになってしまいます
Android用のファイルではありませんが、試したところではそんなことないです。
- testA.jarに署名したもの → testA1.jar
- testA1.jarにzipalignしたもの → testA2.jar
$ jarsigner -verbose -keystore keystore.dat -storepass password1 -keypass password2 -signedjar testA1.jar testA.jar foo
更新中: META-INF/MANIFEST.MF
追加中: META-INF/FOO.SF
追加中: META-INF/FOO.DSA
署名中: TestA.class
署名中: TestB.class
$ zipalign -v 4 testA1.jar testA2.jar
Verifying alignment of testA2.jar (4)...
50 META-INF/MANIFEST.MF (OK - compressed)
295 META-INF/FOO.SF (OK - compressed)
646 META-INF/FOO.DSA (OK - compressed)
1473 META-INF/ (OK - compressed)
1534 TestA.class (OK - compressed)
1879 TestB.class (OK - compressed)
Verification succesful
$ jarsigner -verify -verbose -certs testA2.jar
[略]
jarが検証されました。
↑ zipalignの後のファイルでも署名は検証できる
この回答への補足
回答ありがとうございます
ファイルはPC内に存在しています
試しに"アプリ名.apk"がある場所を指定するためにc:\ディレクトリ名をつけてみたら
jarsigner:java.lang.SecurityException: invalid SHA1 signature file digest for n ・・・es/layout/main.xml
のように文面が表示されてしまいます
(…は画面の端が切れて表示されていません)
正しく作業できていれば通常はzipalignの後のファイルでも署名は検証できるんですね…
ファイルが存在するのに「ファイルが見つかりません」と出るのはなぜでしょうか?
無知なものですみません
ご教授の程何卒よろしくお願い致します
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
javaクラスファイルをEclipseで...
-
classファイルについて
-
Eclipse「リフレッシュ」と「ク...
-
SVFの設定について:クラスパス...
-
【Eclipse】パッケージ・エクス...
-
【Eclipse】逆コンパイルでエラ...
-
earファイルを展開する方法
-
Java初心者です。 コマンドプロ...
-
java.io.Fileクラスは絶対パス...
-
プログラム実行の際に、「ソー...
-
Eclipse・プロジェクトで、フォ...
-
コンパイルした後 java (class...
-
「main メソッドを持つクラスが...
-
「削除するか、クラスパスの正...
-
java クラスファイルとソースコ...
-
jdbcドライバのjarファイルにク...
-
java初歩の初歩 コンパイルエラー
-
EclipseでHTTP404エラーが出る。
-
Warファイルの解凍について質問...
-
JSP内で外部jsファイルを指定する
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
classファイルについて
-
javaクラスファイルをEclipseで...
-
Eclipse・プロジェクトで、フォ...
-
Eclipse「リフレッシュ」と「ク...
-
SVFの設定について:クラスパス...
-
earファイルを展開する方法
-
eclipse でclassesフォルダーが...
-
【Eclipse】パッケージ・エクス...
-
jdbcドライバのjarファイルにク...
-
Jarコマンドでマニフェストファ...
-
EclipseでHTTP404エラーが出る。
-
「メイン・マニフェスト属性が...
-
ResourceBundleクラスの使い方
-
プログラム実行の際に、「ソー...
-
java.io.Fileクラスは絶対パス...
-
コンパイルをしようとするとエ...
-
「削除するか、クラスパスの正...
-
java クラスファイルとソースコ...
-
VisualStudioでC++クラスを追加...
-
JAR内のクラス一覧と、メソッド...
おすすめ情報