Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
techbooster.org       日高正博                  1
   組込エンジニアです?       Androidとか       関西が生息圏です       techbooster.org みてね        Twitter        Account        @mhidaka  ...
   Android ADK 組込み    プログラミング完全ガイド   執筆しました!    発売中です   電子工作、クラウド連携    がAndroidで出来るよう    になりました                      3
Androidをカスタマイズ?VPSでビルドしてみようほしいAndroidを作ろう                  4
カスタムROMの紹介             5
   AOSPが提供するソースコードがベース    ◦ 通知バーへのWiFiトグル追加などオリジナル機能を提供    ◦ コミュニティが主体となって開発                                    6
Android Open Source Project(AOSP)が管理• コントリビュータ、メーカーエンジニアが改善を提案したり、Forkして  自社製品開発したり。                                   Goo...
   Androidの利点を生かしたまま機能を追加    ◦ システムレベルのメニュー追加、テーマチェンジ    ◦ 自分の思うAndroidが作れます!                               8
SIMは差さないでください•電波法に触れる可能性が高いですアプリに注意•Google Mobile Serviceのようなプロプライエタリなアプリケーションの利用 に注意してください。•変なところからダウンロードしちゃだめです。カスタムROMを...
カスタマイズしやすい機種• Galaxy Nexus / Nexus S / Nexus One など。  (Googleリファレンス機。おすすめは Galaxy Nexus)メリット• 場合によってはメーカー製Androidよりも安定。追加機...
VPS編       11
   ソースコードをビルドしてAndroidの実行イメージを作    成する手順を紹介します        AOSP       CyanogenMod   JCROM    Pure Android                     ...
   ビルド環境構築の敷居が異様に高い・・・    パフォーマンス             ネットワーク             Linux OS• Core i7 QuadCore   • ソースコードのダウン     • 普通の人は使わな...
元ネタは「ようかんマン」でぐぐってね                     14
   クラウドの仮想PCを利用することで    初期費用を抑えてビルド環境が作れる      仮想PC       自宅で構築     メンテナンスフリー    手元にあるので安心     高速ネットワーク     通信は既存でOK     ...
   カスタムROMハッカソンでGMOさんにVPSをもらったので使ってみました。     その分割り引いて見てね    ちょっと使ってみるならAmazon EC2をおすすめ。       VPS使うのはガチ勢だけでは…• インスタンス型 ...
   作業ディレクトリの準備$ mkdir -p ~/jcrom_work$ export ANDROID_ROOT=~/jcrom_work   ソースコードのダウンロード$ cd $ANDROID_ROOT$ repo init -u ...
   ソースコードの無いバイナリファイルのダウンロード$ wget https://dl.google.com/dl/android/aosp/broadcom-maguro-jro03h-4cc54d09.tgz$ wget https:/...
   端末から必要なファイルを吸い出す$ cd $ANDROID_ROOT/jcrom/samsung/maguro/proprietary/$ ./extract-files.sh   ccache の設定設定しておくと、2回目以降のビル...
   Androidのビルド$   cd $ANDROID_ROOT$   source build/envsetup.sh$   lunch full_maguro-userdebug$   make –j16               ...
カスタムROMハッカソン編                21
   Androidをカスタマイズするチャレンジングなハッカソン。    そもそもビルドに数時間…ということでVPSの出番                                     22
