andy lib解説

67
Re:Kayo-System Co.,Ltd. Twitter @yokmama Now Loading. Please Wait ... 夜子まま塾ADK ECCコンピュータ専門学校 2012127日金曜日

Upload: masafumi-terazono

Post on 15-Jan-2015

1.485 views

Category:

Technology


0 download

DESCRIPTION

2012/1/28夜子まま塾ADKの資料です

TRANSCRIPT

Page 1: Andy lib解説

Re:Kayo-System Co.,Ltd.

Twitter @yokmamaNow Loading. Please Wait ...

夜子まま塾ADKECCコンピュータ専門学校

2012年1月27日金曜日

Page 2: Andy lib解説

Re:Kayo-System Co.,Ltd.

自己紹介氏名   :寺園聖文(てらぞの まさふみ)

肩書   :株式会社Re:Kayo-System 代表取締役社長

活動拠点 :神戸近郊~日本→海外行きたい

著書   :「10日でおぼえるAndroidアプリ開発入門教室」著(翔泳社)

      「HTML5によるAndroidアプリ開発入門」監修(日経BP)

アプリ  :「Just Player」「Skip Memo」「ふりがなオートマチック」等

好きなもの:アニメ、決して萌えじゃない、見てるけど、あくまで研究の一環

嫌いなもの:とくになし

最近のテーマ:電子工作、運動すること、英語

2012年1月27日金曜日

Page 3: Andy lib解説

Re:Kayo-System Co.,Ltd.

目次

•ウォーミングアップ• AndyLib開発•実践(AndyLibLedProj)

2012年1月27日金曜日

Page 4: Andy lib解説

Re:Kayo-System Co.,Ltd.

ウォーミングアップ

2012年1月27日金曜日

Page 5: Andy lib解説

Re:Kayo-System Co.,Ltd.

Androidアプリ開発

• Javaプログラミング• XMLレイアウティング• Androidフレームワーク

2012年1月27日金曜日

Page 6: Andy lib解説

Re:Kayo-System Co.,Ltd.

Javaプログラミング

2012年1月27日金曜日

Page 7: Andy lib解説

Re:Kayo-System Co.,Ltd.

Javaファイル

Javaファイル

パッケージ

src

Javaファイルはパッケージフォルダに下に機能別に配置します。

パッケージが違うなら、同じファイル名(クラス名)にしても問題ありません。

2012年1月27日金曜日

Page 8: Andy lib解説

Re:Kayo-System Co.,Ltd.

プログラムの構成class Hoge {

String msg = “Hello”;

void Func(){System.out.println(msg);}

}

クラスの定義の開始

メソッドの定義の開始

クラスの定義ここまで

メソッドの定義ここまで

メンバの定義

2012年1月27日金曜日

Page 9: Andy lib解説

Re:Kayo-System Co.,Ltd.

クラスとメソッドクラスはメソッドとメンバの集合です。

C言語の構造体に似ています。Javaのクラスはファイル名と同じ名前のクラスを一番外側({}で括られた)に1

つおかないといけません。しかし、クラスの中にクラスを宣言することができるので。1ファイルにクラスはひとつだけというわけでは有りません。

2012年1月27日金曜日

Page 10: Andy lib解説

Re:Kayo-System Co.,Ltd.

具体例class Hoge {

class Fuga {void print(){System.out.println(“hello”);}

}

} クラスの中にクラスを宣言できる

2012年1月27日金曜日

Page 11: Andy lib解説

Re:Kayo-System Co.,Ltd.

メソッドの使用

自分のメソッドを使用する

class Hoge {String msg = “Hello”;void Func(){System.out.println(msg);}void Func2(){Func();}}

2012年1月27日金曜日

Page 12: Andy lib解説

Re:Kayo-System Co.,Ltd.

メソッドの呼び出しclass Hoge {String msg = “Hello”;void Func(){System.out.println(msg);}}

class Fuga {void Func(){Hoge hoge = new Hoge();hoge.Func();}}

一度クラスを生成してから呼び出す

