apkファイル作成

apkファイル作成

プロジェクトを右クリック

Android Tools > Export Signed Application Packages
を選択

使用する keystore を求められるので

Use exisitng keystore を選び
作成した release.keystore
を選択する

作成したときに入力したパスワードを入力する

次の画面で
Alias を選択し
前回設定しているパスワードを入力

Destination APK file は
作成する apk ファイルを書く

デフォルトだとプロジェクトの略称で作成される
/home/snowpool/Hello.apk

拡張子が .apk であるなら名前変更可能

これで Hello.apk が作成される

ちなみに書名を確認するには

jarsignerコマンドを使う

今回使用したオプションは
-verify
JARファイルの検証

-verbose
冗長モードになり
JAR の署名または
検証の進行状況に関する追加情報を出力

-certs
JAR ファイルの各署名者の証明書情報を出力

詳しいオプション解説については
http://docs.oracle.com/javase/jp/6/technotes/tools/windows/jarsigner.html
を参照

今回は
jarsigner -verify -verbose -certs /home/snowpool/Hello.apk

として作成したファイルを検証

keystore ファイル作成

keystore ファイル作成

project を右クリック
Export

Android > Export Android Application

プロジェクト名はそのままで Next

keystore ファイルが必要なので
create new keystore にチェックをして
Location にはファイルの場所と、そのパス
とりあえず
/hone/snowpool/key_snowpool

Password
Confirm
にパスワード入力

次に
Alias に別名
Password
Confirm にパスワード
vaidityは有効期限(年単位)

First and Last Name には名前

他にもいろいろあるけど
これだけあればテストはできる

次に
ファイル作成
拡張子を .apk にすること
/home/snowpool/apptest.apk
としてみた

しかし、最後でエラーがでる

keytool エラー java.io.filenotfoundexception No such file
で調べたりしたけど
端末で簡単に作れるので
こちらで実行することに

keytool コマンドついては
http://apis.jpn.ph/fswiki/wiki.cgi?page=Java%2Fkeytool
を参考に

また、オプションについては
http://docs.oracle.com/javase/jp/6/technotes/tools/solaris/keytool.html
を参考に

以下は使用したオプションの解説

-genkey でキーペア作成

-v
これは冗長モードにする
これにより詳細設定が可能になる

-keystore
keystore のファイル名

-keyalg
鍵ペアのアルゴリズムの指定

-validity
有効期限の設定

今回は

keytool -genkey  -v -keystore /home/snowpool/release.keystore -alias releasekey -keyalg RSA -validity 10000

として実行

キーストアのパスワードを入力してください:
とでるのでパスワードを入力

姓名を入力してください。
[Unknown]:
となったら氏名入力

組織単位名を入力してください。
[Unknown]:
となるので、とりあえず Development

組織名を入力してください。
[Unknown]:
となるので My Company

都市名または地域名を入力してください。
[Unknown]:
で県名

州名または地方名を入力してください。
[Unknown]:
で市長村名

この単位に該当する 2 文字の国番号を入力してください。
[Unknown]:
は jp

最後に確認で聞かれるので、問題ないのなら
yes
を入力

の鍵パスワードを入力してください。
(キーストアのパスワードと同じ場合は RETURN を押してください):
とでるので
Enter

これで
release.keystore ファイルが作成される

確認するには、端末から
ls | grep keystore
で確認できる

これで後は署名つきファイルを出力する

犬山城へのお得切符

お正月ということで
まだ行ったことのないエリアに旅行してみました

いろいろと経験してみると新しい発見とかアイデア
が浮かぶこともあります

今回は名古屋からですので
犬山城下町きっぷ
という割引切符を使いました

犬山城下町きっぷについては
http://www.meitetsu.co.jp/osusume/shohin/1225953_1244.html
に掲載されています

往復の電車賃が通常よりお得になること
そして
セットで犬山城への料金が入っていること
また、城下町のお店の一部で
セットになっているクーポンが使えるなど
メリットがあったためこの切符を購入してみました

名鉄名古屋からだと、約30分くらいでした

名鉄名古屋だと1300円でかえますが
http://www.meitetsu.co.jp/pages/joukamachi_01.html
に他の地域から購入するときの金額
が掲載されています

ちなみに
クーポン対象の店舗は
http://www.meitetsu.co.jp/pages/joukamachi_02.html
に掲載されています

