SlideShare a Scribd company logo
1 of 31
Download to read offline
techbooster.org
       日高正博




                  1
   組込エンジニアです?
       Androidとか
       関西が生息圏です
       techbooster.org みてね


        Twitter
        Account
        @mhidaka




                              2
   Android ADK 組込み
    プログラミング完全ガイド

   執筆しました!
    発売中です

   電子工作、クラウド連携
    がAndroidで出来るよう
    になりました



                      3
Androidをカスタマイズ?


VPSでビルドしてみよう


ほしいAndroidを作ろう


                  4
カスタムROMの紹介




             5
   AOSPが提供するソースコードがベース
    ◦ 通知バーへのWiFiトグル追加などオリジナル機能を提供
    ◦ コミュニティが主体となって開発




                                    6
Android Open Source Project(AOSP)が管理
• コントリビュータ、メーカーエンジニアが改善を提案したり、Forkして
  自社製品開発したり。

                                   Google Inner



                                   Android Open
                                   Source Project

                                   コントリビューター

   Fork                            メーカー,
                                   CustomROM
                                   Developer
                                               7
   Androidの利点を生かしたまま機能を追加
    ◦ システムレベルのメニュー追加、テーマチェンジ
    ◦ 自分の思うAndroidが作れます!




                               8
SIMは差さないでください
•電波法に触れる可能性が高いです

アプリに注意
•Google Mobile Serviceのようなプロプライエタリなアプリケーションの利用
 に注意してください。
•変なところからダウンロードしちゃだめです。カスタムROMを使う端末にもと
 もと入っているアプリを利用を推奨

キャリアやメーカー独自の機能は使えなくなるよ
•そもそも保証が無くなるので自己責任のもと実施しましょう


                                                 9
カスタマイズしやすい機種
• Galaxy Nexus / Nexus S / Nexus One など。
  (Googleリファレンス機。おすすめは Galaxy Nexus)

メリット
• 場合によってはメーカー製Androidよりも安定。追加機能も。
• CyangenModはOSのアップデーターを標準化
• JCROMならシステムレベルのテーマ設定

デメリット
• 著作権など法令には注意してね。
  目的と異なってダーティなイメージがつくのは良くないです。

                                           10
VPS編




       11
   ソースコードをビルドしてAndroidの実行イメージを作
    成する手順を紹介します




        AOSP       CyanogenMod   JCROM
    Pure Android


                                         12
   ビルド環境構築の敷居が異様に高い・・・

    パフォーマンス             ネットワーク             Linux OS

• Core i7 QuadCore   • ソースコードのダウン     • 普通の人は使わない
  CPU                  ロードには数時間が        OS
                       必要             • Ubuntu 12.04
• 広大なメモリ空間
  16GB,24GB          • 最新のAndroidソー     64bit
                       スコードが公開される
