メモ代わり。てきとーに。 いや、ですからてきとーですって。 2年前ぐらいにPythonあたりでメールくれた方、ごめんなさい。メール紛失してしまい無視した形になってしまいました。。。

2011年4月29日金曜日

[Android][お勉強] ファイルシステム

AndroidはLinuxが動いているので、完全なルートファイルシステムがマウントされているそうで。

とういうことで早速。

まずはプロジェクト作成。


$ android create project -n myfiles -t 7 -p /home/konno/work/t/myfiles -k jp.co.qsdn.android -a MyFiles
 


で、MyFiles.java修正。

package jp.co.qsdn.android;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

import java.io.*;

public class MyFiles extends Activity
{
private int counter = 0;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
TextView textView = new TextView(this);
textView.setText(createFileView("/"));
setContentView(textView);
}

protected String createFileView(String fileName) {
File f = new File(fileName);
String s = fileName + "\n";
counter++;
if (counter >= 10) return s;
if (f.isDirectory() ) {
File fls[] = f.listFiles();
for (int i=0;i<fls.length;i++) {
s = s + createFileView(fls[i].getPath());
}
}
return s;
}
}
 

というどうしょうもないActivityに。

で、コンパイル。

$ ant debug
 


で、実機へぽい。

すると画面には・・・・

/
/dev
/dev/pts
/dev/socket
/dev/socket/property_service
/dev/socket/void
・・・
 

なんてなのが表示された。

ふーん。。。

パッケージは

/data/data/パッケージ名
 

と言う感じで設置されるらしい。

入出力する際は、大きなデータを書き込むとI/Oエラーになる。
だって領域小さいもんね。

SDカードは

/sdcard
 

なんですかね。。。
SDカードに書き込む際は、WRITE_EXTERNAL_STORAGEパーミッションを要求しとかないとダメとのこと。(マニフェストファイル)

そんだけー
.

[Android][お勉強] インスタンス状態

永久的に保存する必要のない、現インスタンスの状態は


android.os.Bundle

で管理される。

*.onSaveInstanceSate()や*.onRestoreInstanceState()
あたりがインスタンス状態を保存/復帰するいい感じのタイミングで呼ばれるとのこと。
onSaveInstanceStateで保存された「状態」は、再初期化される直前に
リストアされる。

.

[Android][お勉強] SharedPreferences

データを保存しておくために、

1) Shared Preferences
2) Internal Storage
3) External Storage
4) SQLite Databases
5) Network Connection

が用意されているそうな。
その中に、SharedPreferencesがある。

設定画面を構築する際に用いるPreferenceActivityは
ユーザのPreferenceを保存するのに内部でSharedPreferenceを使っているんだって。
でもSharedPreferenceは厳密にはユーザPreferenceを保存するためのものではないそうな。

SharedPreferencesはプリミティブなデータのkey-valueストア。
ユーザセッションにまたがってデータを受け渡しできる。

.

[Android][お勉強] より宣言的に

Androidでは、手続き的にデザインを記述(Javaコードごりごり書く)する方法と宣言的にデザインを記述(XMLでごりごり)する方法の2つの方法をサポートする。

Googleさんは宣言的にアプローチすることを勧めているとのこと。


TextView textView = new TextView(this);
textView.setText("あいうえお");
setContentView(textView);
 

とする代わりにres/layout/main.xmlで

<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="あいうえお"
/>


と書くこともできる。

.

[Android][お勉強] リソース

ローカライズされた文字列、画像、プログラムが必要とするコード以外の情報のこと。
リソースはプロジェクトのresディレクトリに配置する。

.

[Android][お勉強] コンテンツプロバイダ

アプリケーション間でグローバルなデータを共有するための仕組み。

.

[Android][お勉強] Service

Unixなどのデーモンと同じように、ユーザと直接的なやりとりを行わず
バックグラウンドでこっそり生きているタスクのことをサービスという。


現在のアクティビティが終了した後も実行され続けるバックグラウンドプロセスを起動するための方法。
.

[Android][お勉強] Intent

AndroidはIntentという部品が強力らしい。

