android カスタムromの作り方
DESCRIPTION
カスタムROMハッカソンでの成果をまとめました。 with @chun_ryo @furusin_oriver @c1e @rey_k @hamatzさん です!TRANSCRIPT
![Page 1: Android カスタムROMの作り方](https://reader034.vdocuments.site/reader034/viewer/2022042422/5480b6985806b5d3108b458a/html5/thumbnails/1.jpg)
techbooster.org
日高正博
1
![Page 2: Android カスタムROMの作り方](https://reader034.vdocuments.site/reader034/viewer/2022042422/5480b6985806b5d3108b458a/html5/thumbnails/2.jpg)
組込エンジニアです? Androidとか
関西が生息圏です
techbooster.org みてね
2
Twitter Account @mhidaka
![Page 3: Android カスタムROMの作り方](https://reader034.vdocuments.site/reader034/viewer/2022042422/5480b6985806b5d3108b458a/html5/thumbnails/3.jpg)
Android ADK 組込み プログラミング完全ガイド
執筆しました! 発売中です
電子工作、クラウド連携がAndroidで出来るようになりました
3
![Page 4: Android カスタムROMの作り方](https://reader034.vdocuments.site/reader034/viewer/2022042422/5480b6985806b5d3108b458a/html5/thumbnails/4.jpg)
Androidをカスタマイズ?
VPSでビルドしてみよう
ほしいAndroidを作ろう
4
![Page 5: Android カスタムROMの作り方](https://reader034.vdocuments.site/reader034/viewer/2022042422/5480b6985806b5d3108b458a/html5/thumbnails/5.jpg)
カスタムROMの紹介
5
![Page 6: Android カスタムROMの作り方](https://reader034.vdocuments.site/reader034/viewer/2022042422/5480b6985806b5d3108b458a/html5/thumbnails/6.jpg)
AOSPが提供するソースコードがベース ◦ 通知バーへのWiFiトグル追加などオリジナル機能を提供
◦ コミュニティが主体となって開発
6
![Page 7: Android カスタムROMの作り方](https://reader034.vdocuments.site/reader034/viewer/2022042422/5480b6985806b5d3108b458a/html5/thumbnails/7.jpg)
Android Open Source Project(AOSP)が管理
•コントリビュータ、メーカーエンジニアが改善を提案したり、Forkして
自社製品開発したり。
7
Google Inner
Android Open Source Project
コントリビューター
メーカー, CustomROM Developer
Fork
![Page 8: Android カスタムROMの作り方](https://reader034.vdocuments.site/reader034/viewer/2022042422/5480b6985806b5d3108b458a/html5/thumbnails/8.jpg)
Androidの利点を生かしたまま機能を追加 ◦ システムレベルのメニュー追加、テーマチェンジ
◦ 自分の思うAndroidが作れます!
8
![Page 9: Android カスタムROMの作り方](https://reader034.vdocuments.site/reader034/viewer/2022042422/5480b6985806b5d3108b458a/html5/thumbnails/9.jpg)
SIMは差さないでください
•電波法に触れる可能性が高いです
アプリに注意
•Google Mobile Serviceのようなプロプライエタリなアプリケーションの利用
に注意してください。
•変なところからダウンロードしちゃだめです。カスタムROMを使う端末にもと
もと入っているアプリを利用を推奨
キャリアやメーカー独自の機能は使えなくなるよ
•そもそも保証が無くなるので自己責任のもと実施しましょう
9
![Page 10: Android カスタムROMの作り方](https://reader034.vdocuments.site/reader034/viewer/2022042422/5480b6985806b5d3108b458a/html5/thumbnails/10.jpg)
カスタマイズしやすい機種
•Galaxy Nexus / Nexus S / Nexus One など。
(Googleリファレンス機。おすすめは Galaxy Nexus)
メリット
•場合によってはメーカー製Androidよりも安定。追加機能も。
•CyangenModはOSのアップデーターを標準化
• JCROMならシステムレベルのテーマ設定
デメリット
•著作権など法令には注意してね。
目的と異なってダーティなイメージがつくのは良くないです。
10
![Page 11: Android カスタムROMの作り方](https://reader034.vdocuments.site/reader034/viewer/2022042422/5480b6985806b5d3108b458a/html5/thumbnails/11.jpg)
VPS編
11
![Page 12: Android カスタムROMの作り方](https://reader034.vdocuments.site/reader034/viewer/2022042422/5480b6985806b5d3108b458a/html5/thumbnails/12.jpg)
ソースコードをビルドしてAndroidの実行イメージを作成する手順を紹介します
12
CyanogenMod JCROM AOSP Pure Android
![Page 13: Android カスタムROMの作り方](https://reader034.vdocuments.site/reader034/viewer/2022042422/5480b6985806b5d3108b458a/html5/thumbnails/13.jpg)
ビルド環境構築の敷居が異様に高い・・・
13
パフォーマンス
•Core i7 QuadCore
CPU
•広大なメモリ空間
16GB,24GB
•SSD
高速ストレージが
256GBは欲しい
ネットワーク
•ソースコードのダウンロードには数時間が
必要
•最新のAndroidソー
スコードが公開される
ごと。
•たまに落ちてこない
Linux OS
•普通の人は使わない
OS
•Ubuntu 12.04
64bit
•コマンドライン…
そこにシビれたり 、あこがれたりできない…(´・ω・`)
![Page 14: Android カスタムROMの作り方](https://reader034.vdocuments.site/reader034/viewer/2022042422/5480b6985806b5d3108b458a/html5/thumbnails/14.jpg)
14
元ネタは「ようかんマン」でぐぐってね
![Page 15: Android カスタムROMの作り方](https://reader034.vdocuments.site/reader034/viewer/2022042422/5480b6985806b5d3108b458a/html5/thumbnails/15.jpg)
クラウドの仮想PCを利用することで 初期費用を抑えてビルド環境が作れる
15
仮想PC
メンテナンスフリー
高速ネットワーク
手軽に構築/破棄
基本的に趣味
自宅で構築
手元にあるので安心
通信は既存でOK
用途は転用可能
そもそも作るのが楽しい
![Page 16: Android カスタムROMの作り方](https://reader034.vdocuments.site/reader034/viewer/2022042422/5480b6985806b5d3108b458a/html5/thumbnails/16.jpg)
•インスタンス型
• 1時間0.6ドル程度
Amazon
EC2
•~月額7980円
• 6CPU/8GB/800GB
さくらインター
ネット
•~月額15,880円
• 10CPU/16GB/1TB
GMO(お名
前.com)
16
カスタムROMハッカソンでGMOさんにVPSをもらったので使ってみました。 その分割り引いて見てね
ちょっと使ってみるならAmazon EC2をおすすめ。 VPS使うのはガチ勢だけでは…
![Page 17: Android カスタムROMの作り方](https://reader034.vdocuments.site/reader034/viewer/2022042422/5480b6985806b5d3108b458a/html5/thumbnails/17.jpg)
$ mkdir -p ~/jcrom_work
$ export ANDROID_ROOT=~/jcrom_work
17
https://sites.google.com/site/jcromproject/home
作業ディレクトリの準備
$ cd $ANDROID_ROOT $ repo init -u https://bitbucket.org/sola/jcrom_manifest -m jcrom_jb-master.xml $ repo sync –j8
ソースコードのダウンロード
通常、数時間かかるところがVPSだと30分で終わり! ちなみにプロキシ有りネットワークだと1日かかるorz
![Page 18: Android カスタムROMの作り方](https://reader034.vdocuments.site/reader034/viewer/2022042422/5480b6985806b5d3108b458a/html5/thumbnails/18.jpg)
ソースコードの無いバイナリファイルのダウンロード
18
$ wget https://dl.google.com/dl/android/aosp/broadcom-maguro-jro03h-4cc54d09.tgz $ wget https://dl.google.com/dl/android/aosp/imgtec-maguro-jro03h-827bcb4c.tgz $ wget https://dl.google.com/dl/android/aosp/invensense-maguro-jro03h-682067a4.tgz $ wget https://dl.google.com/dl/android/aosp/samsung-maguro-jro03h-0655880b.tgz $ tar zxvf broadcom-maguro-jro03h-4cc54d09.tgz $ tar zxvf imgtec-maguro-jro03h-827bcb4c.tgz $ tar zxvf invensense-maguro-jro03h-682067a4.tgz $ tar zxvf samsung-maguro-jro03h-0655880b.tgz $ ./extract-broadcom-maguro.sh $ ./extract-imgtec-maguro.sh $ ./extract-invensense-maguro.sh $ ./extract-samsung-maguro.sh
https://sites.google.com/site/jcromproject/home
![Page 19: Android カスタムROMの作り方](https://reader034.vdocuments.site/reader034/viewer/2022042422/5480b6985806b5d3108b458a/html5/thumbnails/19.jpg)
19
$ cd $ANDROID_ROOT/jcrom/samsung/maguro/proprietary/ $ ./extract-files.sh
端末から必要なファイルを吸い出す
設定しておくと、2回目以降のビルド時間を短縮出来る。 $ export USE_CCACHE=1 $ $ANDROID_ROOT/prebuilts/misc/linux-x86/ccache/ccache -M 50G
ccache の設定
※Galaxy Nexusの場合、端末からデータを取り出す必要があります VPS上では出来ないので注意
https://sites.google.com/site/jcromproject/home
![Page 20: Android カスタムROMの作り方](https://reader034.vdocuments.site/reader034/viewer/2022042422/5480b6985806b5d3108b458a/html5/thumbnails/20.jpg)
20 https://sites.google.com/site/jcromproject/home
$ cd $ANDROID_ROOT $ source build/envsetup.sh $ lunch full_maguro-userdebug $ make –j16
Androidのビルド
GMOのVPSではj16オプションを付けて、初回ビルド37分でした Xeon 8コア論理16 / 24GBマシンで25分、普通のPCなら数時間コース
recovery mode で書き込む為のデータを作成する $ cd $ANDROID_ROOT $ make otapackage
![Page 21: Android カスタムROMの作り方](https://reader034.vdocuments.site/reader034/viewer/2022042422/5480b6985806b5d3108b458a/html5/thumbnails/21.jpg)
カスタムROMハッカソン編
21
![Page 22: Android カスタムROMの作り方](https://reader034.vdocuments.site/reader034/viewer/2022042422/5480b6985806b5d3108b458a/html5/thumbnails/22.jpg)
Androidをカスタマイズするチャレンジングなハッカソン。 そもそもビルドに数時間…ということでVPSの出番
22
![Page 23: Android カスタムROMの作り方](https://reader034.vdocuments.site/reader034/viewer/2022042422/5480b6985806b5d3108b458a/html5/thumbnails/23.jpg)
23
![Page 24: Android カスタムROMの作り方](https://reader034.vdocuments.site/reader034/viewer/2022042422/5480b6985806b5d3108b458a/html5/thumbnails/24.jpg)
あ、いいかも。アプリごとに動きを変えるとか?
固定じゃ無くて色々変更したいし、動きを決めるのは面倒だからサジェストしたい
ちょっと、おちつけ。
でも機能をカスタマイズできるのは良いかもしれない。 ソフトウェアキーで機能を割り当てるとかどう?
大きなお友達のハートをがっちりつかむケータイがほしい
AKBフォンとか。プリキュアフォンとか。ROMの入れ替えで変身できるのであれば需要があるかも?
24
![Page 25: Android カスタムROMの作り方](https://reader034.vdocuments.site/reader034/viewer/2022042422/5480b6985806b5d3108b458a/html5/thumbnails/25.jpg)
Android フレームワークを変更して、ボタンを追加する
単純なボタンではなく動作を決めたい
サジェストできるようにボタン押下イベントが欲しい
•たとえばどんな風に動きを変えたい?
• Mapをみてるなら特定の場所からの一発ルート検索
•ウェブサイトを見てれば特定の言葉で検索
• YouTubeなら動画、ツイッターならハッシュタグをみるなど
25
![Page 26: Android カスタムROMの作り方](https://reader034.vdocuments.site/reader034/viewer/2022042422/5480b6985806b5d3108b458a/html5/thumbnails/26.jpg)
SystemUI.apk
◦ 画面全体を提供している特殊なアプリケーション
イメージ図
26
フレームワーク
SystemUI
Application
キーイベントの通知
![Page 27: Android カスタムROMの作り方](https://reader034.vdocuments.site/reader034/viewer/2022042422/5480b6985806b5d3108b458a/html5/thumbnails/27.jpg)
ハードウェアキー ◦ Home、Backキーなどは
キーコードが割り当てられている
ソフトウェアキー
◦ 通知はハードウェアと違い、イベント化されている
インテントを使うメリット
◦ アプリ側で動作を決められる。アップデートできる。入れ替えもできる。
27
フレームワーク
SystemUI
<ボタン追加>
Application
<Serviceを追加>
独自のインテントを発行する。
アプリ側で動作を規定できるメリット
![Page 28: Android カスタムROMの作り方](https://reader034.vdocuments.site/reader034/viewer/2022042422/5480b6985806b5d3108b458a/html5/thumbnails/28.jpg)
SystemUI¥src¥com¥android¥systemui¥statusbar¥phone¥ PhoneStatusBar.java
28
private View.OnClickListener mMomokuroClickListener = new View.OnClickListener() { public void onClick(View v) { Intent intent = new Intent(); intent.setAction("net.momoclo.action.SUGGEST"); v.getContext().sendBroadcast(intent); } };
カスタムキー用のonClickListnerを作成 独自の暗黙的インテントをブロードキャストする ※この場所でこの実装で正しいかはNoっぽい
![Page 29: Android カスタムROMの作り方](https://reader034.vdocuments.site/reader034/viewer/2022042422/5480b6985806b5d3108b458a/html5/thumbnails/29.jpg)
SystemUI¥src¥com¥android¥systemui¥statusbar¥phone¥ PhoneStatusBar.java
29
private void prepareNavigationBarView() { mNavigationBarView.reorient(); mNavigationBarView.getRecentsButton() .setOnClickListener(mRecentsClickListener); mNavigationBarView.getRecentsButton() .setOnTouchListener(mRecentsPanel); mNavigationBarView.getExpandButton() .setOnClickListener(mExpandClickListener); mNavigationBarView.getMomokuroButton() .setOnClickListener(mMomokuroClickListener); mNavigationBarView.getHomeButton() .setOnTouchListener(mHomeSearchActionListener); updateSearchPanel(); }
![Page 30: Android カスタムROMの作り方](https://reader034.vdocuments.site/reader034/viewer/2022042422/5480b6985806b5d3108b458a/html5/thumbnails/30.jpg)
30
public class WhatsTop extends BroadcastReceiver { @Override public void onReceive(Context arg0, Intent arg1) { ComponentName name = Util.getTopActivity(arg0); Intent intent = new Intent(Intent.ACTION_SEARCH); PackageManager manager = arg0.getPackageManager(); List<ResolveInfo> list = manager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); try{ for(int i = 0; i < list.size(); i++){ ResolveInfo info = list.get(i); String packageName = info.activityInfo.packageName; if(packageName.equals(name.getPackageName())){ android.util.Log.e("debug", "たいおうしています!"); intent.setComponent(name); intent.putExtra("query", "ももくろ"); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); arg0.startActivity(intent); suggested = true; break; } if(!suggested){ Toast.makeText(arg0, "ももくろ関連情報はみつかりません", Toast.LENGTH_SHORT).show(); } }
![Page 31: Android カスタムROMの作り方](https://reader034.vdocuments.site/reader034/viewer/2022042422/5480b6985806b5d3108b458a/html5/thumbnails/31.jpg)
ね、簡単でしょう?
カスタマイズに興味を持った人はチャレンジしてください!
カスタムROMハッカソンの成果は
• @chun_ryo @furusin_oriver @c1e @rey_k @hamatzさんたちと
一緒にやりました!
31