• SSD                                 • コマンドライン…
                       ごと。
  高速ストレージが
  256GBは欲しい          • たまに落ちてこない




             そこにシビれたり 、あこがれたりできない…(´・ω・`)
                                                       13
元ネタは「ようかんマン」でぐぐってね
                     14
   クラウドの仮想PCを利用することで
    初期費用を抑えてビルド環境が作れる


      仮想PC       自宅で構築
     メンテナンスフリー    手元にあるので安心

     高速ネットワーク     通信は既存でOK

     手軽に構築/破棄     用途は転用可能

      基本的に趣味     そもそも作るのが楽しい


                               15
   カスタムROMハッカソンでGMOさんにVPSをもらったので使ってみました。
     その分割り引いて見てね

    ちょっと使ってみるならAmazon EC2をおすすめ。
       VPS使うのはガチ勢だけでは…



• インスタンス型        • ~月額7980円         • ~月額15,880円
• 1時間0.6ドル程度     • 6CPU/8GB/800GB   • 10CPU/16GB/1TB




Amazon           さくらインター            GMO(お名
EC2              ネット                前.com)


                                                       16
   作業ディレクトリの準備
$ mkdir -p ~/jcrom_work
$ export ANDROID_ROOT=~/jcrom_work


   ソースコードのダウンロード
$ cd $ANDROID_ROOT
$ repo init -u https://bitbucket.org/sola/jcrom_manifest -m
jcrom_jb-master.xml
$ repo sync –j8

                          通常、数時間かかるところがVPSだと30分で終わり!
                          ちなみにプロキシ有りネットワークだと1日かかるorz

                     https://sites.google.com/site/jcromproject/home
                                                                   17
   ソースコードの無いバイナリファイルのダウンロード
$ 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
   端末から必要なファイルを吸い出す
$ 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
   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
カスタムROMハッカソン編




                21
   Androidをカスタマイズするチャレンジングなハッカソン。
    そもそもビルドに数時間…ということでVPSの出番




                                     22
23
大きなお友達のハートをがっちりつかむケータイがほしい

  AKBフォンとか。プリキュアフォンとか。ROMの入れ替えで変身できるのであれば需要があるかも?




                   ちょっと、おちつけ。

でも機能をカスタマイズできるのは良いかもしれない。   ソフトウェアキーで機能を割り当てるとかどう?




           あ、いいかも。アプリごとに動きを変えるとか?

      固定じゃ無くて色々変更したいし、動きを決めるのは面倒だからサジェストしたい




                                                     24
Android フレームワークを変更して、ボタンを追加する




単純なボタンではなく動作を決めたい


サジェストできるようにボタン押下イベントが欲しい
• たとえばどんな風に動きを変えたい?
• Mapをみてるなら特定の場所からの一発ルート検索
• ウェブサイトを見てれば特定の言葉で検索
• YouTubeなら動画、ツイッターならハッシュタグをみるなど
                                   25
   SystemUI.apk
    ◦ 画面全体を提供している特殊な
      アプリケーション
   イメージ図

      Application
                    キ
                    ー
                    イ
       SystemUI     ベ
                    ン
                    ト
                    の
                    通
      フレームワーク       知


                        26
   ハードウェアキー
                                ◦ Home、Backキーなどは
                                  キーコードが割り当てられ
  Application                     ている
<Serviceを追加>                   ソフトウェアキー
  SystemUI
                                ◦ 通知はハードウェアと違い、
                独自のインテントを         イベント化されている
 <ボタン追加>        発行する。
                               インテントを使うメリット
                アプリ側で動作を規
                定できるメリット        ◦ アプリ側で動作を決められ
 フレームワーク
                                  る。アップデートできる。入
                                  れ替えもできる。


                                                   27
   SystemUI¥src¥com¥android¥systemui¥statusbar¥phone¥
    PhoneStatusBar.java

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っぽい

                                                             28
   SystemUI¥src¥com¥android¥systemui¥statusbar¥phone¥
    PhoneStatusBar.java
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();
}
                                                         29
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
ね、簡単でしょう?


カスタマイズに興味を持った人はチャレンジしてください!


カスタムROMハッカソンの成果は
• @chun_ryo @furusin_oriver @c1e @rey_k @hamatzさんたちと
  一緒にやりました!



                                                       31

More Related Content

What's hot

モジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェースモジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェースHajime Yanagawa
 
入社1年目のプログラミング初心者がSpringを学ぶための手引き
入社1年目のプログラミング初心者がSpringを学ぶための手引き入社1年目のプログラミング初心者がSpringを学ぶための手引き
入社1年目のプログラミング初心者がSpringを学ぶための手引き土岐 孝平
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean ArchitectureAtsushi Nakamura
 
ベロシティを上手く使って 技術的負債を計画的に解消する
ベロシティを上手く使って 技術的負債を計画的に解消するベロシティを上手く使って 技術的負債を計画的に解消する
ベロシティを上手く使って 技術的負債を計画的に解消するKoichiro Matsuoka
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話Koichiro Matsuoka
 
node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成shigeki_ohtsu
 
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているKoichi Tanaka
 
Android enterpriseで実現できる端末管理の世界
Android enterpriseで実現できる端末管理の世界Android enterpriseで実現できる端末管理の世界
Android enterpriseで実現できる端末管理の世界Daisuke Tsutsumi
 
Introduction to Initramfs - Initramfs-tools and Dracut
Introduction to Initramfs - Initramfs-tools and DracutIntroduction to Initramfs - Initramfs-tools and Dracut
Introduction to Initramfs - Initramfs-tools and DracutTaisuke Yamada
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろうKota Mizushima
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪Takuto Wada
 
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しようUnity Technologies Japan K.K.
 
async/await のしくみ
async/await のしくみasync/await のしくみ
async/await のしくみ信之 岩永
 
Junitを使ったjavaのテスト入門
Junitを使ったjavaのテスト入門Junitを使ったjavaのテスト入門
Junitを使ったjavaのテスト入門Satoshi Kubo
 
メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?Takuya Ueda
 
initとプロセス再起動
initとプロセス再起動initとプロセス再起動
initとプロセス再起動Takashi Takizawa
 
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門Fixstars Corporation
 
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~JustSystems Corporation
 
GoによるiOSアプリの開発
GoによるiOSアプリの開発GoによるiOSアプリの開発
GoによるiOSアプリの開発Takuya Ueda
 

What's hot (20)

モジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェースモジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェース
 
入社1年目のプログラミング初心者がSpringを学ぶための手引き
入社1年目のプログラミング初心者がSpringを学ぶための手引き入社1年目のプログラミング初心者がSpringを学ぶための手引き
入社1年目のプログラミング初心者がSpringを学ぶための手引き
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
ベロシティを上手く使って 技術的負債を計画的に解消する
ベロシティを上手く使って 技術的負債を計画的に解消するベロシティを上手く使って 技術的負債を計画的に解消する
ベロシティを上手く使って 技術的負債を計画的に解消する
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
 
node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成
 
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
 
Android enterpriseで実現できる端末管理の世界
Android enterpriseで実現できる端末管理の世界Android enterpriseで実現できる端末管理の世界
Android enterpriseで実現できる端末管理の世界
 
Introduction to Initramfs - Initramfs-tools and Dracut
Introduction to Initramfs - Initramfs-tools and DracutIntroduction to Initramfs - Initramfs-tools and Dracut
Introduction to Initramfs - Initramfs-tools and Dracut
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろう
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
 
Java8でRDBMS作ったよ
Java8でRDBMS作ったよJava8でRDBMS作ったよ
Java8でRDBMS作ったよ
 
async/await のしくみ
async/await のしくみasync/await のしくみ
async/await のしくみ
 
Junitを使ったjavaのテスト入門
Junitを使ったjavaのテスト入門Junitを使ったjavaのテスト入門
Junitを使ったjavaのテスト入門
 
メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?
 
initとプロセス再起動
initとプロセス再起動initとプロセス再起動
initとプロセス再起動
 
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門
 
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
 
GoによるiOSアプリの開発
GoによるiOSアプリの開発GoによるiOSアプリの開発
GoによるiOSアプリの開発
 

Similar to Android カスタムROMの作り方

Android Lecture #01 @PRO&BSC Inc.
Android Lecture #01 @PRO&BSC Inc.Android Lecture #01 @PRO&BSC Inc.
Android Lecture #01 @PRO&BSC Inc.Yuki Higuchi
 
Java ScriptでつくるはじめてのiPhoneAndroidゲーム開発体験ハンズオン
Java ScriptでつくるはじめてのiPhoneAndroidゲーム開発体験ハンズオンJava ScriptでつくるはじめてのiPhoneAndroidゲーム開発体験ハンズオン
Java ScriptでつくるはじめてのiPhoneAndroidゲーム開発体験ハンズオン健一 茂木
 
今時のDev opsの取り組み事例集
今時のDev opsの取り組み事例集今時のDev opsの取り組み事例集
今時のDev opsの取り組み事例集Wataru NOGUCHI
 
今流行りのウェブアプリ開発環境Yeoman
今流行りのウェブアプリ開発環境Yeoman今流行りのウェブアプリ開発環境Yeoman
今流行りのウェブアプリ開発環境Yeomantomo_masakura
 
Pf部2012年1月勉強会.androidsola
Pf部2012年1月勉強会.androidsolaPf部2012年1月勉強会.androidsola
Pf部2012年1月勉強会.androidsolaandroid sola
 
日本Androidの会のハンズオンセミナー資料(20130315)
日本Androidの会のハンズオンセミナー資料(20130315)日本Androidの会のハンズオンセミナー資料(20130315)
日本Androidの会のハンズオンセミナー資料(20130315)eijikushida
 
ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)
ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)
ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)akira6592
 
【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上
【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上
【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上Tatsuya Ishikawa
 
ngCore engine for mobage platform
ngCore engine for mobage platformngCore engine for mobage platform
ngCore engine for mobage platformToru Yamaguchi
 
Andoird版OpenCVのJavaサンプルを動かす
Andoird版OpenCVのJavaサンプルを動かすAndoird版OpenCVのJavaサンプルを動かす
Andoird版OpenCVのJavaサンプルを動かすshobomaru
 
Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中Takako Miyagawa
 
Gruntでjava script前作業の自動化!
Gruntでjava script前作業の自動化!Gruntでjava script前作業の自動化!
Gruntでjava script前作業の自動化!Tanaka Yuichi
 
ネットワーク自動化、なに使う? ~自動化ツール紹介~(2017/08/18追加開催)
ネットワーク自動化、なに使う? ~自動化ツール紹介~(2017/08/18追加開催) ネットワーク自動化、なに使う? ~自動化ツール紹介~(2017/08/18追加開催)
ネットワーク自動化、なに使う? ~自動化ツール紹介~(2017/08/18追加開催) akira6592
 
NGS解析を始めた時にぶつかりがちな小さい壁あれこれ
NGS解析を始めた時にぶつかりがちな小さい壁あれこれNGS解析を始めた時にぶつかりがちな小さい壁あれこれ
NGS解析を始めた時にぶつかりがちな小さい壁あれこれDNA Data Bank of Japan center
 
Try_to_writecode_practicaltest #atest_hack
Try_to_writecode_practicaltest #atest_hackTry_to_writecode_practicaltest #atest_hack
Try_to_writecode_practicaltest #atest_hackkimukou_26 Kimukou
 
SEAndroid -AndroidのアーキテクチャとSE化について-
SEAndroid -AndroidのアーキテクチャとSE化について-SEAndroid -AndroidのアーキテクチャとSE化について-
SEAndroid -AndroidのアーキテクチャとSE化について-Hiromu Yakura
 
DroidKaigi2016 windows環境での効率的なアプリ開発手法
DroidKaigi2016 windows環境での効率的なアプリ開発手法DroidKaigi2016 windows環境での効率的なアプリ開発手法
DroidKaigi2016 windows環境での効率的なアプリ開発手法tkawashita
 
NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法Naruto TAKAHASHI
 

Similar to Android カスタムROMの作り方 (20)

Android Lecture #01 @PRO&BSC Inc.
Android Lecture #01 @PRO&BSC Inc.Android Lecture #01 @PRO&BSC Inc.
Android Lecture #01 @PRO&BSC Inc.
 
Java ScriptでつくるはじめてのiPhoneAndroidゲーム開発体験ハンズオン
Java ScriptでつくるはじめてのiPhoneAndroidゲーム開発体験ハンズオンJava ScriptでつくるはじめてのiPhoneAndroidゲーム開発体験ハンズオン
Java ScriptでつくるはじめてのiPhoneAndroidゲーム開発体験ハンズオン
 
今時のDev opsの取り組み事例集
今時のDev opsの取り組み事例集今時のDev opsの取り組み事例集
今時のDev opsの取り組み事例集
 
0621 ndk game
0621 ndk game0621 ndk game
0621 ndk game
 
今流行りのウェブアプリ開発環境Yeoman
今流行りのウェブアプリ開発環境Yeoman今流行りのウェブアプリ開発環境Yeoman
今流行りのウェブアプリ開発環境Yeoman
 
Pf部2012年1月勉強会.androidsola
Pf部2012年1月勉強会.androidsolaPf部2012年1月勉強会.androidsola
Pf部2012年1月勉強会.androidsola
 
日本Androidの会のハンズオンセミナー資料(20130315)
日本Androidの会のハンズオンセミナー資料(20130315)日本Androidの会のハンズオンセミナー資料(20130315)
日本Androidの会のハンズオンセミナー資料(20130315)
 
ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)
ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)
ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)
 
【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上
【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上
【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上
 
ngCore engine for mobage platform
ngCore engine for mobage platformngCore engine for mobage platform
ngCore engine for mobage platform
 
Andoird版OpenCVのJavaサンプルを動かす
Andoird版OpenCVのJavaサンプルを動かすAndoird版OpenCVのJavaサンプルを動かす
Andoird版OpenCVのJavaサンプルを動かす
 
Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中
 
Gruntでjava script前作業の自動化!
Gruntでjava script前作業の自動化!Gruntでjava script前作業の自動化!
Gruntでjava script前作業の自動化!
 
ネットワーク自動化、なに使う? ~自動化ツール紹介~(2017/08/18追加開催)
ネットワーク自動化、なに使う? ~自動化ツール紹介~(2017/08/18追加開催) ネットワーク自動化、なに使う? ~自動化ツール紹介~(2017/08/18追加開催)
ネットワーク自動化、なに使う? ~自動化ツール紹介~(2017/08/18追加開催)
 
NGS解析を始めた時にぶつかりがちな小さい壁あれこれ
NGS解析を始めた時にぶつかりがちな小さい壁あれこれNGS解析を始めた時にぶつかりがちな小さい壁あれこれ
NGS解析を始めた時にぶつかりがちな小さい壁あれこれ
 
Try_to_writecode_practicaltest #atest_hack
Try_to_writecode_practicaltest #atest_hackTry_to_writecode_practicaltest #atest_hack
Try_to_writecode_practicaltest #atest_hack
 
SEAndroid -AndroidのアーキテクチャとSE化について-
SEAndroid -AndroidのアーキテクチャとSE化について-SEAndroid -AndroidのアーキテクチャとSE化について-
SEAndroid -AndroidのアーキテクチャとSE化について-
 
DroidKaigi2016 windows環境での効率的なアプリ開発手法
DroidKaigi2016 windows環境での効率的なアプリ開発手法DroidKaigi2016 windows環境での効率的なアプリ開発手法
DroidKaigi2016 windows環境での効率的なアプリ開発手法
 
NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法
 
Node.jsでブラウザメッセンジャー
Node.jsでブラウザメッセンジャーNode.jsでブラウザメッセンジャー
Node.jsでブラウザメッセンジャー
 

More from Masahiro Hidaka

DroidKaigi 2019 WelcomeTalk
DroidKaigi 2019 WelcomeTalkDroidKaigi 2019 WelcomeTalk
DroidKaigi 2019 WelcomeTalkMasahiro Hidaka
 
Google I/O 2018 KeynoteとDeveloper KeynoteのOverview
Google I/O 2018 KeynoteとDeveloper KeynoteのOverviewGoogle I/O 2018 KeynoteとDeveloper KeynoteのOverview
Google I/O 2018 KeynoteとDeveloper KeynoteのOverviewMasahiro Hidaka
 
DroidKaigi 2018 Android Back to the Future
DroidKaigi 2018 Android Back to the FutureDroidKaigi 2018 Android Back to the Future
DroidKaigi 2018 Android Back to the FutureMasahiro Hidaka
 
DroidKaigi 2018 WelcomeTalk
DroidKaigi 2018 WelcomeTalk DroidKaigi 2018 WelcomeTalk
DroidKaigi 2018 WelcomeTalk Masahiro Hidaka
 
Android Things Latest News / Aug 25, 2017
Android Things Latest News / Aug 25, 2017Android Things Latest News / Aug 25, 2017
Android Things Latest News / Aug 25, 2017Masahiro Hidaka
 
コミュニティ活動と企業の相互作用 ~コミュニティへの貢献と組織活動への還元~
コミュニティ活動と企業の相互作用 ~コミュニティへの貢献と組織活動への還元~コミュニティ活動と企業の相互作用 ~コミュニティへの貢献と組織活動への還元~
コミュニティ活動と企業の相互作用 ~コミュニティへの貢献と組織活動への還元~Masahiro Hidaka
 
Google I/O 2017 Extended: Android O And Android Studio
Google I/O 2017 Extended: Android O And Android StudioGoogle I/O 2017 Extended: Android O And Android Studio
Google I/O 2017 Extended: Android O And Android StudioMasahiro Hidaka
 
Google I/O 報告会 Overview
Google I/O 報告会 OverviewGoogle I/O 報告会 Overview
Google I/O 報告会 OverviewMasahiro Hidaka
 
DroidKaigi 2017 welcometalk DAY02
DroidKaigi 2017 welcometalk DAY02DroidKaigi 2017 welcometalk DAY02
DroidKaigi 2017 welcometalk DAY02Masahiro Hidaka
 
DroidKaigi 2017 welcometalk DAY01
DroidKaigi 2017 welcometalk DAY01DroidKaigi 2017 welcometalk DAY01
DroidKaigi 2017 welcometalk DAY01Masahiro Hidaka
 
Androidアプリのストレージ戦略
Androidアプリのストレージ戦略Androidアプリのストレージ戦略
Androidアプリのストレージ戦略Masahiro Hidaka
 
Developers Summit 2017 17-A-7 執筆を支える技術と技術書のトレンド
Developers Summit 2017 17-A-7 執筆を支える技術と技術書のトレンドDevelopers Summit 2017 17-A-7 執筆を支える技術と技術書のトレンド
Developers Summit 2017 17-A-7 執筆を支える技術と技術書のトレンドMasahiro Hidaka
 
DroidKaigi - Welcome talk
DroidKaigi - Welcome talkDroidKaigi - Welcome talk
DroidKaigi - Welcome talkMasahiro Hidaka
 
Android Studio First Step Guide
Android Studio First Step GuideAndroid Studio First Step Guide
Android Studio First Step GuideMasahiro Hidaka
 
Anroid Design Guide 3つのポイント
Anroid Design Guide 3つのポイントAnroid Design Guide 3つのポイント
Anroid Design Guide 3つのポイントMasahiro Hidaka
 
Gecko入門 - Introduction to Gecko -
Gecko入門 - Introduction to Gecko -Gecko入門 - Introduction to Gecko -
Gecko入門 - Introduction to Gecko -Masahiro Hidaka
 
新版 OutOfMemoryErrorを知る
新版 OutOfMemoryErrorを知る新版 OutOfMemoryErrorを知る
新版 OutOfMemoryErrorを知るMasahiro Hidaka
 
Fxos lt1 shino_merry_mhidaka
Fxos lt1 shino_merry_mhidakaFxos lt1 shino_merry_mhidaka
Fxos lt1 shino_merry_mhidakaMasahiro Hidaka
 
書籍制作でReVIEWを使う実践ワークフロー
書籍制作でReVIEWを使う実践ワークフロー書籍制作でReVIEWを使う実践ワークフロー
書籍制作でReVIEWを使う実践ワークフローMasahiro Hidaka
 

More from Masahiro Hidaka (20)

DroidKaigi 2019 WelcomeTalk
DroidKaigi 2019 WelcomeTalkDroidKaigi 2019 WelcomeTalk
DroidKaigi 2019 WelcomeTalk
 
Google I/O 2018 KeynoteとDeveloper KeynoteのOverview
Google I/O 2018 KeynoteとDeveloper KeynoteのOverviewGoogle I/O 2018 KeynoteとDeveloper KeynoteのOverview
Google I/O 2018 KeynoteとDeveloper KeynoteのOverview
 
DroidKaigi 2018 Android Back to the Future
DroidKaigi 2018 Android Back to the FutureDroidKaigi 2018 Android Back to the Future
DroidKaigi 2018 Android Back to the Future
 
DroidKaigi 2018 WelcomeTalk
DroidKaigi 2018 WelcomeTalk DroidKaigi 2018 WelcomeTalk
DroidKaigi 2018 WelcomeTalk
 
KotlinConf Recap
KotlinConf RecapKotlinConf Recap
KotlinConf Recap
 
Android Things Latest News / Aug 25, 2017
Android Things Latest News / Aug 25, 2017Android Things Latest News / Aug 25, 2017
Android Things Latest News / Aug 25, 2017
 
コミュニティ活動と企業の相互作用 ~コミュニティへの貢献と組織活動への還元~
コミュニティ活動と企業の相互作用 ~コミュニティへの貢献と組織活動への還元~コミュニティ活動と企業の相互作用 ~コミュニティへの貢献と組織活動への還元~
コミュニティ活動と企業の相互作用 ~コミュニティへの貢献と組織活動への還元~
 
Google I/O 2017 Extended: Android O And Android Studio
Google I/O 2017 Extended: Android O And Android StudioGoogle I/O 2017 Extended: Android O And Android Studio
Google I/O 2017 Extended: Android O And Android Studio
 
Google I/O 報告会 Overview
Google I/O 報告会 OverviewGoogle I/O 報告会 Overview
Google I/O 報告会 Overview
 
DroidKaigi 2017 welcometalk DAY02
DroidKaigi 2017 welcometalk DAY02DroidKaigi 2017 welcometalk DAY02
DroidKaigi 2017 welcometalk DAY02
 
DroidKaigi 2017 welcometalk DAY01
DroidKaigi 2017 welcometalk DAY01DroidKaigi 2017 welcometalk DAY01
DroidKaigi 2017 welcometalk DAY01
 
Androidアプリのストレージ戦略
Androidアプリのストレージ戦略Androidアプリのストレージ戦略
Androidアプリのストレージ戦略
 
Developers Summit 2017 17-A-7 執筆を支える技術と技術書のトレンド
Developers Summit 2017 17-A-7 執筆を支える技術と技術書のトレンドDevelopers Summit 2017 17-A-7 執筆を支える技術と技術書のトレンド
Developers Summit 2017 17-A-7 執筆を支える技術と技術書のトレンド
 
DroidKaigi - Welcome talk
DroidKaigi - Welcome talkDroidKaigi - Welcome talk
DroidKaigi - Welcome talk
 
Android Studio First Step Guide
Android Studio First Step GuideAndroid Studio First Step Guide
Android Studio First Step Guide
 
Anroid Design Guide 3つのポイント
Anroid Design Guide 3つのポイントAnroid Design Guide 3つのポイント
Anroid Design Guide 3つのポイント
 
Gecko入門 - Introduction to Gecko -
Gecko入門 - Introduction to Gecko -Gecko入門 - Introduction to Gecko -
Gecko入門 - Introduction to Gecko -
 
新版 OutOfMemoryErrorを知る
新版 OutOfMemoryErrorを知る新版 OutOfMemoryErrorを知る
新版 OutOfMemoryErrorを知る
 
Fxos lt1 shino_merry_mhidaka
Fxos lt1 shino_merry_mhidakaFxos lt1 shino_merry_mhidaka
Fxos lt1 shino_merry_mhidaka
 
書籍制作でReVIEWを使う実践ワークフロー
書籍制作でReVIEWを使う実践ワークフロー書籍制作でReVIEWを使う実践ワークフロー
書籍制作でReVIEWを使う実践ワークフロー
 

Recently uploaded

Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 

Recently uploaded (9)

Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 

Android カスタムROMの作り方

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