今回はお正月ということもあり
いくつかの店舗はお休みでしたが
また機会があればいってみようと思います

Android で地図を出すとき
GPSを有効化したり wifi を有効化することを
促されこれを起動するのが面倒でした

この前、サーバの起動をNFCにかざすだけで実行できたのでNFCを使うことで
これらを解決できるかもしれません

AndroidアプリからWebAPIへアクセス

AndroidアプリからWebAPIへアクセス

AndroidアプリからWebAPIを呼び出す場合
HTTP通信をするため
メインスレッドとは別のスレッドで
非同期処理する

Androidアプリで、スレッドを作成して
非同期処理させるには
いくつかのアプローチがある

Android 3.0までは
Android SDKで提供されるAsyncTaskクラスを直接利用するのが一般的だった

AsyncTaskクラスでは
メインUIスレッドとは別の非同期処理と
UIスレッドへの実行結果を通知する仕組みが用意されている

これにより、
別スレッドからのUI操作の問題も回避でき
非同期処理が実装できる

ただ、Android 3.0から非同期処理をより
汎用的に扱うためloaderという仕組みができた

loaderクラスは
非同期にデータを読み込むための抽象的クラスで
Activity
Fragmentどちらでも利用できる

Android 3.0未満でも
Support Library という互換ライブラリーを使えば
loaderを使うことができる

AsyncTask と似たもので
AsyncTaskLoader

これは、Loaderのサブクラスで
従来のAsyncTaskクラスの機能が使える

AsyncTaskでは
非同期処理と
UIスレッドへのアクセスができるため
便利だけど
UIへの処理が分散する

AsyncTaskLoaderでは
この問題をActivityに対してコールバックするメソッド、
つまりインターフェースの実装をすることで
解決している

Activityクラスで
LoaderCallbacksインターフェースを実装すれば
非同期処理の各イベントに応じて決められたメソッドが、呼び出される

このメソッドの中で
非同期処理の進捗状況の表示や
処理完了時のViewの更新処理を記述するようにする

このように、ActivityLoaderクラスを使うことで
ActivityのUI制御と非同期処理の処理を分けて実装することができる

AndroidからWebAPIを使う基本的な流れ

AndroidからWebAPIを使う基本的な流れは

GET POST でHTTP通信

次に、結果データがJSONかxmlなので
これを解析

そして、解析データを元に画面描画などを行う

Androidでは、
HTTP通信などの時間のかかる処理は
通常は非同期、つまりバックグラウンドで行う

なので、メインスレッド
つまり操作画面とは別のスレッドを作って実行させる

メインスレッドは、主にUI描画処理をする
この中で、時間がかかる処理をしてしまうと操作性の悪いもっさりアプリになる

このため別スレッドを作成して
バックグラウンドてやってもらうマルチスレッド構成にする

人手を増やして分担処理みたいなイメージ

AndroidのUI描画処理は
シングルスレッド設計、つまり担当は1人のため
別のスレッドから直接操作することはできない
非同期のスレッドからUI操作しようとすると、エラーになる

目の前の仕事がいっぱいいっぱいなのに
更に仕事追加したら倒れたというようなイメージ

このため、Androidアプリでは
マルチスレッド
つまり大変な仕事は、人手を増やして分担処理することが重要になる

Ubuntu 13.10 にRSSリーダーインストール

Ubuntu 13.10 にRSSリーダーインストール

去年 Google Reader が終了してしまったので
RSS reader として
Tiny Tiny RSS で管理することに

Tiny Tiny RSS では
DBに MySQL
PHP から JSON を使うため
これらもインストールしておく

sudo apt-get install tt-rss mysql-client mysql-server php5-json

途中で
tt-rss のデータベースを dbconfig-common で設定しますか?
と聞かれるので
はいを選択

次に使用するDBの選択になるので
mysql
を選択し
了解

次に、管理するDBのパスワードを入れるので
パスワードを入力し、確認のための入力が終わると
今度は web サーバーの設定
apache2
を選択

次に、アクセスするURLを設定

http://example.org/tt-rss/
では無理なので

IPアドレスに変更する

http://192.168.10.206/tt-rss/

あとは自動でやってくれるので処理が完了したら

設定したURLへアクセス

一番最初のときには
ログイン admin
パスワード password
でログイン

さすがにセキュリティが危険なので
画面右上の操作 > 設定で変更する

