2010年8月6日金曜日

Android リソースが多いときのビルド時間を短くする

Libraroid では、1図書館が1つのクラスに
なっていて、今200オーバーくらいあるのですが、
ビルドにやたら時間がかかるようになって
しまってました ><

で、これを短くするために

・パッケージを分割する  
  1つのパッケージ(=ディレクトリ)に
  200個のクラスが入っていたので、階層化して
  23個のパッケージに分けました

・外から参照しないクラスのメンバは private にする

という方法をとりました。

これでビルド時間は半分くらいになった気がします
(ちゃんと測ってません。ごめんなさい。)

なのですが、次のメッセージがでて、ビルドに失敗
する現象は直りませんでした。

[2010-08-06 13:41:14 - Dex Loader] Unable to execute dex: null
[2010-08-06 13:41:14 - Libraroid] Conversion to Dalvik format failed:

string-array とかもたくさん使ってるのでそれかなー
とか思いつつ調べたところ、すでに Issue 報告
(Status が Question だからもはや Issue ではない?)
がされていて、

Issue 2328: Dalvik Crashes on huge .jave files

ここに書いてあるように eclipse.ini を書き換えたら
エラーはでなって、かつなんとなーくビルドがさらに
速くなった気がしました。(気のせいかもしれないけど)

前 eclipse.ini

...
-Xms40m
-Xmx256m



後 eclipse.ini

...
-Xms128m
-Xmx512m

2010年8月5日木曜日

Peppermint Ice もぐもぐ

暑いです。
アイスが食べたいです。
チョコミントが好きです。。。

『Peppermint Ice』はネイティブアプリ+Chrome OS風なLinuxディストリビューション!! : ライフハッカー[日本版] http://www.lifehacker.jp/2010/07/100728peppermint_ice.html

が気になったで試してみた。

本家
http://peppermintos.com/2010/07/peppermint-ice-faster-lighter-aiming-for-the-clouds/

ダウンロードはここから
http://peppermintos.com/download/
Peppermint OS One の下の Peppermint Ice の方だよ!

ダウンロードした Peppermint-Ice-07142010.iso の md5sum を調べろって書いてある。

md5 については wikipedia あたりをどうぞ
http://ja.wikipedia.org/wiki/MD5


Sun(Oracle) VirtualBox の設定













ブート画面




起動するとこんな感じ。かわいい。(と私は思うのだが)




Internet には
・Chromium Web Brawser
・Dropbox
・Facebook
・Seesmic Web
などが入ってました。最初から Dropbox とかいいっす。




Office には最初から
・Google Calender
・Google Docs
・Google Mail
・Google Reader
・ePDFViewer
が入ってました。

クリックすればブラウザが立ち上がって、各web serviceのページが表示されるってわけです。




Sound & Video には動画共有サイトが入ってました。
YouTube とか Hulu (日本だと見れないんだっけ?)とか
last.fm はストリーミングラジオ(あってる?)かな




設定
Packege Manager は Synaptic さんですね。




Software Manager をクリック

いっぱいある。
カテゴリ分けされていて、かつアイコンがついててわかりやすい。
(アイコンかわいいよ)



Games をクリック

Rating や Review数 ががっつりでます。




Chromium をクリックするとこんな感じ




Logout画面





軽いです。415Mだし。USBからさくさく起動できそうですね。

2010年8月4日水曜日

Android Preference の summary を動的に変更

Preference を使った設定画面で、今設定されている
値が summary に出るとユーザーフレンドリーですよね。

summary というのは、PreferenceActivity の設定画面で、
設定項目の下に少し小さい文字で表示される領域です。

Libraroid の設定画面だと、「和書」「キーワード」
「キーワードに関連」などのが表示されるところが summary です。




選択された値によって、この summary に表示される
文字を変更するにはこんな感じで実装します。

PreferenceActivity で


Preference searchbooksPref;

final static String SEARCHBOOKS_KEY = "searchbooks";

Map<String, String> searchbooksMap = new HashMap<String, String>();

@Override void onCreate() {
// 省略
String[] searchbooksKeys = getResources().getStringArray(R.array.search_books);
String[] searchbooksValues = getResources().getStringArray(R.array.search_books_value);

for(int i = 0; i < searchbooksKeys.length; i++)
searchbooksMap.put(searchbooksValues[i], searchbooksKeys[i]);

searchbooksPref = findPreference(SEARCHBOOKS_KEY);

// 省略
}


@Override
protected void onResume() {
super.onResume();
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(listener);
}

@Override
protected void onPause() {
super.onPause();
getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(listener);
}

// ここで summary を動的に変更
private SharedPreferences.OnSharedPreferenceChangeListener listener =
new SharedPreferences.OnSharedPreferenceChangeListener() {

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {

if(key.equals(SEARCHBOOKS_KEY))
searchbooksPref.setSummary(searchbooksMap.get(sharedPreferences.getString(key, "Books")));
}
};


SharedPreferences.OnSharedPreferenceChangeListener を定義して、preference の設定値が変更されたときの処理を実装します。

このリスナーを onResume() と onPause() でレジスト/アンレジストします。

設定値が変更されたときに、どの preference が変更されたかは、onSharedPreferenceChanged の引数の key に入ってます。

ここでは、設定値が複数の項目から選択する場合(リスト)の実装です。
# 選択項目の表示 array と値 array がarray-string で resource に定義してあります。

たとえば、単に preference の設定値を表示するだけの場合は(uid を表示するとか)こんな感じでOKです。


private SharedPreferences.OnSharedPreferenceChangeListener listener =
new SharedPreferences.OnSharedPreferenceChangeListener() {

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {

findPreference(key).setSummary(sharedPreferences.getString(key, "00000000"));
}
};