Intentとは、アクションを記述するメカニズムで
ほとんどすべてのアクションがIntentを経由するとのこと。

Intentがあることで、コンポーネントの再利用、交換がより簡単になる。

.

[Android][お勉強]コマンドラインでログ


Log.d("なんたら","かんたら")
 

というのをあっちこっちに埋め込んだりするんだけど
そのログを見るには

$ adb logcat
 

ってすればよいだけ。

そして、そんだけー

.

2011年4月26日火曜日

[Android][お勉強] アプリケーション

アプリケーション=プロセス、ではないらしい。

プロセスは死んでいても、アプリケーションは動作中
ということがありえる。

端末を縦から横にすると一旦プロセスが終了し、再起動されるとのこと。

アプリケーションのライフサイクルは、プロセスのライフサイクルと
同じではない。

ちなみに、電源を入れると最初に表示されるアプリはHomeアプリケーションとのこと。

これはおもしろいかも。

.

[Android][お勉強] Activity

Activityとは、「ユーザインタフェース画面」らしい。


.

[Android][お勉強] コマンドラインツールのドキュメント

リンク。

http://d.android.com/guide/developing/tools


.

[Android][お勉強] Androidの特徴

なんで今Androidかってーと、
単にAndroidに機種変したからでしたー。

ということでせっかくだからちゃんと勉強してみるか、
って感じ。


まずはAndroidって何よってところから。

Androidの特徴
1) Linux、その他のオープンソースを基礎とするフリー&オープンな開発プラットフォーム
2) コンポーネントアーキテクチャ
3) ライフサイクル管理
4) 高品質グラフィックス・サウンド
5) 高い移植性
だそうで。

DalvikというVMで動作しているんだってさ。
DalvikはJavaクラスファイルをdexというファイル形式に変換後
実行するのでJavaVMではないらしい。

ちなみに携帯各社が変更してもソースを公開しなくてよいように、
ライセンスはGPLではなくApacheライセンス2.0。

.

[Android][お勉強] API Levelって何よ

「Androidプラットフォームのバージョンによって提供されるフレームワークAPIのリビジョン」

だそうで。

ふーん。


ということは、WallpaperServiceとか使う場合には、、、
API Level 7以降を使う、ということで良いのかしらん。

--
できたー

.

2011年4月25日月曜日

[Android][お勉強] 実機で動かす

なんか作ったら、実機で動かしてみたくならない?
デバッグとかいいから、とにかく。

そんなことないならどうでもいいけど。

とりあえずUSBでデバッグとか、インストールとか
はおいといて、WWWサーバにぽいっとおいてダウンロードすれば
いいだけ。

まぁ、そりゃそうだ。

一応「提携元不明のアプリ」という設定にチェックを入れて
おく必要があるかもしれない。


で、実行してみると・・・んちゃ!

とりあえずは後はもうJava。
とにかくJava。
ただのJava。
きっと・・・多分・・・

そんだけ。


.

2011年4月24日日曜日

[Android][お勉強] アプリ開発してみるのメモ

Androidアプリでも作ってみるメモ.

android SDK落としてきてJDKが動く環境は既にあるっていうことで。

やることはおおむね以下のとおりだよーん。
1) android用プロジェクトの作成
$ android create project なんたらかんたら
2) ソース書く
3) ant
とりあえずはant debug。
$ ant debug
4) apkファイルのエミュレータへのインストール
$ adb install なんたらかんたら


では早速。


$ android list target
 

ってやると