23
大きなお友達のハートをがっちりつかむケータイがほしい  AKBフォンとか。プリキュアフォンとか。ROMの入れ替えで変身できるのであれば需要があるかも?                   ちょっと、おちつけ。でも機能をカスタマイズできるのは良い...
Android フレームワークを変更して、ボタンを追加する単純なボタンではなく動作を決めたいサジェストできるようにボタン押下イベントが欲しい• たとえばどんな風に動きを変えたい?• Mapをみてるなら特定の場所からの一発ルート検索• ウェブサイ...
   SystemUI.apk    ◦ 画面全体を提供している特殊な      アプリケーション   イメージ図      Application                    キ                    ー    ...
   ハードウェアキー                                ◦ Home、Backキーなどは                                  キーコードが割り当てられ  Application   ...
   SystemUI¥src¥com¥android¥systemui¥statusbar¥phone¥    PhoneStatusBar.javaprivate View.OnClickListener mMomokuroClickLi...
   SystemUI¥src¥com¥android¥systemui¥statusbar¥phone¥    PhoneStatusBar.javaprivate void prepareNavigationBarView() {    ...
public class WhatsTop extends BroadcastReceiver {    @Override    public void onReceive(Context arg0, Intent arg1) {      ...
ね、簡単でしょう?カスタマイズに興味を持った人はチャレンジしてください!カスタムROMハッカソンの成果は• @chun_ryo @furusin_oriver @c1e @rey_k @hamatzさんたちと  一緒にやりました!       ...
Upcoming SlideShare
Loading in …5
×

Android カスタムROMの作り方

37,376 views

Published on

カスタムROMハッカソンでの成果をまとめました。 with @chun_ryo @furusin_oriver @c1e @rey_k @hamatzさん です!

Published in: Technology
  • Be the first to comment

Android カスタムROMの作り方

  1. 1. techbooster.org 日高正博 1
  2. 2.  組込エンジニアです?  Androidとか  関西が生息圏です  techbooster.org みてね Twitter Account @mhidaka 2
  3. 3.  Android ADK 組込み プログラミング完全ガイド 執筆しました! 発売中です 電子工作、クラウド連携 がAndroidで出来るよう になりました 3
  4. 4. Androidをカスタマイズ?VPSでビルドしてみようほしいAndroidを作ろう 4
  5. 5. カスタムROMの紹介 5
  6. 6.  AOSPが提供するソースコードがベース ◦ 通知バーへのWiFiトグル追加などオリジナル機能を提供 ◦ コミュニティが主体となって開発 6
  7. 7. Android Open Source Project(AOSP)が管理• コントリビュータ、メーカーエンジニアが改善を提案したり、Forkして 自社製品開発したり。 Google Inner Android Open Source Project コントリビューター Fork メーカー, CustomROM Developer 7
  8. 8.  Androidの利点を生かしたまま機能を追加 ◦ システムレベルのメニュー追加、テーマチェンジ ◦ 自分の思うAndroidが作れます! 8
  9. 9. SIMは差さないでください•電波法に触れる可能性が高いですアプリに注意•Google Mobile Serviceのようなプロプライエタリなアプリケーションの利用 に注意してください。•変なところからダウンロードしちゃだめです。カスタムROMを使う端末にもと もと入っているアプリを利用を推奨キャリアやメーカー独自の機能は使えなくなるよ•そもそも保証が無くなるので自己責任のもと実施しましょう 9
  10. 10. カスタマイズしやすい機種• Galaxy Nexus / Nexus S / Nexus One など。 (Googleリファレンス機。おすすめは Galaxy Nexus)メリット• 場合によってはメーカー製Androidよりも安定。追加機能も。• CyangenModはOSのアップデーターを標準化• JCROMならシステムレベルのテーマ設定デメリット• 著作権など法令には注意してね。 目的と異なってダーティなイメージがつくのは良くないです。 10
  11. 11. VPS編 11
  12. 12.  ソースコードをビルドしてAndroidの実行イメージを作 成する手順を紹介します AOSP CyanogenMod JCROM Pure Android 12
  13. 13.  ビルド環境構築の敷居が異様に高い・・・ パフォーマンス ネットワーク Linux OS• Core i7 QuadCore • ソースコードのダウン • 普通の人は使わない CPU ロードには数時間が OS 必要 • Ubuntu 12.04• 広大なメモリ空間 16GB,24GB • 最新のAndroidソー 64bit スコードが公開される• SSD • コマンドライン… ごと。 高速ストレージが 256GBは欲しい • たまに落ちてこない そこにシビれたり 、あこがれたりできない…(´・ω・`) 13
  14. 14. 元ネタは「ようかんマン」でぐぐってね 14
  15. 15.  クラウドの仮想PCを利用することで 初期費用を抑えてビルド環境が作れる 仮想PC 自宅で構築 メンテナンスフリー 手元にあるので安心 高速ネットワーク 通信は既存でOK 手軽に構築/破棄 用途は転用可能 基本的に趣味 そもそも作るのが楽しい 15
  16. 16.  カスタムROMハッカソンでGMOさんにVPSをもらったので使ってみました。 その分割り引いて見てね  ちょっと使ってみるならAmazon EC2をおすすめ。  VPS使うのはガチ勢だけでは…• インスタンス型 • ~月額7980円 • ~月額15,880円• 1時間0.6ドル程度 • 6CPU/8GB/800GB • 10CPU/16GB/1TBAmazon さくらインター GMO(お名EC2 ネット 前.com) 16
  17. 17.  作業ディレクトリの準備$ mkdir -p ~/jcrom_work$ export ANDROID_ROOT=~/jcrom_work ソースコードのダウンロード$ cd $ANDROID_ROOT$ repo init -u https://bitbucket.org/sola/jcrom_manifest -mjcrom_jb-master.xml$ repo sync –j8 通常、数時間かかるところがVPSだと30分で終わり! ちなみにプロキシ有りネットワークだと1日かかるorz https://sites.google.com/site/jcromproject/home 17
  18. 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/home18
  19. 19.  端末から必要なファイルを吸い出す$ cd $ANDROID_ROOT/jcrom/samsung/maguro/proprietary/$ ./extract-files.sh ccache の設定設定しておくと、2回目以降のビルド時間を短縮出来る。$ export USE_CCACHE=1$ $ANDROID_ROOT/prebuilts/misc/linux-x86/ccache/ccache -M 50G ※Galaxy Nexusの場合、端末からデータを取り出す必要があります VPS上では出来ないので注意 https://sites.google.com/site/jcromproject/home19
  20. 20.  Androidのビルド$ cd $ANDROID_ROOT$ source build/envsetup.sh$ lunch full_maguro-userdebug$ make –j16 GMOのVPSではj16オプションを付けて、初回ビルド37分でした Xeon 8コア論理16 / 24GBマシンで25分、普通のPCなら数時間コースrecovery mode で書き込む為のデータを作成する$ cd $ANDROID_ROOT$ make otapackage https://sites.google.com/site/jcromproject/home20
  21. 21. カスタムROMハッカソン編 21
  22. 22.  Androidをカスタマイズするチャレンジングなハッカソン。 そもそもビルドに数時間…ということでVPSの出番 22
  23. 23. 23
  24. 24. 大きなお友達のハートをがっちりつかむケータイがほしい AKBフォンとか。プリキュアフォンとか。ROMの入れ替えで変身できるのであれば需要があるかも? ちょっと、おちつけ。でも機能をカスタマイズできるのは良いかもしれない。 ソフトウェアキーで機能を割り当てるとかどう? あ、いいかも。アプリごとに動きを変えるとか? 固定じゃ無くて色々変更したいし、動きを決めるのは面倒だからサジェストしたい 24
  25. 25. Android フレームワークを変更して、ボタンを追加する単純なボタンではなく動作を決めたいサジェストできるようにボタン押下イベントが欲しい• たとえばどんな風に動きを変えたい?• Mapをみてるなら特定の場所からの一発ルート検索• ウェブサイトを見てれば特定の言葉で検索• YouTubeなら動画、ツイッターならハッシュタグをみるなど 25
  26. 26.  SystemUI.apk ◦ 画面全体を提供している特殊な アプリケーション イメージ図 Application キ ー イ SystemUI ベ ン ト の 通 フレームワーク 知 26
  27. 27.  ハードウェアキー ◦ Home、Backキーなどは キーコードが割り当てられ Application ている<Serviceを追加>  ソフトウェアキー SystemUI ◦ 通知はハードウェアと違い、 独自のインテントを イベント化されている <ボタン追加> 発行する。  インテントを使うメリット アプリ側で動作を規 定できるメリット ◦ アプリ側で動作を決められ フレームワーク る。アップデートできる。入 れ替えもできる。 27
  28. 28.  SystemUI¥src¥com¥android¥systemui¥statusbar¥phone¥ PhoneStatusBar.javaprivate 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っぽい 28
  29. 29.  SystemUI¥src¥com¥android¥systemui¥statusbar¥phone¥ PhoneStatusBar.javaprivate 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();} 29
  30. 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(); }} 30
  31. 31. ね、簡単でしょう?カスタマイズに興味を持った人はチャレンジしてください!カスタムROMハッカソンの成果は• @chun_ryo @furusin_oriver @c1e @rey_k @hamatzさんたちと 一緒にやりました! 31

×