ここでユーザータブをクリックし
admin ユーザのパスワードを変更する

するといきなりログイン状態が解除され、
操作がエラーになる

一度ログアウトして
新しいパスワードで再度ログインしなおす

これでようやく使えるように

そして、操作 > フィードを購読する
を選択し
購読したいRSSを入力すれば読めるようになる

使った感想だけど、設定が面倒かも

Google Reader みたいにブラウザ直結でできればもっと汎用的に使えそう

とりあえず、これでRSSリーダーの導入が完了

今回も導入には

を利用

Ubuntu 13.10 へ owncloud

Ubuntu 13.10 へ owncloud

Ubuntu One とか Dropbox では容量が足りないので
ownCloud を入れることでローカルでの大容量ストレージを用意できる

まず sudo apt-get update

次に owncloud のインストール
sudo apt-get install owncloud

これで必要なものもインストールできる

途中でDBで使 う MySQL の root ユーザパスワードを聞かれるので
これを設定

ちなみに、ownCloudを選んだのは
ipod touch
Nexus 7 などのアプリがあり
しかも大容量で自分で管理できるのが理由

あとはPCのクライアントもあるけど
メインはタブレットとか ipod になりそう

インストール完了したら
http://192.168.10.206/owncloud/index.php
というように
IPアドレス/owncloud
でアクセス

ムック本によればここで
mysql の設定を
って書いてあるけど、そもそも
mysql のDB構築が解説に入っていないため
当然エラー
wordpress の新しいバージョンだとDB作成もしてくれるみたいだけど

しかたないので、自分でDB作成

ownCloudでプライベート・クラウド環境を構築しよう!《その2》

にこの解説があるので
参考にしながら実行

mysql -u root -p

MySQL root ユーザでログインして
create database owncloud default character set utf8;
で owncloud DB を作成

ユーザも必要なので
grant all on owncloud.* to owncloud@l
ocalhost identified by ‘パスワード’;
というように
ユーザ owncloud
ホスト localhost
パスワード
を設定

この設定したものを
IPアドレス/owncloud
でアクセスして
設定していけばログインできる

Android
ipod touch
ともに試してみたけど使い勝手は Android のほうが使いやすい

ただしディレクトリごとのアップロードができないので
少し面倒

アプリとしても Android だと写真の設定とかもあるけど
ipod touch だとファイル関連だけなので
ちょっと使いにくい

ちなみに、今回参考にしたムック本は

Ubuntu 13.10 公開鍵認証設定

Ubuntu 13.10 公開鍵認証設定

今回はSSH2での設定

まず普通にリモートログインをパスワード認証でログイン

ログインできたらログアウト

次に
クライアントマシンのほうで
ssh-keygen -t rsa -f ~/.ssh/id_rsa_ubu
で鍵作成

このときパスワードきかれるけどお試しなら
パスワードなし

次に、鍵をコピー
scp .ssh/id_rsa_ubu.pub 192.168.10.206:.
というように
scp .ssh/id_rsa_ubu.pub ユーザ名@IPアドレス:.

でコピー

コピーするときに ,pub 拡張子のついていることを確認すること

そして ssh のパスワード認証でログインしてサーバーで作業する

まず必要な準備
mkdir ~/.ssh
chmod 700 .ssh
でディレクトリ作成と権限設定

次に鍵の名前変更と移動
mv id_rsa_ubu.pub .ssh/authorized_keys

権限を変えるので
chmod 400 .ssh/authorized_keys

そして設定ファイルを変更するので
まず
sudo apt-get install vim
で vim を入れて

sudo vim /etc/ssh/sshd_config
でファイルを開く

vim は癖があるけど操作になれるといろいろできる

変更するのは
PasswordAuthentication yes

PasswordAuthentication no

#AuthorizedKeysFile %h/.ssh/authorized_keys

AuthorizedKeysFile %h/.ssh/authorized_keys
というように最初のコメントアウトを消すこと

PubkeyAuthentication yes
になっていることを確認して
あとは
:wq
で保存

設定反映のため
sudo service ssh restart
でSSHの再起動

ここまでできたら、ログアウトせずに
新しい端末とか wifi でつなげた ipod とかAndroid で接続テスト

ssh -o PubkeyAuthentication=no IPアドレス
とすればログインできないのが確認できる

