JDK7 の jarsigner に問題あり?
水曜日, 8 月 17th, 2011NetBeans で簡単に署名付き apk ファイルをつくる ではまった Android の apk ファイルに署名をつける件を調べた。
と言ってもちょっとググってみただけなんですが・・・
やはり JDK7 の jarsigner が失敗するみたいですね。
Android な人は注意しましょう。
NetBeans で簡単に署名付き apk ファイルをつくる ではまった Android の apk ファイルに署名をつける件を調べた。
と言ってもちょっとググってみただけなんですが・・・
やはり JDK7 の jarsigner が失敗するみたいですね。
Android な人は注意しましょう。
NetBeans に NBAndroid プラグインをインストールして Android アプリを作成している人は少ないと思うので
自分用φ(..)メモメモ
プロジェクトを右クリックして [ Export Signed Android Package ] をクリックします。
keystore ファイルを作成するためのウィンドウが表示されます。
keystore ファイル を初めてつくる、または新たにつくる場合は Create new keystore ラジオボタンをクリックして選択します。
出力先を設定します。
そしてパスワードを設定して [ 次へ > ] ボタンをクリックします。
非公開鍵をさきほどの keystore ファイルを使って作ります。
すでに keystore ファイルがありそれを使う場合は Alias のドロップダウンリストより選んで非公開鍵用のパスワードを入力します。
Add new key ラジオボタンを選択します。
[ 次へ ] ボタンをクリックします。
非公開鍵の署名内容をそれぞれ入力します。
ここでのパスワードは非公開鍵ようのパスワードになります。
あとはそれなりに入力するだけですが key の入力内容(key の名前)は解りやすいものにしておくと再利用の時に迷わずにすみます。
署名付き apk ファイルの出力さきと署名の有効期間が表示されます。
[ 完了 ] ボタンをクリックしてできあがるのを待つだけです。
ここで嬉しいことに、アプリケーションの最適化も NetBeans はおこなってくれます。
zipalign はもう必要ないですね。
本当にできてるか確認しました。
keystore ファイル 指定の場所にありました。
もちろん署名付き apk ファイルも!
さて、疑り深い私はちゃんと署名されているかも確認!
ちゃんと検証されました。
これでハッピーエンドとなるはずだったんですが・・・
実は大きな問題がありました。
今までの作業は Windows Vista 64 bit JDK6 u26 NetBeans 7.0.1 で非常に簡単に問題なくできました。
実は最初は Windows 7 JDK7 NetBeans 7.0.1 でこの作業をしていました。
署名付き apk ファイルをつくって、署名の確認をせずに Android マーケットにアプリを登録しました。
無事にアプリをアップロードすることができ、Android マーケットにも反映されていたので安心していたのですが・・・
なんと! インストールできない(><)
で、署名の確認をしたところ お・か・し・い・・・・・・・・・・!
時間がないので少ししか検証してないのですが
どうも JDK7 の jarsigner かなっ?
ちなみに JDK7 でつくった keystore ファイルをつかって JDK6 環境のコンピュータで署名付きアプリをつくり、
Android マーケットに登録したらこの問題は解決しました。
ちなみにその apk ファイルを JDK7 環境で署名確認すると警告がでます。( ・_・;)
たまたま Android マーケット側の問題がこのタイミングで発生して修正されたのかもしれません。
ただ Android マーケットで登録アプリの削除の方法が解らないので気軽に検証することができない。゜(゜´Д`゜)゜。
せっかくのお盆休みなのにもやもやした気分でブルーが少しはいりました。
カメラの設定でシーンモードをオート以外に設定するとカラーエフェクトが無効になってしまうようだ。
今日はこれでドツボにはまった(><)
XPERIA arc だけの仕様なのか? Android の仕様なのか? は不明です。
と言いつつ、なにかとんでもない間違いをしているのか・・・
明日はズームの設定方法について調べてみるか
NetBeans で Android 実機デバッグをやってみた で作ったカメラを使うアプリの落とし穴をメモ
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// カメラのプレビューのサイズを設定
if (mCamera != null) {
mCamera.stopPreview();
setPreviewSize(width, height);
// カメラのプレビューを開始
mCamera.setPreviewCallback(previewCallback);
mCamera.startPreview();
}
}
private void setPreviewSize(int width, int height) {
Camera.Parameters params = mCamera.getParameters();
List<Camera.Size> supported = params.getSupportedPreviewSizes();
if (supported != null) {
for (Camera.Size size : supported) {
if (size.width <= width && size.height <= height) {
params.setPreviewSize(size.width, size.height);
X_RATIO = (float) width / (float) size.width;
Y_RATIO = (float) height / (float) size.height;
mCamera.setParameters(params);
break;
}
}
}
}
一つ目の落とし穴
プレビューサイズはそのデバイスがサポートしているものをセットする。
上記コードでは setPreviewSize(width, height); でサポートしている解像度の一番大きいのを選んでます。
二つ目の落とし穴
デバイスに表示されるプレビューはカメラがサポートしている解像度と一緒ではない。(表現が変ですみません)
私の XPERIA arc では 640 X 480 のプレビュー画像を 854 X 480 に引き延ばして表示されてしまいました。
そのため顔認識で得た face.getMidPoint(point); の両目の中心位置情報とデバイスに表示される実際の位置がずれてしまいました。
合成用の画像を最後に追加したときの座標は 640 X 480 のまま引き延ばされないで表示されていました。(右側 214 余り(×_×)
融通が利かないというか・・・なんていうか・・・
しかたないので合成用の画像の座標位置に補正をかけることで対処しました。
以上、素人が落とし穴に落ちた状況をφ(..)メモメモ
対処方法とか、そもそも作り方が根本的に間違ってるかもしれませんが Android ってバージョンアップのスピードは速いし
次から次へと新しい機種が追加されるから落とし穴がけっこうあるかもしれないですね。
NetBeans の Android プログラミング用プラグインの NBANDROID でカメラを使ったアプリをほとんど古い雑誌から丸写しで作ってみた。
そのプログラムは WEB+DB PRESS という雑誌に載っていたものです。(Java PRESS とかって雑誌も昔はあったなぁ・・・)
Android SDK 開発のレシピ という Tip 本の著者である塚田 翔也さんが作られたものです。
雑誌には限られた誌面のなかで丁寧に解説がされていました。
しかし、私の使ってる XPERIA arc では動きませんでした。
それに twitter の認証が Basic は駄目になってるのようなのでその部分の機能は削除し
適当に画像をオーバーレイさせてみることにしました。
この前は NetBeans で実機のデバッグをすることができないとあきらめたのですが
今日はちょっと時間がとれたので試してみました。
以下にとりあえず実機でデバッグする方法を私的メモとして残しておきます。
もっとちゃんとした方法があると思うのですが NetBeans での実機デバッグの日本語での情報を見つけることができなかった。゜(゜´Д`゜)゜。
はじめにサービスウィンドウに Android Devices のノードに PC に USB デバッグモードで接続された端末があることを確認します。
AndroidManifest.xml ファイルに android:debuggable="true" と追記します。(必要かどうか検証してません)
プロジェクトウィンドウで プロジェクトを右クリック、そして [ デバッグ ] をクリックします。
デバイスの選択ウィンドウが出ますので
PC に接続されている実機を選択します。
Debug のチェックボックスにチェックを入れようとしてもいれられませんので無視します。
私は念のため、はいらないけどいちおうチェックをいれました(..;)
了解ボタンをクリックして進みます。
すると実機の画面にこんなメッセージが表示されます。
ここで [ Force Close ] ボタンを押したいところですがこのままにします。
サービスウィンドウの Android Devices ノードにある実機のノードに <unknown> pid: 18031 が生成されてます。
それを右クリック、 [ Debug this process ] をクリックします。
デバッグ実行が開始されます。
今回のプログラムではカメラ制御のところにウォッチポイントとブレークポイントを設定してあります。
ちゃんとデバッグできてますね。
NetBeans の慣れた環境で落ち着きます。
っていうか Android の開発なら eclipse のほうが強力なのは言うまでもないでしょうが NetBeans のほうが好き(#^.^#)
ちなみに XPERIA arc のカメラがサポートしている解像度もこれでバッチシですね。
最後にとりあえず動くようにできたので最近お気に入りの黒木 メイサちゃんを撮ってみました。
ちょっとスクリーンショットが切れてますがこんな感じにカメラを使い顔認識させ画像を合成させることができました(≧▽≦)
ちなみにスクリーンショットを撮るには サービスウィンドウの Android Devices ノードにある実機を右クリック
そして [ Take Device Screenshot.. ] をクリックするだけです。
まだリアルタイム顔認識の部分がちょっとおかしいのですが NetBeans のデバッガが使えないと思いこんでいて先日力技で修正してしまいました( ̄。 ̄;)
あとは合成用の画像をいくつか作って遊んでみることにします。
最後にこのプログラムの元を作り、雑誌に解説記事まで執筆してくれてこんな楽しいことが Android ならできることを教えてくれた
塚田 翔也さんに感謝いたします\(^_^)/
Android SDK 2.3.2 という謎のバージョンが搭載されていたが先日 2.3.3 API レベル 10 にバージョンアップされました。
ついでに賑やかになるほどアプリもインストールされてました。
NetBeans の Android 開発用プラグインが新しくなっていたので顔認識アプリでもと思って古い本を引っ張り出してほとんどコードを丸写しにつくったが
強制終了の憂き目にあいました><
実機をつないでいるのでデバッグもできるだろうと思ったがデバイスを認識してくれてないようで(なんでやねん!)素直にあきらめました。
1.6 で動くアプリなのでこんなことになるなんて想像もしてなかっただけにショックが大きい。
Android って下位互換って厳しいんだろうか?
今度暇になったらカメラだけを利用するアプリからやり直そう。
Android SDK をインストールしたディレクトリ内にある tools ディレクトリの中にある android.bat を実行する。
あとはおまかせで適当に
自分用メモでした。
NetBeans でもプログラムは動くことを購入時に再確認したので次は実機で動かしたくなりました。
NetBeans のエミュレータでは下にある三つのボタンがなくて右側にキーボードと十字方向のバタンがあります(><)
eclipse だとちゃんと表示されるのが悔しいです!
とりあえず目的は実機に何かインストール(PC から)することなので気にしないことにします。(ヲヒ
すっかり Android のプログラミングは忘れてしまっている(覚えるほど触ってない)ので日経ソフトウェア4月号のサンプルを NetBeans で構築しただけのものです。
注意が必要なのは SDK の最低バージョン指定を GUI で設定する項目がないので Android Manifest.xml ファイルに手書きすることになります。
あとは特に注意が必要な項目は見当たりませんでした。
Android のプラグインも以前の問題があったものと比べると良くなってきてます。
開発者の皆様に感謝です!
雑誌の記事の通り(私の好みにより一部変更しました。)プロジェクトをビルドしたらちゃんと(当然か)動きました。(^^)
さて、ここからが問題です。
どうやって実機にこのアプリをインストールするか?
Apps Installer を Android マーケットから頂いてきてこれを使ってインストールしました。
携帯と PC を USB 接続して SD カードに dist ディレクトリに作成された apk ファイルをコピーします。
コピーが完了したら PC から携帯を接続解除し、 Apps Installer を起動してインストールするだけ。
ただし、携帯のセキュリティ設定がマーケット以外からのアプリのインストールを禁止しているので自己責任でセキュリティを解除する必要があります。
また、今回のアプリでは音声合成用の音声データのインストールも必要となります。
とりあえず、実機へのアプリのインストールという目的は達成しました。(^^)
バリバリの Java プログラマの人なら良いおもちゃになるんでしょうね。
えっ?お仕事以外でコード書きたくないって(@@)
Android SDK 1.5 pre 版が出てるようです。
Taosoftware のがくさんより NetBeans + Android SDK1.5 preで、デバック実行できないという現象が発生していると情報を頂いたので早速試してみました。
NetBeans 6.5.1 の Java プラットフォームマネージャで Android SDK 1.5 pre を登録しようとしたけど認識されませんでした。(T-T)
とりあえず Android SDK 1.1 ではデバッグ実行できることは確認しました。
しかし、ちょっと順番があるようです。
まず、プロジェクトをデバッグ実行します。
Android エミュレーターの起動を確認してから DDMS を起動します。
これでデバッグ実行が可能になります。(たぶん・・・)
この順番が逆だったり、一度デバッガを切断して再実行したりすると下図のようになってデバッグ実行できなくなります。
とりあえず夜勤明けで眠いのでこれまでということで・・・(^^;
Android SDK 1.5 SDK pre のインストール方法については今月下旬か来月には正式版がリリースされるでしょうから保留ということで zzz…
Taosoftware のがくさんより教えていただいた方法で 64bit Vista でも DDMS が起動できるようになったので
この前作った GPS を利用するプログラムを 64bit Vista で動かしてみました。
ついでに画像のオーバーレイを追加してみました。
画像には、ねこび~んを使用させていただきました。(http://ja.netbeans.org/nekobean)
DDMS から緯度と経度を入力し、送信するとその場所が表示されます。
64bit Vista でもこれでOKですね。(^^)