android list target
Available Android targets:
id: 1 or "android-3"
Name: Android 1.5
Type: Platform
API level: 3
Revision: 4
Skins: QVGA-P, QVGA-L, HVGA-L, HVGA (default), HVGA-P
id: 2 or "Google Inc.:Google APIs:3"
Name: Google APIs
Type: Add-On
Vendor: Google Inc.
Revision: 3
Description: Android + Google APIs
Based on Android 1.5 (API level 3)
Libraries:
* com.google.android.maps (maps.jar)
API for Google Maps
Skins: QVGA-P, HVGA (default), HVGA-L, QVGA-L, HVGA-P
id: 3 or "android-4"
Name: Android 1.6
Type: Platform
API level: 4
Revision: 3
Skins: WVGA854, WVGA800 (default), QVGA, HVGA
id: 4 or "Google Inc.:Google APIs:4"
Name: Google APIs
Type: Add-On
Vendor: Google Inc.
Revision: 2
Description: Android + Google APIs
Based on Android 1.6 (API level 4)
Libraries:
* com.google.android.maps (maps.jar)
API for Google Maps
Skins: WVGA854, HVGA, QVGA, WVGA800 (default)
id: 5 or "SHARP Corporation:JN-DK01:4"
Name: JN-DK01
Type: Add-On
Vendor: SHARP Corporation
Revision: 1
Description: SHARP JN-DK01 Add-on
Based on Android 1.6 (API level 4)
Libraries:
* jp.co.sharp.android.hardware (hardware.jar)

* jp.co.sharp.android.io.obex (obex.jar)

Skins: WVGA854, HVGA, QVGA, WVGA800, JNDK01 (default)
Adds USB support for devices (Vendor: 0x04DD)
id: 6 or "android-7"
Name: Android 2.1-update1
Type: Platform
API level: 7
Revision: 2
Skins: WQVGA432, WVGA854, WVGA800 (default), WQVGA400, QVGA, HVGA
id: 7 or "Google Inc.:Google APIs:7"
Name: Google APIs
Type: Add-On
Vendor: Google Inc.
Revision: 1
Description: Android + Google APIs
Based on Android 2.1-update1 (API level 7)
Libraries:
* com.google.android.maps (maps.jar)
API for Google Maps
Skins: WQVGA400, WVGA854, HVGA, WQVGA432, QVGA, WVGA800 (default)
id: 8 or "android-8"
Name: Android 2.2
Type: Platform
API level: 8
Revision: 2
Skins: WQVGA432, WVGA854, WVGA800 (default), WQVGA400, QVGA, HVGA
id: 9 or "Google Inc.:Google APIs:8"
Name: Google APIs
Type: Add-On
Vendor: Google Inc.
Revision: 2
Description: Android + Google APIs
Based on Android 2.2 (API level 8)
Libraries:
* com.google.android.maps (maps.jar)
API for Google Maps
Skins: WQVGA400, WVGA854, HVGA, WQVGA432, QVGA, WVGA800 (default)
id: 10 or "Samsung Electronics Co., Ltd.:GALAXY Tab Addon:8"
Name: GALAXY Tab Addon
Type: Add-On
Vendor: Samsung Electronics Co., Ltd.
Revision: 1
Based on Android 2.2 (API level 8)
Skins: WQVGA400, WVGA854, GALAXY Tab (default), HVGA, WQVGA432, QVGA, WVGA800
id: 11 or "android-9"
Name: Android 2.3.1
Type: Platform
API level: 9
Revision: 2
Skins: WQVGA432, WVGA854, WVGA800 (default), WQVGA400, QVGA, HVGA
id: 12 or "Google Inc.:Google APIs:9"
Name: Google APIs
Type: Add-On
Vendor: Google Inc.
Revision: 2
Description: Android + Google APIs
Based on Android 2.3.1 (API level 9)
Libraries:
* com.google.android.maps (maps.jar)
API for Google Maps
Skins: WQVGA400, WVGA854, HVGA, WQVGA432, QVGA, WVGA800 (default)
id: 13 or "Sony Ericsson Mobile Communications AB:EDK:9"
Name: EDK
Type: Add-On
Vendor: Sony Ericsson Mobile Communications AB
Revision: 1
Description: XPERIA Device
Based on Android 2.3.1 (API level 9)
Libraries:
* com.sonyericsson.eventstream_1 (com.sonyericsson.eventstream_1.jar)
Library for Android Market filtering
Skins: WQVGA400, WVGA854, Xperia (default), HVGA, WQVGA432, QVGA, WVGA800
id: 14 or "android-10"
Name: Android 2.3.3
Type: Platform
API level: 10
Revision: 1
Skins: WQVGA432, WVGA854, WVGA800 (default), WQVGA400, QVGA, HVGA
id: 15 or "Google Inc.:Google APIs:10"
Name: Google APIs
Type: Add-On
Vendor: Google Inc.
Revision: 1
Description: Android + Google APIs
Based on Android 2.3.3 (API level 10)
Libraries:
* com.google.android.maps (maps.jar)
API for Google Maps
Skins: WQVGA400, WVGA854, HVGA, WQVGA432, QVGA, WVGA800 (default)
id: 16 or "android-11"
Name: Android 3.0
Type: Platform
API level: 11
Revision: 1
Skins: WXGA (default)
id: 17 or "Google Inc.:Google APIs:11"
Name: Google APIs
Type: Add-On
Vendor: Google Inc.
Revision: 1
Description: Android + Google APIs
Based on Android 3.0 (API level 11)
Libraries:
* com.google.android.maps (maps.jar)
API for Google Maps
Skins: WXGA (default)
 

