@androidsola : 「JC(ROM)に俺のKitKatをあげてみた」(資料)
JCROMをKitKatにあげてみたので、その話をします。
- 自己紹介
- JCROMのAndroid 4.4化して気がついた事
JCROMにとって都合が悪かった点
- Launcher2からLauncher3へ
通常は、Nexus5のみ。Android.mkで選択なので共存はできない
- ドロワーが背景を透過するようになった。JCROMではドロワーの背景設定をやめて100%透過に書き換えた
- ホームスクリーンの枚数がかわった。3は枚数可変
- ホームに何も置かないとスクリーンが削除される。何も置きたくない人には残念な結果に
- ステータスバーとナビゲーションバーの透過
- ステータスバー・ナビゲーションバーの透過 - ホームスクリーンが広く見える。JCROMとは競合する・・・。
- JCROMの全画面設定機能と同じようにバーを透過して壁紙を見せられる機能がofficialにも来てしまった。
バーの透過はSystemUIのお仕事- この辺のバー透過には有効無効フラグがある。デフォルトonだけど、Nexus10ではパフォーマンスの問題で無効になっている。
- keyguardのSystemUI化
- JCROMは、テーマ設定中のシステムUIを再起動するが、このとき、SystemUI化された結果、ロックを解除しないとテーマ反映を続ける事ができなくなった
- 今後は、SystemUIが再起動したらロック画面になるようになる
- 以前は処理が重いと、Keyguard起動前は画面が触れてしまったのではないか
- JCROMには都合が悪いので、ロックしなくする方法を調査。設定中は、persist.sys.therm.lockをtrueにしておけばよい
- SDカードの読み込みに権限が必要になった。
GNだと落ちないのにNexus5だと落ちる。おかしいなと思って調べた。
android.permission.READ_EXTERNAL_STORAGEが必要だった。GNの挙動の方がおかしいという事に。
GNはAndroid 4.4でAOSP落ちしたので、Android 4.3をベースに自分で作っている。これが原因だと思う
init.mako.rc に、関係ありそうな変更を発見sdcardにパーミッションと思われる引数を渡すようになっている。
どうやら、sdcardからemulatedを呼び出す時に権限が正しくなってなかったようだ 4.3をベースに4.4動かすのは簡単だったが、自前で作る時にはこういう穴がある事があるので気をつけた方が良いでしょう- 4.4からinstall先のディレクトリが一つ増えていて、この辺りを追うと面白そうですよっと
- Android4.4のメモリは512MBでイケルのか
- Android のサイトにLow RAMという項目がある
- 読んでみると少ないメモリのデバイスもサポートするような記述になっている
- でも、どうも自分で最適化しろ的な情報のように見える
- 4.4では以下の改善をしたと書いてある。
- メモリの改善
- メモリが少ないデバイスを判定するためのAPI追加
- 開発者用に機能を追加
- Nexus S on Android 4.4(AOSP)
Nexus Sは 4.2以降はAOSPから削除されているので、Android 4.1のデバイスツリーをもとにAndroid 4.4向けにしている
とても使えるレベルの動きはしていないので、そのうちブログの紹介でとどめるかも。で、動きを見た限り、MemFreeは改善したけど、動きは超もっさりのまま・・・やはり、CPUが貧弱だとまともに使えない印象
- Low RAM適用前 - MemFreeの値は少なく、動作は超もっさり
- Build-time configurationで書いてある、メモリを減らすための設定項目と仕組みを導入
- Enable Low Ram Devlce flagをmakefileで有効にする - フラグさえたてれば2GBのRAMを積んでいてもLow RAMを返す・・・。
- Disable JIT - 少ないメモリのデバイスでは、無効化がおすすめらし
- ライブ壁紙を使うな - プリインストールもしない方が良い?
- kernel configurationの指示のいくつかを導入
- KSM - これは、Nexus Sは最初から対処されていた・・・
- Swap to zRAM
- 冬コミの話
サークル名 JCROMで、配布物は、詳細JCROM。意外とまじめな内容になりそうです。
P.S. 質問、雑談
- Nexus Sが遅いのは、どうもSurfaceFlingerさんらしい。CPU使用率が高い
- メモリを削減するのは、たいてい速度が遅くなるので、速度を考えると駄目かも
- Q:Nexus SでART動かしてみた? A:動くとはおもうけどやってないです
- 某OESFみたいな機能を削るのは無かったか?サービスをあげるあげないのフラグはできてるけど、起動しないと・・・
- Nexus5みたいな新しい端末で、カーネルパラメータでmemory減らして Low Memory試してみたらどうだろう。その方が見えやすいかも。
@kmt_t : 「速報ART」(資料)
- 自己紹介
- 鳥取から来ました。主な目的はジンギスカン
- ちょっと前まで組み込みやってましたが、地元に戻りたくてドロップアウトしました
- いま、Dalvik仮想マシンの本書いてます
- 多分、来年出ます・・・が、殆ど変わる事がないDalvikさんだからとのんびり書いてたらARTが出てきてしまった・・・orz
- 本日の発表内容
出たばかりでまだ本人もわかってない事いっぱいなので、色々突っ込みお願いします。
実は、@tetsu_kobaさんのパクリが多いです。
- Nexus5を買った人挙手〜・・・意外と少なかった
- ARTとは何か
- 新しいDalvik仮想マシンの実装
- 旧来の仮想マシンは、ソフトウェア環境が変わって来ている、ハードウェア設計に追従できていない
- 開発は2年ほど前からGoogleで行われていたらしい
- ベンチマーク
CPUの能力だけだと2倍くらいとの話がでている。でも、話半分くらいで聞いといたほうがよいのでは?- ソースコード
- ソースコード量は22万行
- コードはほぼフルリライト
- JIT削除、インタプリタの簡略化
- 従来のDalvikは20万行程度
- 記述言語は、C++(旧来はC)
- コードは割と読みやすい・・・ただし、きれいなコードではない
- アウトライン
- 変更のサマリー
- インタプリタ
- アセンブラによるスレッドインタプリタからC言語によるインタプリタへ
- 実装としては退行
- Zygote - ほぼそのまま
- ABI - 完全に変更それにともなってリフレクションが変更
- クラスローダ周りは完全に変更。クラスローダとリンカに分割。
- 以前はハッシュを使った線形検索だったものが、一部はSTLの連想配列に置き換え
- ベリファイラ - コードは書きかわっているがほぼ同じ
- 例外処理 - インタプリタで実装。スタックのさかのぼり方はおそらく変更されている。
- JITコンパイラ- 廃止
- AOTコンパイラ - 新設
- ガーベージコレクション - 並列 Mark And Sweep。変則世代別ガベージコレクション
- Zygoteで確保されたもの、それほど頻繁ではないもの、頻繁におこなわれるものの3世代くらいに分かれている模様。
- JNI - 大きな変更なし
- デバッガ- プロトコルは従来通り JDWP準拠
- 変更の総論
- AOTコンパイラ
- クラスローダ
- ガーベージコレクション
- ABI
- 過去のVMについては・・・書籍買ってください。
- インタプリタについて
- LLVMが神レベルで早いのでそのうち高速になるでしょう
- AOTコンパイラ
- アプリケーションインストール時にネイティブコードにコンパイル
- OATファイルはELF形式
- ELFにDEXへのリンク情報が入っている
- ELFはただの器なので形式的には自由にデータ格納可能
- ネイティブ解決はdlopen/dlsymを使っているけど、かなりしんどい事をやっている
- OATファイルのリファレンスは多分現状ないので、作成予定です。
- LLVMの前にELFの仕様を理解すべき
- ガーベージコレクション
- 意見など
- 雑談タイム
- 書籍はどこから・・・達人出版界くらいしかないかな
@l_b__ : 「KitKatの下回りのを少し眺めてみた」(資料)
- 自己紹介
- Effective Android(35章)を書いてます。売れると美味しいもの食べさせてもらえるのでよろしくお願いします。
- KitKatでどうかわったか
- art ディレクトリが追加
- Dalvikを置き換えるVM
- Androidの実行速度を10倍以上高速化できるアプリを買収
- 詳細はkmt_tさんのお話で・・・
- buildディレクトリ
- core/combo/arch/mips 追加
- core/tasks以下にファイル追加
- abi,bionic,bootable, cts
- JB 4.3と大きな変化は無い
- 4.1 -> 4.3時にbionicはFreeBSD/NetBSD由来のコードが追加されている
- dalvik
- 大きな変化はなさそう
- developers, development, docs
- sampleのAppLimitsが消えた
- developers/samplesに色々増えてる。グレードル使ったサンプル
- device
- lge/hammerhead, hammherhead-kernel追加
- ti/pandaが消えた
- samusung以下のmanta以外が消えた
- external
- 追加
- chromium-libpac
- chromium_org
- droiddriver(UIテスト)
- iputils(Network tool)
- lzma
- mesa3d(OpenGL実装)
- pixmap
- scrypt(パスワード生成)
- sfntly(SFNTフォントライブラリ)
- sil-fonts
- tinycompress(ALSA-APIサポート)
- 削除
- linusb_aah
- ping
- ping6
- quake
- webkit(chromiumへ移動)
- frameworks
- uiautomator
- av/cameraにcamera2が
- av/cmdsにscreenrecord追加
- native/libs
- base/cmds
- system_server(lib)が消えた
- base/packages
- 色々追加されてる
- native/services
- battery service, connectivity managerが追加
- webviewが追加
- hardware/ndk
- libcore, libnativehelper
- dexにdex操作のJavaAPI追加
- dalvikにあったJavaAPIのうちVMに依存するクラスをlibartとlibdvmに移動
- libnativehelper
- packages
- apps
- Camera2
- InCallUI
- Launcher3
- providers
- DrmProvider削除
- servicesが追加
- TelephonyとしてTeleServiceが追加
- providers
- DrmProvider
- pdk
- camera関連追加
- utilに製品向けmkファイル比較スクリプト追加
- prevuild
- clangは3.1, 3.2のまま
- gccも4.6, 4.7のまま
- pythonを追加
- runtime追加
- libcoreのdexホスト向けライブラリ
- sdk
- 大きな変更はなさげ
- system
- bluetooth削除。
- system/coreに追加
- fastbootd
- healthd
- libmetmtrack
- reboot(再起動コマンド追加)
- extras
- ksmutilsやmemtrackといったツール追加
- tools
- gradle追加