andy lib解説
Post on 15-Jan-2015
1.487 Views
Preview:
DESCRIPTION
TRANSCRIPT
Re:Kayo-System Co.,Ltd.
Twitter @yokmamaNow Loading. Please Wait ...
夜子まま塾ADKECCコンピュータ専門学校
2012年1月27日金曜日
Re:Kayo-System Co.,Ltd.
自己紹介氏名 :寺園聖文(てらぞの まさふみ)
肩書 :株式会社Re:Kayo-System 代表取締役社長
活動拠点 :神戸近郊~日本→海外行きたい
著書 :「10日でおぼえるAndroidアプリ開発入門教室」著(翔泳社)
「HTML5によるAndroidアプリ開発入門」監修(日経BP)
アプリ :「Just Player」「Skip Memo」「ふりがなオートマチック」等
好きなもの:アニメ、決して萌えじゃない、見てるけど、あくまで研究の一環
嫌いなもの:とくになし
最近のテーマ:電子工作、運動すること、英語
2012年1月27日金曜日
Re:Kayo-System Co.,Ltd.
目次
•ウォーミングアップ• AndyLib開発•実践(AndyLibLedProj)
2012年1月27日金曜日
Re:Kayo-System Co.,Ltd.
ウォーミングアップ
2012年1月27日金曜日
Re:Kayo-System Co.,Ltd.
Androidアプリ開発
• Javaプログラミング• XMLレイアウティング• Androidフレームワーク
2012年1月27日金曜日
Re:Kayo-System Co.,Ltd.
Javaプログラミング
2012年1月27日金曜日
Re:Kayo-System Co.,Ltd.
Javaファイル
Javaファイル
パッケージ
src
Javaファイルはパッケージフォルダに下に機能別に配置します。
パッケージが違うなら、同じファイル名(クラス名)にしても問題ありません。
2012年1月27日金曜日
Re:Kayo-System Co.,Ltd.
プログラムの構成class Hoge {
String msg = “Hello”;
void Func(){System.out.println(msg);}
}
クラスの定義の開始
メソッドの定義の開始
クラスの定義ここまで
メソッドの定義ここまで
メンバの定義
2012年1月27日金曜日
Re:Kayo-System Co.,Ltd.
クラスとメソッドクラスはメソッドとメンバの集合です。
C言語の構造体に似ています。Javaのクラスはファイル名と同じ名前のクラスを一番外側({}で括られた)に1
つおかないといけません。しかし、クラスの中にクラスを宣言することができるので。1ファイルにクラスはひとつだけというわけでは有りません。
2012年1月27日金曜日
Re:Kayo-System Co.,Ltd.
具体例class Hoge {
class Fuga {void print(){System.out.println(“hello”);}
}
} クラスの中にクラスを宣言できる
2012年1月27日金曜日
Re:Kayo-System Co.,Ltd.
メソッドの使用
自分のメソッドを使用する
class Hoge {String msg = “Hello”;void Func(){System.out.println(msg);}void Func2(){Func();}}
2012年1月27日金曜日
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日金曜日
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日金曜日
Re:Kayo-System Co.,Ltd.
実行ファイルjavaファイル
javac
classファイル
dx変換 dexファイル
apkファイル
Android端末にAPKファイルを転送し実行する
2012年1月27日金曜日
Re:Kayo-System Co.,Ltd.
XMLレイアウティング
2012年1月27日金曜日
Re:Kayo-System Co.,Ltd.
レイアウトファイル
レイアウトファイル(XML)
layout
res
レイアウトファイルは リソースフォルダに下に種別毎に配置します。
リソースフォルダにはレイアウトの他に画像や、音声といったファイルもあります。
2012年1月27日金曜日
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日金曜日
Re:Kayo-System Co.,Ltd.
レイアウトエディタ
このタブでグラフィカルな編集画面の切替ができます。
2012年1月27日金曜日
Re:Kayo-System Co.,Ltd.
ボタンの追加
画面上のボタンをドラッグ&ドロップで画面に追加できる。
2012年1月27日金曜日
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日金曜日
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日金曜日
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日金曜日
Re:Kayo-System Co.,Ltd.
Androidフレームワーク
2012年1月27日金曜日
Re:Kayo-System Co.,Ltd.
クラスを使いこなすAndroidはJava1.6をベースにしたライブラリを使用することができます。(全てではない)また、Android特有のクラスとしてWebKitやSQLiteといった機能へのアクセスもできます。そのためこれらの機能にどのようなものがあるのか、また使うにはどすればいいのかを知ることがアプリ開発の近道になっています。
2012年1月27日金曜日
Re:Kayo-System Co.,Ltd.
2012年1月27日金曜日
Re:Kayo-System Co.,Ltd.
イベント処理
Button
ボタンが押されたときの処理
フレームワーク
あらかじめButtonに設定しておく
クリックされた
呼び出し
2012年1月27日金曜日
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日金曜日
Re:Kayo-System Co.,Ltd.
AndyLib開発
2012年1月27日金曜日
Re:Kayo-System Co.,Ltd.
AndyLIb解説
• AndyLib概要• AndyLib開発手順
2012年1月27日金曜日
Re:Kayo-System Co.,Ltd.
AndyLibはAndroidのライブラリ
AndyLibプロジェクト
Javaプログラム
リソースファイル
マニフェストファイル
2012年1月27日金曜日
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日金曜日
Re:Kayo-System Co.,Ltd.
AndyLibは外部機器との接続を楽にするライブラリ
フレームワークではなくライブラリ。雑多な処理を楽にするクラスやメソッド
の集合です。
2012年1月27日金曜日
Re:Kayo-System Co.,Ltd.
AndyLibはオープンソース
商用、非商用に関わらず使用可能改変して使用可
ライセンスの種類はApache2
2012年1月27日金曜日
Re:Kayo-System Co.,Ltd.
AndyLibの構成
AndyLib
MemoryMapプロトコル
ADK Bluetooth
Web/Android外部機器
TCP/IP AndroidFramwork
2012年1月27日金曜日
Re:Kayo-System Co.,Ltd.
提供クラス(コンポーネントクラス)jp.co.kayo.ykmjuku.andylib.componentADKComponent ・・・ ADKBluetoothComponent ・・・ BluetoohTTSComponent ・・・ TextToSpeechMotionController ・・・ 6軸操作
2012年1月27日金曜日
Re:Kayo-System Co.,Ltd.
提供クラス(プロトコルクラス)
jp.co.kayo.ykmjuku.andylib.cmd
AndyCommand ・・・ メモリマッププロトコル対応コマンド
2012年1月27日金曜日
Re:Kayo-System Co.,Ltd.
提供クラス(その他)
ComponentHelper ・・・ コンポネント登録・取得クラス
jp.co.kayo.ykmjuku.andylib.tools
2012年1月27日金曜日
Re:Kayo-System Co.,Ltd.
MemoryMapプロトコル
•プロトコル概要•データの送信例•複数のデバイスを制御する•プロトコルの表の見方
2012年1月27日金曜日
Re:Kayo-System Co.,Ltd.
プロトコルの重要性Androidと外部機器の接続に関してはAndroidフレームワークを利用することで様々な方法で接続することが可能にな
りました。そして、AndyLibのような実装を楽にするライブラリを使
うことですぐに利用することも可能になります。しかし、問題はその先で、外部機器とAndroid端末をどのように通信させるかについては決まったものはなく、実装
に委ねられているのが現実です。
2012年1月27日金曜日
Re:Kayo-System Co.,Ltd.
一般的なプロトコル
ヘッダー データ
ヘッダーにはデータのサイズや種類等が含まれる
0-2:データ長2-3:データ形式
2012年1月27日金曜日
Re:Kayo-System Co.,Ltd.
考えることは多い
•データのチェックをしたい•処理を早くしたい•大きいデータを扱いたい•データの欠落を防ぎたい
etc
2012年1月27日金曜日
Re:Kayo-System Co.,Ltd.
MemoryMapプロトコル
Header10xFA
Header10xAF
Cmd1byte
Address1byte
datanbyte
Sum1byte
11111010 10101111ノイズ対策
コマンド:モーターなら順回転、反回転のような
書き込むアドレス 書き込むデータ
整合性チェックのためのXOFフラグ
Length1byte
データ長
2012年1月27日金曜日
Re:Kayo-System Co.,Ltd.
具体例Header10xFA
Header10xAF
Cmd0x03
Address0x1B
data10xBF
Sum0x1A
Length2
data20xBF
Sum:パケットのチェックサムを8bitで表します。チェックサムはパケットの列のCmdから、Sumの1つ前のデータまでを1byteに区切り、XORした値です。
2012年1月27日金曜日
Re:Kayo-System Co.,Ltd.
MemoryMap表
2012年1月27日金曜日
Re:Kayo-System Co.,Ltd.
MemoryMapの特徴プログラムとハードの間に仮想的なメモリマップがあると考えて実装することができる。
C言語のアドレス空間に近い。
書き込むアドレスは固定なので、データへのアクセスが直感的にわかる。
2012年1月27日金曜日
Re:Kayo-System Co.,Ltd.
顕著な例通常二つのモーターを制御したい場合、
方法としてモーター1とモーター2の制御用のコマンドを作成し、プログラムから送信する。
Android Deviceモータ1 Pw3
モータ2 Pw1
2012年1月27日金曜日
Re:Kayo-System Co.,Ltd.
新規にコマンドを作成しかし先ほどの場合、二回送信しないといけないのでタイミングにバラつきがでてくる上、通信量
も多くなる。そのため、別途二個を制御するためのコマンドを
作成する必要がでてくる。
Android Deviceモータ12 Pw3、1
2012年1月27日金曜日
Re:Kayo-System Co.,Ltd.
コマンド主導の課題アプリケーションの実装に合わせてプロトコ
ルを作っていく必要がある。そのため、外部機器側とソフト側できっちりとプロトコルを合わせる作業が必要になるため、双方でのやりとりが重要になる。
Androidアプリ開発と外部機器の開発では異なる知識が必要なので、新しくはじめる人に
とって敷居が高いものになる。
2012年1月27日金曜日
Re:Kayo-System Co.,Ltd.
MemoryMapではHeader10xFA
Header10xAF
Cmd0x03
Address0x1B
data10xBF
Sum0x1A
Length2
data20xBF
モーター1とモータ2は隣同士のアドレスに配置されている。そのため上記のコマンドのようにアドレスをまたがるようにデータを書き込むと1つのコマンドで二つの値を変更することが
できる。2012年1月27日金曜日
Re:Kayo-System Co.,Ltd.
例えば
1 2
3
このような複数の制御が必要なデバイスでも1つのコマンドで操作できようになる。
MemoryMapに配置するアドレスの並びかえは職人技的とも
いえる。
2012年1月27日金曜日
Re:Kayo-System Co.,Ltd.
AndyLibLedProj
2012年1月27日金曜日
Re:Kayo-System Co.,Ltd.
新規プロジェクト作成
File->New
AndyLibLedProj
2012年1月27日金曜日
Re:Kayo-System Co.,Ltd.
TargetSDKの設定
NewAndroidProject->Next
Android2.3.3のGoogleAPIs
2012年1月27日金曜日
Re:Kayo-System Co.,Ltd.
Project 設定
NewAndroidProject->Next
ApplicationNames: AndyLibLedProjPackageName: jp.ykmjuku.android.andylibledCreateActivity: MainActivityMInimumSDK: 10
2012年1月27日金曜日
Re:Kayo-System Co.,Ltd.
初期画面
雛形のプロジェクトが出来ただけです。これにAndyLibを追加してプログラムを実装していきます。
2012年1月27日金曜日
Re:Kayo-System Co.,Ltd.
AndyLibの追加File->Import
2012年1月27日金曜日
Re:Kayo-System Co.,Ltd.
AndyLibの追加Import → Next
AndyLibのプロジェクト
2012年1月27日金曜日
Re:Kayo-System Co.,Ltd.
AndyLibの追加
Project→Properties Androidの項目から、下部のAddボタンで先ほど追加したAndyLibのプロジェク
トを選択
2012年1月27日金曜日
Re:Kayo-System Co.,Ltd.
CompatibilityAPIの追加
右クリックメニュー → Android Tools→Add Compatibility Library...
2012年1月27日金曜日
Re:Kayo-System Co.,Ltd.
画面の作成
ドラッグ&ドロップでLEDのOn/Offボタンを追加
2012年1月27日金曜日
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日金曜日
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日金曜日
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日金曜日
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日金曜日
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日金曜日
Re:Kayo-System Co.,Ltd.
ビルドして実行
On/Offすると外部機器のダイオードがチカチカする
外部機器とAndroidをUSBで接続するとアプリが起動する。
2012年1月27日金曜日
Re:Kayo-System Co.,Ltd.
実践してみましょう
•手順に従って試してみよう•プログラムを変更して他も制御してみよう
お疲れさまでしたhttp://bit.ly/xIuPPx資料のダウンロード
2012年1月27日金曜日
top related