ってなってる.
さて、このlistの中からターゲットとなる

id: 5 or "SHARP Corporation:JN-DK01:4"
 

を何となく選び、android用プロジェクトを作成するよ.

プロジェクト作成のためにはandroidコマンドを叩いちゃう.
android --helpでチェック.

Valid actions are composed of a verb and an optional direct object:
- list : Lists existing targets or virtual devices.
- list avd : Lists existing Android Virtual Devices.
- list target : Lists existing targets.
- create avd : Creates a new Android Virtual Device.
- move avd : Moves or renames an Android Virtual Device.
- delete avd : Deletes an Android Virtual Device.
- update avd : Updates an Android Virtual Device to match the folders of a new SDK.
- create project : Creates a new Android project.
- update project : Updates an Android project (must already have an AndroidManifest.xml).
- create test-project : Creates a new Android project for a test package.
- update test-project : Updates the Android project for a test package (must already have an AndroidManifest.xml).
- create lib-project : Creates a new Android library project.
- update lib-project : Updates an Android library project (must already have an AndroidManifest.xml).
- update adb : Updates adb to support the USB devices declared in the SDK add-ons.
- update sdk : Updates the SDK by suggesting new platforms to install if available.


と出るんで、必要なのは"create project".

で、で、
のりで"android --help create project"と叩いてみる.
create projectに絞られたhelpが表示された.

$ android --help create project

Usage:
android [global options] create project [action options]

Global options:
-v --verbose Verbose mode: errors, warnings and informational messages are printed.
-h --help Help on a specific command.
-s --silent Silent mode: only errors are printed out.

Action "create project":
Creates a new Android project.
Options:
-n --name Project name
-t --target Target ID of the new project [required]
-p --path The new project's directory [required]
-k --package Android package name for the application [required]
-a --activity Name of the default Activity that is created [required]
 

ん。おっけー。
ということで

$ android create project -n Ncha -t 5 -p /home/konno/work/t/ncha -k jp.co.qsdn.android -a Ncha


と入力してベーン!

その結果指定したディレクトリに色々できるよ!

Created directory /home/konno/work/t/ncha/src/jp/co/qsdn/android
Added file /home/konno/work/t/ncha/src/jp/co/qsdn/android/Ncha.java
Created directory /home/konno/work/t/ncha/res
Created directory /home/konno/work/t/ncha/bin
Created directory /home/konno/work/t/ncha/libs
Created directory /home/konno/work/t/ncha/res/values
Added file /home/konno/work/t/ncha/res/values/strings.xml
Created directory /home/konno/work/t/ncha/res/layout
Added file /home/konno/work/t/ncha/res/layout/main.xml
Added file /home/konno/work/t/ncha/AndroidManifest.xml
Added file /home/konno/work/t/ncha/build.xml
Added file /home/konno/work/t/ncha/proguard.cfg
  

と、こんな感じぃ.

プロジェクトのホームは

/home/konno/work/t/ncha
 

なので、

$ cd /home/konno/work/t/ncha
 

すると、カレントにbuild.xmlファイルがあるんで