2012年1月27日金曜日

Page 13: Andy lib解説

Re:Kayo-System Co.,Ltd.

privateとpublicclass Hoge {String msg = “Hello”;public void Func(){System.out.println(msg);}private void Func2(){System.out.println(msg);}}

class Fuga {void Func(){Hoge hoge = new Hoge();hoge.Func();hoge.Func2();}}

OK

NG

2012年1月27日金曜日

Page 14: Andy lib解説

Re:Kayo-System Co.,Ltd.

実行ファイルjavaファイル

javac

classファイル

dx変換 dexファイル

apkファイル

Android端末にAPKファイルを転送し実行する

2012年1月27日金曜日

Page 15: Andy lib解説

Re:Kayo-System Co.,Ltd.

XMLレイアウティング

2012年1月27日金曜日

Page 16: Andy lib解説

Re:Kayo-System Co.,Ltd.

レイアウトファイル

レイアウトファイル(XML)

layout

res

レイアウトファイルは リソースフォルダに下に種別毎に配置します。

リソースフォルダにはレイアウトの他に画像や、音声といったファイルもあります。

2012年1月27日金曜日

Page 17: Andy lib解説

Re:Kayo-System Co.,Ltd.

レイアウトファイル<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > </LinearLayout>

レイアウトはXMLで定義します。使うタグや属性はあらかじめ準備され

ているものを使います。

2012年1月27日金曜日

Page 18: Andy lib解説

Re:Kayo-System Co.,Ltd.

レイアウトエディタ

このタブでグラフィカルな編集画面の切替ができます。

2012年1月27日金曜日

Page 19: Andy lib解説

Re:Kayo-System Co.,Ltd.

ボタンの追加

画面上のボタンをドラッグ&ドロップで画面に追加できる。

2012年1月27日金曜日

Page 20: Andy lib解説

Re:Kayo-System Co.,Ltd.

レイアウト属性<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical" >

<Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" />

</LinearLayout>

必須

2012年1月27日金曜日

Page 21: Andy lib解説

Re:Kayo-System Co.,Ltd.

レイアウトへのアクセスレイアウトファイルlayout/main.xml

R.java

public static final class layout { public static final int control=0x7f030000; public static final int device_list=0x7f030001; public static final int device_name=0x7f030002; public static final int hoge=0x7f030003; public static final int main=0x7f030004; }

Javaプログラム

2012年1月27日金曜日

Page 22: Andy lib解説

Re:Kayo-System Co.,Ltd.

具体例public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button btn = (Button)findViewById(R.id.button1);}

レイアウトの指定レイアウト内のボタンを取得

2012年1月27日金曜日

Page 23: Andy lib解説

Re:Kayo-System Co.,Ltd.

Androidフレームワーク

2012年1月27日金曜日

Page 24: Andy lib解説

Re:Kayo-System Co.,Ltd.

クラスを使いこなすAndroidはJava1.6をベースにしたライブラリを使用することができます。(全てではない)また、Android特有のクラスとしてWebKitやSQLiteといった機能へのアクセスもできます。そのためこれらの機能にどのようなものがあるのか、また使うにはどすればいいのかを知ることがアプリ開発の近道になっています。

2012年1月27日金曜日

Page 25: Andy lib解説

Re:Kayo-System Co.,Ltd.

2012年1月27日金曜日

Page 26: Andy lib解説

Re:Kayo-System Co.,Ltd.

イベント処理

Button

ボタンが押されたときの処理

フレームワーク

あらかじめButtonに設定しておく

クリックされた

呼び出し

2012年1月27日金曜日

Page 27: Andy lib解説

Re:Kayo-System Co.,Ltd.

具体例Button btn = (Button)findViewById(R.id.button1);

btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // クリック処理 }});

クリックの他にもイベントの種類毎に処理を設定できます。

2012年1月27日金曜日

Page 28: Andy lib解説

Re:Kayo-System Co.,Ltd.

AndyLib開発

2012年1月27日金曜日

Page 29: Andy lib解説

Re:Kayo-System Co.,Ltd.