かなり長めなオプションだけど tab で補完できるので
じつは楽だったりする

このオプションは公開鍵認証の無効化

で、ログインした状態を保っておくのは
設定失敗して、公開鍵もログインできない状況だと
サーバー本体で操作することになるから

あと、今回は最初のパスワードを省いたけど
本当はセキュリティを考慮するなら設定する

日経 Linux の巻末のマンガにも載っていたけど
パスワードなしを使うのは運用で
ログのみ閲覧可能とかの限定権限にしておくこと

Chef knife solo を ubuntu へインストール

Chef knife solo を ubuntu へインストール

Chief Solo のインストール
インフラ構築手順の支援ツール Knife solo をインストール

参考にしたのは 日経Linux の記事

とりあえず今回はドットインストールで使いたいので
クライアント側だけ導入

#03 Chef、knife soloを導入しよう

で紹介されているのは Mac のみ

私の環境は Ubuntu なので

curl -O http://www.opscode.com/chef/install.sh
sudo sh ./install.sh
sudo apt-get install ruby1.9.1 ruby1.9.1-dev
sudo gem install knife-solo

でインストール

インストール完了したら
knife configure

で初期化すればOK
いろいろ聞かれるけど、とりあえずEnter でOK

Tasker の設定

Tasker の設定

Android の動作を自動化させるアプリ
Tasker を使うことにしました

http://matome.naver.jp/odai/2136559737983716001
を参考にいろいろ実験

メニューが英語だけど
Profile には条件の動作の名前
task には行う動作の名前とその内容

というかんじになる

やりやすいもののほうがわかりやすいので
http://octoba.net/archives/20130517-android-app-tasker-195097.html

を参考に
まずは音楽アプリを開いたら
bluetooth on
閉じたら
bluetooth off
というものを設定する

まずPROFILES タブで
+ を押して
Application を選択

すると名前をなににするか聞かれるため
今回は bluetooth とした

するとどんな条件で?
というのが youtbe を起動したら
となり

次に何を行うかを設定することになる

なので + を押して
Net > Bluetooth

設定を off から on に変更

そして一度 Action Edit を押して元の画面に戻り

トースト表示させたいので
+ を押して Alert > Flash
としてトースト表示したい文字列を入力

今回は bluetooth on にしたよ!

とする

これで戻って
左下の三角形のプレビューボタンで動作確認

次に、アプリを閉じたら
Bluettooth off にしたいので

できたものの bluetooth とかかれている動作部分を長押しすると
メニューがでてくるので
Add Exit Task
をクリック

これで youtube を起動すると bluetooth がON
アプリを終了すると bluetooth が OFF になります

Tasker の詳しい解説には
http://kokuten.jp/tasker.php
を参考にするとわかりやすい

次に、
http://www.lifehacker.jp/2013/09/130922android_nfc.html
に載っていた
NFCへかざすと自動的にマシンを起動する方法をテスト

やりかたは英語サイトの
http://vv.reddit.com/r/Android/comments/16gldh/using_taskerwolnfc_tags_to_auto_start_your/
を参考に設定

まず
その前に
WoL Wake On Lan
のアプリの設定が必要

これは、あらかじめ Wake on LAN にマシンが対応していることが条件になる

Name には適当にマシンの名前を登録

MAC には MACアドレスを設定

IP or Domain にはマシンのIPアドレス

Port はそのまま

Send to Broadcast にチェックを入れ
起動できるなら設定は完了

次に
Tasker を起動して
TASKS タブで + を押し
新しいタスク名を設定
今回は
up とした

+ を押して Plugin を選択し

WoL Wake On Lan Wan Settings
を選択

Configuration つまり設定をタップして
設定したマシンを選択

これで動作設定ができたので、次にNFC書き込み
ただし問題があり、Tasker を Trigger の前にインストールする必要があるとのこと

また、警告文によれば
UIで Misc/外部アクセスを許可するオプションを設定する必要があるとのこと

このため
http://kokuten.jp/tasker.php
の日本語訳を参考に

Tasker の
Preference を開き

Miscタグの
Allow External Access にチェックを入れる

これで、目的どおりNFCタグへ
端末ををかざすとサーバーが起動する
ようになりました

ただし、設定した端末のみ起動可能で
ほかの端末で試しても起動することはできませんでした

おそらく、設定に必要なアプリとかが入っていないとダメです