$ ant help
Buildfile: /home/konno/work/t/ncha/build.xml
[setup] Android SDK Tools Revision 10
[setup] Project Target: JN-DK01
[setup] Vendor: SHARP Corporation
[setup] Platform Version: 1.6
[setup] API level: 4
[setup]
[setup] ------------------
[setup] Resolving library dependencies:
[setup] No library dependencies.
[setup]
[setup] ------------------
[setup]
[setup] WARNING: No minSdkVersion value set. Application will install on all Android versions.
[setup]
[setup] Importing rules file: tools/ant/main_rules.xml

help:
[echo] Android Ant Build. Available targets:
[echo] help: Displays this help.
[echo] clean: Removes output files created by other targets.
[echo] compile: Compiles project's .java files into .class files.
[echo] debug: Builds the application and signs it with a debug key.
[echo] release: Builds the application. The generated apk file must be
[echo] signed before it is published.
[echo] install: Installs/reinstalls the debug package onto a running
[echo] emulator or device.
[echo] If the application was previously installed, the
[echo] signatures must match.
[echo] uninstall: Uninstalls the application from a running emulator or
[echo] device.

BUILD SUCCESSFUL
Total time: 1 second
 

とすれば大体分かるはず.
とりあえずは、ant debugでapkファイルを作ってみっペ。
せっかくだからソースもちょっとだけいじるよ.

$ vi /home/konno/work/t/ncha/src/jp/co/qsdn/android/Ncha.java
 

として

package jp.co.qsdn.android;

import android.app.Activity;
import android.os.Bundle;

public class Ncha extends Activity
{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
 



package jp.co.qsdn.android;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class Ncha extends Activity
{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
TextView textView = new TextView(this);
textView.setText("んちゃ!");
setContentView(textView);
}
}
 

と変更。

http://developer.android.com/reference/packages.html
に行けばいつものjavadocは見れると。

で、ant debug。

$ ant debug
Buildfile: /home/konno/work/t/ncha/build.xml
[setup] Android SDK Tools Revision 10
[setup] Project Target: JN-DK01
[setup] Vendor: SHARP Corporation
[setup] Platform Version: 1.6
[setup] API level: 4
[setup]
[setup] ------------------
[setup] Resolving library dependencies:
[setup] No library dependencies.
[setup]
[setup] ------------------
[setup]
[setup] WARNING: No minSdkVersion value set. Application will install on all Android versions.
[setup]
[setup] Importing rules file: tools/ant/main_rules.xml

-debug-obfuscation-check:

-set-debug-mode:

-compile-tested-if-test:

-pre-build:

-dirs:
[echo] Creating output directories if needed...

-aidl:
[echo] Compiling aidl files into Java classes...

-renderscript:
[echo] Compiling RenderScript files into Java classes and RenderScript bytecode...

-resource-src:
[echo] Generating R.java / Manifest.java from the resources...

-pre-compile:

compile:
[javac] /home/konno/android-sdk-linux_x86/tools/ant/main_rules.xml:384: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
[javac] Compiling 2 source files to /home/konno/work/t/ncha/bin/classes

-post-compile:

-obfuscate:

-dex:
[echo] Converting compiled files and external libraries into /home/konno/work/t/ncha/bin/classes.dex...

-package-resources:
[echo] Packaging resources
[aapt] Creating full resource package...

-package-debug-sign:
[apkbuilder] Creating Ncha-debug-unaligned.apk and signing it with a debug key...

debug:
[echo] Running zip align on final apk...
[echo] Debug Package: /home/konno/work/t/ncha/bin/Ncha-debug.apk

BUILD SUCCESSFUL
Total time: 4 seconds
 

できたー。

したらエミュレータ動かすよ。
AVDは作っといてね。

$ emulator -avd JNDK01
 

あ、JNDK01は先に作っておいたAVDね。

で、で、いよいよ先に作ったNchaをインストールするよ。
インストールにはadbを使う。

apkファイルは/home/konno/work/t/ncha/bin/Ncha-debug.apkにあるので

$ adb install /home/konno/work/t/ncha/bin/Ncha-debug.apk
90 KB/s (4546 bytes in 0.049s)
pkg: /data/local/tmp/Ncha-debug.apk
Success
 

でインストール完了。

virtual端末に行って、メインメニューを出すと、あら不思議。
Nchaアプリがあるよ。

で、実行してみると、、、、んちゃ!

そんだけー
.