AndyLIb解説

• AndyLib概要• AndyLib開発手順

2012年1月27日金曜日

Page 30: Andy lib解説

Re:Kayo-System Co.,Ltd.

AndyLibはAndroidのライブラリ

AndyLibプロジェクト

Javaプログラム

リソースファイル

マニフェストファイル

2012年1月27日金曜日

Page 31: Andy lib解説

Re:Kayo-System Co.,Ltd.

AndyLibは神戸支部の中で生まれました

https://sites.google.com/site/androidjpkobe/日本Androidの会 神戸支部

日本Androidの会 神戸支部 GoogleCodehttp://code.google.com/p/android-jp-kobe/

2012年1月27日金曜日

Page 32: Andy lib解説

Re:Kayo-System Co.,Ltd.

AndyLibは外部機器との接続を楽にするライブラリ

フレームワークではなくライブラリ。雑多な処理を楽にするクラスやメソッド

の集合です。

2012年1月27日金曜日

Page 33: Andy lib解説

Re:Kayo-System Co.,Ltd.

AndyLibはオープンソース

商用、非商用に関わらず使用可能改変して使用可

ライセンスの種類はApache2

2012年1月27日金曜日

Page 34: Andy lib解説

Re:Kayo-System Co.,Ltd.

AndyLibの構成

AndyLib

MemoryMapプロトコル

ADK Bluetooth

Web/Android外部機器

TCP/IP AndroidFramwork

2012年1月27日金曜日

Page 35: Andy lib解説

Re:Kayo-System Co.,Ltd.

提供クラス(コンポーネントクラス)jp.co.kayo.ykmjuku.andylib.componentADKComponent ・・・ ADKBluetoothComponent ・・・ BluetoohTTSComponent ・・・ TextToSpeechMotionController ・・・ 6軸操作

2012年1月27日金曜日

Page 36: Andy lib解説

Re:Kayo-System Co.,Ltd.

提供クラス(プロトコルクラス)

jp.co.kayo.ykmjuku.andylib.cmd

AndyCommand ・・・     メモリマッププロトコル対応コマンド

2012年1月27日金曜日

Page 37: Andy lib解説

Re:Kayo-System Co.,Ltd.

提供クラス(その他)

ComponentHelper ・・・     コンポネント登録・取得クラス

jp.co.kayo.ykmjuku.andylib.tools

2012年1月27日金曜日

Page 38: Andy lib解説

Re:Kayo-System Co.,Ltd.

MemoryMapプロトコル

•プロトコル概要•データの送信例•複数のデバイスを制御する•プロトコルの表の見方

2012年1月27日金曜日

Page 39: Andy lib解説

Re:Kayo-System Co.,Ltd.

プロトコルの重要性Androidと外部機器の接続に関してはAndroidフレームワークを利用することで様々な方法で接続することが可能にな

りました。そして、AndyLibのような実装を楽にするライブラリを使

うことですぐに利用することも可能になります。しかし、問題はその先で、外部機器とAndroid端末をどのように通信させるかについては決まったものはなく、実装

に委ねられているのが現実です。

2012年1月27日金曜日

Page 40: Andy lib解説

Re:Kayo-System Co.,Ltd.

一般的なプロトコル

ヘッダー データ

ヘッダーにはデータのサイズや種類等が含まれる

0-2:データ長2-3:データ形式

2012年1月27日金曜日

Page 41: Andy lib解説

Re:Kayo-System Co.,Ltd.

考えることは多い

•データのチェックをしたい•処理を早くしたい•大きいデータを扱いたい•データの欠落を防ぎたい

etc

2012年1月27日金曜日

Page 42: Andy lib解説

Re:Kayo-System Co.,Ltd.

MemoryMapプロトコル

Header10xFA

Header10xAF

Cmd1byte

Address1byte

datanbyte

Sum1byte

11111010 10101111ノイズ対策

コマンド:モーターなら順回転、反回転のような

書き込むアドレス 書き込むデータ

整合性チェックのためのXOFフラグ

