テーマ
| 参加者(ATND順・敬称略)
|
発表内容 (25日くらいまでには取りまとめます。ごめんなさい。)
参加者全員自己紹介
そろそろ参加者が増えてきたからということで。
詳細は省略(遅れて入ってPCの準備していてメモできませんでした)。
- 自己紹介
- Monkey Runnerとは
- PC上で動作するテストロボット
- Jython(Java+Python)でテストを記述
- テストロボット
打鍵、画像比較などを行う事が可能- 対象テスト
- 再帰テスト
事前に設定したスクリーンショットと機能テスト実行時に取得したスクリーンショットの比較によって開発バグを発見- 機能テスト
タッチ・キーイベント・ドラッグ、文字列入力などの操作によるアプリが正しく動作するかを検証
スクリーンショットの取得が可能- External monkeytestというストレステスト用のものもある
- その他できること
- ユーザー操作の記録・再生
- ユーザーとの対話
- APKのインストール
- Instrumentの実行
- 再起動
- シェルコマンドの実行
- Monkey Runnerの仕組み
- Pythonで実装できる理由
- Jythonだから
- StrutsなのでGUIもかける
- デバイスとの通信部分
- adbを経由
- sdk/monkeyrunner/.../adbBackend.java
要するによく使う物をラッパーしたもの- プロトコル
system/core/adb/protocol.txt参照- まとめ
- スクリプト言語で書けるので実行が容易
- 機能テスト・再帰テストが容易にできる
- PF部としてはgetSystemPropertyが使えるのはうれしいのかもしれない
- 質問
- rootは必要ないのか
特別な事はした覚えがないのでたぶん大丈夫です- セキュリティーの問題は
おそらくDebugを有効にしてなければ大丈夫- Eclipseから使えるのか
たぶんできます。- エミュレータでも動くのか?
Linux版 Windowsでも動くんじゃね?Jythonだし- センサーなどの対応はあるのか
まだ対応していなかったはず
@kishima 「Google TV Hacksの紹介」 (資料)
- 自己紹介
- コンデンサの隣からひとこと
- Rubyや組み込みに興味ある人
- Google TV?
Android for TVプラットフォームまたはそれを搭載した製品のこと
AndroidをブランチしたOSを積んでる
現状売っているもの
- Sony NSX-40GTI
- Sony NSZ-GTI
- Logitech Revue
- Hackへ至る道
www.gtvhacker.com
$1000の賞金がかかっていたが1月に成功したチームが出た
Logitecの場合
→不思議、root化しちゃってる・・・・というものでしたが、すでにF/Wが対策されてバージョンアップ済み
- ふたをあける
- シリアル通信用の線を出す
- メンテナンスモードで起動
- ソースの内容
code.google.com/p/googletv-mirrored-source
- ffmpegが入ってます
- Qt Embedded Linux 4.5も!→ 実際のバイナリはQt 4.7に見える
- 実際にファイルシステムの中を追いかけてみる
boot.imgを展開しようとしたらうまく行かない。あきらめて/systemの内容を紹介
systemの中にappがある(中にはapkファイルがある)
- netflix
ネット動画が見れるサービス(VOD)
一般的なディレクトリ構成とは異なり別出しになっている
libの中にQtがある。netflixのためだけにQtを突っ込んでるんじゃないかって状態- system/framework下には基本的にodexに最適化されたものしか入っていない。
smaliを使ってdeodexにしようとしたけどうまくいかない→テキストエディタで開く
シンボルの中身を調べてみる : TVのチャンネルもURIで表現されている- system/lib
- libgtv_xxxx.so
- libffmepg_xxxx.so
- system/app
TVPlayerとNetflixを見てみます
やはりodex化されているので、テキストエディタで調査
@androidzaurus 「Inside StrictMode」(資料)
- StrictModeとは
アプリケーションのUI Threadの速度改善のため、速度劣化につながる箇所を通知させるツール- なぜ興味をもったのか
gatekeeperに興味があった
UI threadってどうなっているのか興味があった- StrictModeのデモ
packages/experimental/StrictModeTest
Disk Read/Write
Network
dialog/log/dropbox に出力することが出来る
実際に、Strict Modeテストのデモ。該当コードに到達すると、エラーダイアログや、ログ出力、dataへの出力等、指定した方法で通知される。
ex. Dropbox
adb shell dumpsys dropbox data_app_strictmode --print
adb shell ls /data/system/dropbox
- コードのトレースと仕組み
- StrictMode.enableDefaults();
対象となるコードで、enableDefaults()を実行すると、デフォルトのポリシーが有効となる。- BlockGuard
libcore/dalvik/src/main/java/dalvik/system/BlockGuard.java
BlockGuardクラスがPolicyのインターフェースを持っている。
public interface Policy {
onWriteToDisk();
:
}
- StrictMode
frameworks/base/core/java/android/os/StrictMode.java
StrictModeクラスは、このBlackGuardのPlicyの実装AndroidBlockGuardPolicyを有している。
private static class AndroidBlockGuardPolicy implements BlockGuard.Policy- HellowActivityの場合
- HelloActivityの中で、StrictMode.enableDefaults();
- ThreadLocal threadPolicyにStrictModeが設定される
- 対象となるAPIが呼び出される
- BlockGuard.getThreadPolicy().onXXXXX()
- StrictMode.AndroidBlockGuardPolicy.onXXXXX()が呼び出される
- まとめ
- アプリケーションのレスポンス向上のためにStrictModeを使う
- BlockGuardがゲートキーパーとなっている。
- ThreadLocal変数としてStrictModeのpolicyが実体化されている
- StrictModeがでない時には、LAXの空メソッドが呼ばれる
- まだ不明な箇所
以下の不明点には今後調査していくつもり
- BlockGuard周りの詳細。どんなメソッドにgatekeeperが用意されているのか?
- 例外をどのようにハンドリングしているのか
- Nativeアプリからはどうやるのか
@magoroku15 「20分で理解する仮想記憶」 (資料)
- 自己紹介
OS屋出身の組み込み屋さん
名古屋のつ部で活動中
UST検定初段(記者注:あんなにきれいに色々混ぜたりエフェクトできるのに初段なんだ・・・)
ぐだ生(土曜 : 22:00)、UNIX V7講座(日曜:22:00) : Ustream
- メモリの制約への対応
オーバーレイ
昔はメモリが高価だったため、大容量を自在に使うということはできなかった。
プログラムを分割し、パートを分けながら自分で自分を塗り替えながら動いていた
- プログラムの局所性
では、なぜオーバーレイが有効なのか
CPUの実行サイクル : fetch, decode, exec
C言語のプログラム : 命令、データ、スタック
プログラムはこの3点のみを参照。プログラム全体をメモリに常駐させる必要性がない
この原理からできたのが仮想メモリ- 仮想アドレス・実アドレス
アドレス変換の仕組み
- 今必要なアドレス空間の一部を実メモリに割り当てる
- アドレスの変換に失敗すると、割り込みが発生してOSに処理が遷移
- 入れ替えの単位がページ。aligned (4Kが多い)
- 仮想アドレスのページ番号をアドレス変換表を元に実アドレスのページ番号に置き換え
- アドレスの変換表はOSが用意してMMUに通知を送る
- さらに、実際はもう少し複雑で、変換表は二段構えになっている。1ページ 4Kbyteで、それを1MBのセグメントで管理している
- ただし、2段構えで遅くなった分に関しては、メモリ領域はある処理において同じ領域が使われやすいことから、変換キャッシュを用意し、セグメント番号、ページ番号をあわせた仮ページ番号と、実ページ番号の組み合わせをキャッシュする仕組みも持ち合わせている
- セグメント・ページ・オフセットで2段階変換とキャッシュの組み合わせがオーソドックスなやり方
- ちょっと昔話
System 360ってご存じですか?
1Byte=8bit
1word=32bit
2の補数による演算
など、現代のコンピュータの原点
S360,PDP11を理解すれば後はその子孫にあたる
先進的に見える仮想記憶も、実はSystem360の頃にも採用されていたレガシーな技術- 仮想記憶と*nix
物理メモリ利用以上の仮想メモリ空間他にも、うれしい副作用
- アプリのロジックに集中
- 参照の局所性がある場合には有効
- forkの高速化
forkはプロセスの空間を複製
メモリコピーが発生するため、システム規模が 大きくなるとコスト増
そこで、Copy on Write技術ができてきた。
- 仮想記憶の管理テーブルのみを複写して書き込み禁止に
- 書き込みがあると割り込みが発生してコピーが行われる
- 書き込みで例外発生、ページをコピー → 書き込みが入らなければ発生しない
- ファイルシステムの高速化
ファイルシステム用キャッシュメモリ量を自動調整ができるようになった(昔は固定パラメータだった)- execの高速化
- パスで指定されたファイルの内容でアプリケーションのメモリを書き換えが発生していた
- execは、今は仮想記憶のテーブル作るだけ
- カーネル内mmap
- 変換に失敗したらパスで指定されたファイルからページを読み込む
- 変更はCOWで
- まとめ
低レイヤの基本は、System360,PDP11,UNIX v7に有り
@sekitoba 「はじめてみよう、プラットフォーム!kernel 2.6のマルチコア対応」(資料)
- 自己紹介
- SnapMapの作者
- Android酒部 部長
- アプリケーション開発者でプラットフォームには疎い
- 発表に至った道
妻の中でAndroid=呑み会の隠語的な扱いに
- Android温泉でのUst放送で全く開発をせずに酒をのんではしゃぐ姿を妻に補足される
- 妻「Androidの集まりと言うときは帰りが遅い上に泥酔いじゃん…」
- 妻「アプリ開発するって言って何一つマーケットに登録してないじゃん…」
- 妻「Androidって行っておきながら遊びにいってるだけじゃ…」
→ やばい、なんとかしなくてはと気ばかりが焦る
そんなわけで、地図ソフトとして致命的な不具合を仕込んでしまいながらも、SnapMapを開発
さらに、勉強会でもがんばっているところを見せたい。
PF部の底上げにも貢献したい
( Web担当注:という意向を汲んだ怪しげな何かが、懇親会で僕と契約して発表してよと言ったとかなんとか)- 誰に向けての発表か
- プログラム(CとかC++とかJavaとか)をかじったことがある
- カーネルがなにかぼんやり知っている。けど、詳しくはしらない
- カーネルのソースを読めるようになりたい
- 何からとりかかろうか
悩んでいたら、まごろくさんのUstで「仕組みを知らないとソースは読めないのでざっくり背景を把握しましょう」とのことで気がついた。ざっくりと…とっかかりを探す。
今年度からTegra2搭載モデルが流行りそう。そういえばLinuxのKernelってどうやってマルチコアのプロセッサーに対応しているのかということで、調査開始
- 最近のLinux - Kernel 2.6 -
2.6以前は、O(n)スケジューラー(プロセスが一列に並んでいるイメージ)
プロセスの数が増えるとスケジューリングに掛かる処理は線形に増加。
Kernel2.6でマルチプロセッサー向けに改良が加えられている
スケジューラーとラン・キューという仕組みが重要
CPU毎に優先度別に分けられた複数のリスト「ラン・キュー」がある。
スケジューラーは、優先度別にプロセスを実行していく- マルチタスク
複数のプロセスを並列に実行する仕組み
- プロセスディスパッチャー : 次のプロセスに実行権を与える
- プロセススケジューラー : プロセスの実行切り替えを制御する
- プロセスとは
プログラムの実行に必要な命令やデータなどの固まり(コンテキスト)(task_struct構造体によって管理されている)
プロセスの切り替えは
- メモリ空間の切替
switch_mm()関数でやっている。この話は次回に。- レジスタの状態の切り替え
switch_to()関数でやっている。- プロセススケジューラ
従来のスケジューラー:毎回次に実行するプロセスを線形検索
O(1)スケジューラー:優先度ごとにまとめられたキューの配列(active/expire)をもっている。クォンタム(割り当てられたCPU時間)を使い果たすとactiveとexpireが入れ替わる
schedule() : /kernel/sched.cにある
@hermit4 「Initのそれからそれから」(資料)
超駆け足でごめんなさい・・・・。本人のまとめは苦しいので、資料をお読み下さい。
- Initの復習 - initの役割
- Zygoteの役割
- まとめ
番外:@checkelaさんによるサイン会
「基礎から学ぶ組込みAndroid」にサインをもらった方が数名。体調が悪い中、ありがとうございました。
次回は、3月20日 14:00から。場所は変わって横浜駅周辺のかながわ県民センターになります。発表者は、@himamuraさんがARMについてお話ししてくれる予定です。その他は募集中@sekitoba 「はじめてみようプラットフォーム」第2回@myb1126「Androidのデバイス開発事始め(仮)」@magoroku15 with @pakuqi「名古屋からサテライト、20分でわかる・・・何か」@noritsuna with @ pakuqi 「台湾からサテライト、Linaroの宣伝」
冬将軍を連れあの人がやってきた。名古屋からのすごい人達まで惹き寄せて!あの迷子の帝王が余裕の到着、巻き起こる天変地異に恐怖の嵐。業界の猛者達が闊歩する横浜に飛び交う激辛の波。流れる汗。恐怖に満ちたその先に希望のHoneyは見えるのか!
「四川人は辛いのを恐れず、湖南人は辛くないことを恐れる」「Androiderは不安定を恐れず、PF部は不安定でないことを恐れる」
というわけで、何が起きたのかよくわからないけれど、きんねこさんとか、安藤恐竜さんとか、まごろくさんとか、急にすごい人達に参加していただいたPF部メンバーは、載せる特攻隊長のHoneycombなブツをおかずに、アヒ○の舌とか、カ○ルの肉とか、辛い品々をつついてきました。
P.S.
@kinnekoさんからは「雪は私が連れてきたわけでは無い」とのお話がありました。
@noritsunaさんは、Linaroのコミッター募集中のようです。
今回も、サイトは@iwata_nさんのブログを元に転記予定です。ちょっと忙しくて来週まで転記作業はPENDします(2/18)