Length1byte

データ長

2012年1月27日金曜日

Page 43: Andy lib解説

Re:Kayo-System Co.,Ltd.

具体例Header10xFA

Header10xAF

Cmd0x03

Address0x1B

data10xBF

Sum0x1A

Length2

data20xBF

Sum:パケットのチェックサムを8bitで表します。チェックサムはパケットの列のCmdから、Sumの1つ前のデータまでを1byteに区切り、XORした値です。

2012年1月27日金曜日

Page 44: Andy lib解説

Re:Kayo-System Co.,Ltd.

MemoryMap表

2012年1月27日金曜日

Page 45: Andy lib解説

Re:Kayo-System Co.,Ltd.

MemoryMapの特徴プログラムとハードの間に仮想的なメモリマップがあると考えて実装することができる。

C言語のアドレス空間に近い。

書き込むアドレスは固定なので、データへのアクセスが直感的にわかる。

2012年1月27日金曜日

Page 46: Andy lib解説

Re:Kayo-System Co.,Ltd.

顕著な例通常二つのモーターを制御したい場合、

方法としてモーター1とモーター2の制御用のコマンドを作成し、プログラムから送信する。

Android Deviceモータ1 Pw3

モータ2 Pw1

2012年1月27日金曜日

Page 47: Andy lib解説

Re:Kayo-System Co.,Ltd.

新規にコマンドを作成しかし先ほどの場合、二回送信しないといけないのでタイミングにバラつきがでてくる上、通信量

も多くなる。そのため、別途二個を制御するためのコマンドを

作成する必要がでてくる。

Android Deviceモータ12 Pw3、1

2012年1月27日金曜日

Page 48: Andy lib解説

Re:Kayo-System Co.,Ltd.

コマンド主導の課題アプリケーションの実装に合わせてプロトコ

ルを作っていく必要がある。そのため、外部機器側とソフト側できっちりとプロトコルを合わせる作業が必要になるため、双方でのやりとりが重要になる。

Androidアプリ開発と外部機器の開発では異なる知識が必要なので、新しくはじめる人に

とって敷居が高いものになる。

2012年1月27日金曜日

Page 49: Andy lib解説

Re:Kayo-System Co.,Ltd.

MemoryMapではHeader10xFA

Header10xAF

Cmd0x03

Address0x1B

data10xBF

Sum0x1A

Length2

data20xBF

モーター1とモータ2は隣同士のアドレスに配置されている。そのため上記のコマンドのようにアドレスをまたがるようにデータを書き込むと1つのコマンドで二つの値を変更することが

できる。2012年1月27日金曜日

Page 50: Andy lib解説

Re:Kayo-System Co.,Ltd.

例えば

1 2

このような複数の制御が必要なデバイスでも1つのコマンドで操作できようになる。

MemoryMapに配置するアドレスの並びかえは職人技的とも

いえる。

2012年1月27日金曜日

Page 51: Andy lib解説

Re:Kayo-System Co.,Ltd.

AndyLibLedProj

2012年1月27日金曜日

Page 52: Andy lib解説

Re:Kayo-System Co.,Ltd.

新規プロジェクト作成

File->New

AndyLibLedProj

2012年1月27日金曜日

Page 53: Andy lib解説

Re:Kayo-System Co.,Ltd.

TargetSDKの設定

NewAndroidProject->Next

Android2.3.3のGoogleAPIs

2012年1月27日金曜日

Page 54: Andy lib解説

Re:Kayo-System Co.,Ltd.

Project 設定

NewAndroidProject->Next

ApplicationNames: AndyLibLedProjPackageName: jp.ykmjuku.android.andylibledCreateActivity: MainActivityMInimumSDK: 10

2012年1月27日金曜日

Page 55: Andy lib解説

Re:Kayo-System Co.,Ltd.

初期画面

雛形のプロジェクトが出来ただけです。これにAndyLibを追加してプログラムを実装していきます。

2012年1月27日金曜日

Page 56: Andy lib解説

Re:Kayo-System Co.,Ltd.

AndyLibの追加File->Import

2012年1月27日金曜日

Page 57: Andy lib解説

Re:Kayo-System Co.,Ltd.

AndyLibの追加Import → Next

AndyLibのプロジェクト

2012年1月27日金曜日

Page 58: Andy lib解説

Re:Kayo-System Co.,Ltd.

AndyLibの追加

Project→Properties Androidの項目から、下部のAddボタンで先ほど追加したAndyLibのプロジェク

トを選択

2012年1月27日金曜日

Page 59: Andy lib解説

Re:Kayo-System Co.,Ltd.

CompatibilityAPIの追加

右クリックメニュー → Android Tools→Add Compatibility Library...

2012年1月27日金曜日

Page 60: Andy lib解説

Re:Kayo-System Co.,Ltd.

画面の作成

ドラッグ&ドロップでLEDのOn/Offボタンを追加

2012年1月27日金曜日

Page 61: Andy lib解説

Re:Kayo-System Co.,Ltd.

ADKコンポーネントの追加Layout→FragmentをDrag&Dropする

ADKComponentを選択する

<fragment android:id="@+id/fragment1" android:tag="ADK" android:layout_width="0dip" android:layout_height="0dip" android:name="jp.co.kayo.ykmjuku.andylib.component.ADKComponent" />

さらに表示する必要はないので高さ、幅を0dipにすると尚良い。

画面はXML編集モードで直接編集

コンポーネントに名前をつける。あとで使用するため重要

2012年1月27日金曜日

Page 62: Andy lib解説

Re:Kayo-System Co.,Ltd.

プログラム作成DeviceComponent mDevice;/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ToggleButton toggleButton1 = (ToggleButton)findViewById(R.id.toggleButton1); toggleButton1.setOnCheckedChangeListener(this); try { mDevice = ComponentHelper.getDevice(getSupportFragmentManager(), "ADK"); } catch (Exception e) { Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show(); }}

MainActivity.java : 初期化処理

ボタンのイベント設定

ADKコンポーネントの取得

2012年1月27日金曜日

Page 63: Andy lib解説

Re:Kayo-System Co.,Ltd.

プログラム作成

public void onCheckedChanged(CompoundButton buttonView, final boolean isChecked) { if(mDevice!=null){ AndyCommand cmd = new AndyCommand( (byte) 0x03, (byte) 0x1B, new byte[] { isChecked?(byte)1:(byte)0 }); try { mDevice.sendCommand(cmd); } catch (IOException e) { Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show(); } }}

MainActivity.java : LEDボタンクリック処理

コマンドの送信

コマンドの生成

2012年1月27日金曜日

Page 64: Andy lib解説

Re:Kayo-System Co.,Ltd.

ADKの設定

<?xml version="1.0" encoding="utf-8"?><resources> <usb-accessory manufacturer="Google, Inc." model="DemoKit" version="1.0" /></resources>

<AndroidProject>/res/xml/accessory_filter.xml

外部機器の認証のため、デバイス側から送信される文字列をここに設定し、新規でXMLファイルとしてres/xmlの

下にファイルを追加する。

2012年1月27日金曜日

Page 65: Andy lib解説

Re:Kayo-System Co.,Ltd.

マニフェスト設定 <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <intent-filter> <action android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" /> </intent-filter> <meta-data android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" android:resource="@xml/accessory_filter" /> </activity> <uses-library android:name="com.android.future.usb.accessory"/> </application>

AndroidManifest.xml

2012年1月27日金曜日

Page 66: Andy lib解説

Re:Kayo-System Co.,Ltd.

ビルドして実行

On/Offすると外部機器のダイオードがチカチカする

外部機器とAndroidをUSBで接続するとアプリが起動する。

2012年1月27日金曜日

Page 67: Andy lib解説

Re:Kayo-System Co.,Ltd.

実践してみましょう

•手順に従って試してみよう•プログラムを変更して他も制御してみよう

お疲れさまでしたhttp://bit.ly/xIuPPx資料のダウンロード

2012年1月27日金曜日