SlideShare a Scribd company logo
1 of 54
Galaxy Nexus のカスタム ROM 作成
自己紹介
●
    twitter : @androidsola
    G+     : http://gplus.to/sola
    blog   : http://blog.sola-dolphin-1.net/
本日の内容
●
    カスタム ROM を作り始めた理由
●
    これまでに変更した内容
●
    今後
●
    カスタム ROM の作り方(※自分のやり方)
カスタム ROM を作り始めた理由
framework の改造と勉強
標準の Galaxy Nexus に不満
●   例) menu キー欲しい&押し難い
萌化
これまでに変更した内容
ここで使用する Galaxy Nexus
●   docomo の SC-04D
SC-04D からの変更点
●   Android を 4.0.1 から 4.0.3 に変更
●   kernel を 3.0.1 から 3.0.8 に変更+クロック変更
●   software navigation bar に menu キーを設置
●   ロックスクリーンでマナーモード切替出来るように変更
●   カメラのシャッター音を変更
●   再起動メニューの追加
●   Tablet 用の UI に切り替える機能の追加
Android を 4.0.1 から 4.0.3 に変更
●   SC-04D には(現時点で)バージョンアップが来ないので、
    自分で上げた。( 4.0.1 は黒歴史バージョンだし ... )
Android を 4.0.1 から 4.0.3 に変更
●   manifest を 4.0.1_r1 から 4.0.3_r1 に変更
    変更前
     repo init -u
     https://android.googlesource.com/platform/ma
     nifest -b android-4.0.1_r1
    変更後
     repo init -u
     https://android.googlesource.com/platform/ma
     nifest -b android-4.0.3_r1
Android を 4.0.1 から 4.0.3 に変更
●   Graphics のライブラリを 4.0.3 用のものに変更する
    Binaries for Galaxy Nexus
      http://code.google.com/intl/ja/android/nexus/
      drivers.html
kernel を 3.0.1 から 3.0.8 に変更
●   Graphics のライブラリに合わせて、更新
    ドライバとライブラリの組み合わせが悪いと起動しない。
    表示を出そうとする辺りで、落ちる。
    → リブートを繰り返して、起動しない端末になる。


    これは、 PandaBoard でも同じ。
software navigation bar に
           menu キーを設置
●   変更前            ●   変更後
software navigation bar に
              menu キーを設置
●   navigation bar 用のレイアウトファイルを変更する
    標準のレイアウト




    左から、
    40dp 、 80dp 、 80dp 、 80dp 、 40dp (合計 320dp )
    となっている。
software navigation bar に
              menu キーを設置
●   navigation bar 用のレイアウトファイルを変更する
    改造後のレイアウト




    左から、
    80dp 、 80dp 、 80dp 、 80dp (合計 320dp )
    にした。
    右端の menu を出す部分は要らないので潰した。
software navigation bar に
               menu キーを設置
●   navigation bar 用のレイアウトファイルを変更する
frameworks/base/packages/SystemUI/res/layout/navigation_bar.xml

追加した menu キーの部分
+    <com.android.systemui.statusbar.policy.KeyButtonView
android:id="@+id/mymenu"
+        android:layout_width="80dp"
+        android:layout_height="match_parent"
+        android:src="@drawable/ic_sysbar_menu"
+        systemui:keyCode="82"
+        android:layout_weight="0"
+        systemui:glowBackground="@drawable/ic_sysbar_highlight"
+        android:contentDescription="@string/accessibility_menu"
+        />
横向きにした時の部分も忘れずに変更する。
software navigation bar に
               menu キーを設置
●   右端の menu キーが出ないようにする
frameworks/base/packages/SystemUI/src/com/android/systemui/statusba
r/phone/NavigationBarView.java

以下 2 つのメソッドを空に変更
public void setMenuVisibility(final boolean show)
public void setMenuVisibility(final boolean show, final boolean
force)

以下のメソッドに menu キー用の処理を追加
public void setDisabledFlags(int disabledFlags, boolean force)
他の home や back キー同様の処理を入れただけ。
(たぶん) navigation bar が消えてる時に無効にしてる。
software navigation bar に
               menu キーを設置
●   補足)キーイベントの種類
frameworks/base/core/java/android/view/KeyEvent.java

約 200 個のキーイベントが存在する。
ソース( navigation_bar.xml )を変更すれば、
自分好みにキーイベントを割り当てる事が出来る。
ロックスクリーンで
    マナーモード切替出来るように変更
●   変更前     ●   変更後
ロックスクリーンで
     マナーモード切替出来るように変更
●   sound on の状態のサークルを作る
frameworks/base/core/res/res/values/arrays.xml

  <array name="lockscreen_targets_with_camera">
       <item>@drawable/ic_lockscreen_unlock</item>
-      <item>@null</item>
+      <item>@drawable/ic_lockscreen_soundon</item>
       <item>@drawable/ic_lockscreen_camera</item>
       <item>@null</item>
   </array>
ロックスクリーンで
     マナーモード切替出来るように変更
●   sound off の状態のサークルを作る
frameworks/base/core/res/res/values/arrays.xml

+ <array name="lockscreen_targets_with_camera_silent">
+     <item>@drawable/ic_lockscreen_unlock</item>
+     <item>@drawable/ic_lockscreen_silent</item>
+     <item>@drawable/ic_lockscreen_camera</item>
      <item>@null</item>
+ </array>
●   追加した sound on/off の状態のサークルを出す( 1 )
frameworks/base/policy/src/com/android/internal/policy/impl/LockScreen
.java

  public void updateResources() {
      int resId;
      if (mCameraDisabled) {
          // Fall back to showing ring/silence if camera is disabled by
DPM...
          resId = mSilentMode ? R.array.lockscreen_targets_when_silent
               : R.array.lockscreen_targets_when_soundon;
      } else {
-         resId = R.array.lockscreen_targets_with_camera;
+         resId = mSilentMode ? R.array.lockscreen_targets_with_camera
+             : R.array.lockscreen_targets_with_camera_silent;
+
      }
      mMultiWaveView.setTargetResources(resId);
  }
●   追加した sound on/off の状態のサークルを出す( 2 )
frameworks/base/policy/src/com/android/internal/policy/impl/LockScreen
.java

  public void onTrigger(View v, int target) {
-     if (target == 0 || target == 1) {
+     if (target == 0) {
          mCallback.goToUnlockScreen();
-     } else if (target == 2 || target == 3) {
+     } else if (target == 1) {
+         toggleRingMode();
+         mUnlockWidgetMethods.updateResources();
+         mCallback.pokeWakelock();
+     } else if (target == 2 || target == 3) {
          if (!mCameraDisabled) {
              // Start the Camera
              Intent intent = new
Intent(MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA);
カメラのシャッター音を変更
●   シャッター音とフォーカス時の音
frameworks/base/data/sounds/effects/camera_click.ogg
frameworks/base/data/sounds/effects/ogg/camera_click.ogg
frameworks/base/data/sounds/effects/ogg/camera_focus.ogg
再起動メニューの追加
●   カスタム ROM 作成をしてるとよく行う操作なので追加
Tablet 用の UI に切り替える機能の追加
●   Galaxy Nexus 単体で Tablet の UI も使えるようにした
            
            




            同じイメージで切替可能
            ※再起動は必要
前回の PF 部で紹介した
Tablet と Phone の UI の話
Tablet/Phone 統合
Tablet/Phone 統合
●   Tablet と Phone の UI が統合されており、
    以下の処理で区別している。
frameworks/base/packages/SystemUI/src/com/android/systemui/SystemUI
Service.java

public void onCreate() {
    // Pick status bar or system bar.
    IWindowManager wm = IWindowManager.Stub.asInterface(
            ServiceManager.getService(Context.WINDOW_SERVICE));
    try {
        SERVICES[0] = wm.canStatusBarHide()                 Phone 向け
                ? R.string.config_statusBarComponent
                : R.string.config_systemBarComponent;
    } catch...                                             Tablet 向け
Tablet/Phone 統合
●   wm.canStatusBarHide() が返す true/false を
    決めている場所
frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWi
ndowManager.java

int shortSizeDp = shortSize
        * DisplayMetrics.DENSITY_DEFAULT
        / DisplayMetrics.DENSITY_DEVICE;
mStatusBarCanHide = shortSizeDp < 600;
mStatusBarHeight = mContext.getResources().getDimensionPixelSize(
        mStatusBarCanHide
        ? com.android.internal.R.dimen.status_bar_height
        : com.android.internal.R.dimen.system_bar_height);
Tablet/Phone 統合
●   Galaxy Nexus での計算式
int shortSizeDp = shortSize
        * DisplayMetrics.DENSITY_DEFAULT
        / DisplayMetrics.DENSITY_DEVICE;
mStatusBarCanHide = shortSizeDp < 600;

int shortSizeDp = 720 (縦横の小さい方の解像度)
        * 160
        / 320; ( ro.sf.lcd_density の値)
mStatusBarCanHide = 360 < 600;
Tablet/Phone 統合
●   解像度 800×480 なタブレットの場合の例
int shortSizeDp = shortSize
        * DisplayMetrics.DENSITY_DEFAULT
        / DisplayMetrics.DENSITY_DEVICE;
mStatusBarCanHide = shortSizeDp < 600;

int shortSizeDp = 480 (縦横の小さい方の解像度)
        * 160
        / 120; ( ro.sf.lcd_density の値)
mStatusBarCanHide = 640 < 600;
Tablet 用の UI に切り替える機能の追加
●   最初に思い付いた方法
    /system/build.prop を書き換えて再起動する
    Phone UI の時は ro.sf.lcd_density=320
    Tablet UI の時は ro.sf.lcd_density=160
    →root 権限が必要なのと、めんどくさいのでボツ
Tablet 用の UI に切り替える機能の追加
●   次に思い付いた方法
    Phone UI 用と Tablet UI 用の system.img を作成
    必要な時に書き換える
    → これもめんどくさい
Tablet 用の UI に切り替える機能の追加
●   最終的に思い付いた方法
    開発者向けオプションで、
    ON/OFF 選択して再起動
    →root 権限も書き換えの手間もない。
     再起動の約 30 秒待つだけ。
Tablet 用の UI に切り替える機能の追加
●   UI 切り替えの仕組み
    persist.sys.force.tablet の値で切り替え
    true : Tablet UI 、 true 以外: Phone UI
    開発者向けオプションの
    Tablet UI を使用にチェックを入れると、 true になる。
    → 設定アプリにこの機能を入れる。
Tablet 用の UI に切り替える機能の追加
●   ro.sf.lcd_density を参照してるところ( 1 )
frameworks/base/services/surfaceflinger/DisplayHardware/DisplayHardwa
re.cpp
void DisplayHardware::init(uint32_t dpy) の抜粋

 if (property_get("qemu.sf.lcd_density", property, NULL) <= 0) {
     if (property_get("ro.sf.lcd_density", property, NULL) <= 0) {
          LOGW("ro.sf.lcd_density not defined, using 160 dpi by
default.");
          strcpy(property, "160");
     }
 } else {
     /* for the emulator case, reset the dpi values too */
     mDpiX = mDpiY = atoi(property);
 }
 mDensity = atoi(property) * (1.0f/160.0f);
Tablet 用の UI に切り替える機能の追加
●   ro.sf.lcd_density を参照してるところ( 1 )を乗っ取る
frameworks/base/services/surfaceflinger/DisplayHardware/DisplayHardwa
re.cpp
void DisplayHardware::init(uint32_t dpy) の抜粋

 mDensity = atoi(property) * (1.0f/160.0f);

+if (property_get("persist.sys.force.tablet", property, NULL) > 0) {
+    if (strcmp(property, "true") == 0) {
+        strcpy(property, "160");
+        mDensity = atoi(property) * (1.0f/160.0f);
+    }
+}
Tablet 用の UI に切り替える機能の追加
●   ro.sf.lcd_density を参照してるところ( 2 )
frameworks/base/core/java/android/util/DisplayMetrics.java

 private static int getDeviceDensity() {
     return SystemProperties.getInt("qemu.sf.lcd_density",
         SystemProperties.getInt("ro.sf.lcd_density",
DENSITY_DEFAULT));
 }
Tablet 用の UI に切り替える機能の追加
●   ro.sf.lcd_density を参照してるところ( 2 )を乗っ取る
frameworks/base/core/java/android/util/DisplayMetrics.java

  private static int getDeviceDensity() {
+     String forceTablet =
SystemProperties.get("persist.sys.force.tablet");
+     if (! "".equals(forceTablet)) {
+         if (forceTablet.equals("true")) {
+             return DENSITY_DEFAULT;
+         }
+     }
      return SystemProperties.getInt("qemu.sf.lcd_density",
          SystemProperties.getInt("ro.sf.lcd_density",
DENSITY_DEFAULT));
  }
Tablet 用の UI に切り替える機能の追加
●   以上の変更で Tablet UI にしたところ、問題発生
    Tablet の UI になって起動するが、
    SystemUI が落ちる ...orz
Tablet 用の UI に切り替える機能の追加
●   原因は software navigation bar
    software navigation bar は Tablet の UI で
    出してはいけないらしい。
    Tablet の UI は独自に持ってるためか?
前回の PF 部で紹介した
software navigation bar の話
software navigation bar
software navigation bar
●   表示させるには以下の変更が必要
frameworks/base/core/res/res/values/config.xml
初期値
<bool name="config_showNavigationBar">false</bool>
表示させるために変更した後
<bool name="config_showNavigationBar">true</bool>

●   Emulator で試す場合
qemu.hw.mainkeys が 1 に設定されて、
config_showNavigetionBar の値が false に変更される。
emulator で試す場合は 0 に設定する。
Tablet 用の UI に切り替える機能の追加
●   config_showNavigationBar の値を上書きする
frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWind
owManager.java
config_showNavigationBar を参照してるところの後に追加する。

+ String forceTablet =
SystemProperties.get("persist.sys.force.tablet");
+ if (! "".equals(forceTablet)) {
+     if      (forceTablet.equals("true")) mHasNavigationBar = false;
+     else if (forceTablet.equals("false")) mHasNavigationBar = true;
+ }
今後
今後の予定
●
    カスタム ROM を公開
    1.Galaxy Nexus SC-04D に特化したもの
    → 今まで通り、ソースからビルドして作成

    2.Factory Image ベースで作成したもの
    →SC-04D が無くてもビルド可能にするためのもの

    3.AOSP + gapps の組み合わせで作成したもの
    → よくあるカスタム ROM の配布と同じ形式
ソースコードの公開場所
●
    bitbucket
    https://bitbucket.org/sola




    fork してどんどん改良して欲しいです。
    (改良したものは公開して欲しい)
指摘の例
http://groups.google.com/group/android-customize-club

More Related Content

What's hot

Android4.2徹底解剖!
Android4.2徹底解剖!Android4.2徹底解剖!
Android4.2徹底解剖!leverages_event
 
冬だからAndroid再入門
冬だからAndroid再入門冬だからAndroid再入門
冬だからAndroid再入門Katsumi Honda
 
SEAndroid -AndroidのアーキテクチャとSE化について-
SEAndroid -AndroidのアーキテクチャとSE化について-SEAndroid -AndroidのアーキテクチャとSE化について-
SEAndroid -AndroidのアーキテクチャとSE化について-Hiromu Yakura
 
超簡単! TortoiseGitをWindowsにインストール
超簡単! TortoiseGitをWindowsにインストール超簡単! TortoiseGitをWindowsにインストール
超簡単! TortoiseGitをWindowsにインストールShin Tanigawa
 
Webサーバ勉強会#5mod sedについて
Webサーバ勉強会#5mod sedについてWebサーバ勉強会#5mod sedについて
Webサーバ勉強会#5mod sedについてyut148atgmaildotcom
 
enchant.jsでゲーム制作をはじめてみよう 「パンダの会」バージョン
enchant.jsでゲーム制作をはじめてみよう 「パンダの会」バージョンenchant.jsでゲーム制作をはじめてみよう 「パンダの会」バージョン
enchant.jsでゲーム制作をはじめてみよう 「パンダの会」バージョンRyota Shiroguchi
 
超簡単! GitをWindowsにインストール
超簡単! GitをWindowsにインストール超簡単! GitをWindowsにインストール
超簡単! GitをWindowsにインストールShin Tanigawa
 

What's hot (7)

Android4.2徹底解剖!
Android4.2徹底解剖!Android4.2徹底解剖!
Android4.2徹底解剖!
 
冬だからAndroid再入門
冬だからAndroid再入門冬だからAndroid再入門
冬だからAndroid再入門
 
SEAndroid -AndroidのアーキテクチャとSE化について-
SEAndroid -AndroidのアーキテクチャとSE化について-SEAndroid -AndroidのアーキテクチャとSE化について-
SEAndroid -AndroidのアーキテクチャとSE化について-
 
超簡単! TortoiseGitをWindowsにインストール
超簡単! TortoiseGitをWindowsにインストール超簡単! TortoiseGitをWindowsにインストール
超簡単! TortoiseGitをWindowsにインストール
 
Webサーバ勉強会#5mod sedについて
Webサーバ勉強会#5mod sedについてWebサーバ勉強会#5mod sedについて
Webサーバ勉強会#5mod sedについて
 
enchant.jsでゲーム制作をはじめてみよう 「パンダの会」バージョン
enchant.jsでゲーム制作をはじめてみよう 「パンダの会」バージョンenchant.jsでゲーム制作をはじめてみよう 「パンダの会」バージョン
enchant.jsでゲーム制作をはじめてみよう 「パンダの会」バージョン
 
超簡単! GitをWindowsにインストール
超簡単! GitをWindowsにインストール超簡単! GitをWindowsにインストール
超簡単! GitをWindowsにインストール
 

Viewers also liked

Yokohama-PF-2014-05-androidsola
Yokohama-PF-2014-05-androidsolaYokohama-PF-2014-05-androidsola
Yokohama-PF-2014-05-androidsolaandroid sola
 
OrigenBoard and PandaBoard
OrigenBoard and PandaBoardOrigenBoard and PandaBoard
OrigenBoard and PandaBoardandroid sola
 
PF部2011年12月勉強会.androidsola
PF部2011年12月勉強会.androidsolaPF部2011年12月勉強会.androidsola
PF部2011年12月勉強会.androidsolaandroid sola
 
私の欲しい Android 端末
私の欲しい Android 端末私の欲しい Android 端末
私の欲しい Android 端末android sola
 
20100925 sola-android
20100925 sola-android20100925 sola-android
20100925 sola-androidandroid sola
 
SHARPのエコ技を実装してみた
SHARPのエコ技を実装してみたSHARPのエコ技を実装してみた
SHARPのエコ技を実装してみたandroid sola
 
JC(ROM)に俺のKitKatをあげてみた
JC(ROM)に俺のKitKatをあげてみたJC(ROM)に俺のKitKatをあげてみた
JC(ROM)に俺のKitKatをあげてみたandroid sola
 
Android カスタムROMの作り方
Android カスタムROMの作り方Android カスタムROMの作り方
Android カスタムROMの作り方Masahiro Hidaka
 
JCROM で Android の「真の力」を解き放て
JCROM で Android の「真の力」を解き放てJCROM で Android の「真の力」を解き放て
JCROM で Android の「真の力」を解き放てandroid sola
 
カスタムROM開発者の視点から見たAndroid
カスタムROM開発者の視点から見たAndroidカスタムROM開発者の視点から見たAndroid
カスタムROM開発者の視点から見たAndroidandroid sola
 
FancyFrontier22参戦報告
FancyFrontier22参戦報告FancyFrontier22参戦報告
FancyFrontier22参戦報告android sola
 

Viewers also liked (14)

Yokohama-PF-2014-05-androidsola
Yokohama-PF-2014-05-androidsolaYokohama-PF-2014-05-androidsola
Yokohama-PF-2014-05-androidsola
 
OrigenBoard and PandaBoard
OrigenBoard and PandaBoardOrigenBoard and PandaBoard
OrigenBoard and PandaBoard
 
Embedded Master2
Embedded Master2Embedded Master2
Embedded Master2
 
Gingerbread
GingerbreadGingerbread
Gingerbread
 
PF部2011年12月勉強会.androidsola
PF部2011年12月勉強会.androidsolaPF部2011年12月勉強会.androidsola
PF部2011年12月勉強会.androidsola
 
私の欲しい Android 端末
私の欲しい Android 端末私の欲しい Android 端末
私の欲しい Android 端末
 
20100925 sola-android
20100925 sola-android20100925 sola-android
20100925 sola-android
 
SHARPのエコ技を実装してみた
SHARPのエコ技を実装してみたSHARPのエコ技を実装してみた
SHARPのエコ技を実装してみた
 
JC(ROM)に俺のKitKatをあげてみた
JC(ROM)に俺のKitKatをあげてみたJC(ROM)に俺のKitKatをあげてみた
JC(ROM)に俺のKitKatをあげてみた
 
Android カスタムROMの作り方
Android カスタムROMの作り方Android カスタムROMの作り方
Android カスタムROMの作り方
 
JCROM で Android の「真の力」を解き放て
JCROM で Android の「真の力」を解き放てJCROM で Android の「真の力」を解き放て
JCROM で Android の「真の力」を解き放て
 
JCROMの4.3対応
JCROMの4.3対応JCROMの4.3対応
JCROMの4.3対応
 
カスタムROM開発者の視点から見たAndroid
カスタムROM開発者の視点から見たAndroidカスタムROM開発者の視点から見たAndroid
カスタムROM開発者の視点から見たAndroid
 
FancyFrontier22参戦報告
FancyFrontier22参戦報告FancyFrontier22参戦報告
FancyFrontier22参戦報告
 

Similar to Pf部2012年1月勉強会.androidsola

Android Lecture #04 @PRO&BSC Inc.
Android Lecture #04 @PRO&BSC Inc.Android Lecture #04 @PRO&BSC Inc.
Android Lecture #04 @PRO&BSC Inc.Yuki Higuchi
 
Zend Frameworkで始める携帯サイト
Zend Frameworkで始める携帯サイトZend Frameworkで始める携帯サイト
Zend Frameworkで始める携帯サイト清水樹
 
Windows azure mobile services による mobile + cloud アプリケーション超高速開発
Windows azure mobile services による mobile + cloud アプリケーション超高速開発Windows azure mobile services による mobile + cloud アプリケーション超高速開発
Windows azure mobile services による mobile + cloud アプリケーション超高速開発Shotaro Suzuki
 
Azure IoT Edge で Custom Vision
Azure IoT Edge で Custom VisionAzure IoT Edge で Custom Vision
Azure IoT Edge で Custom VisionYoshitaka Seo
 
Head First XML Layout on Android
Head First XML Layout on AndroidHead First XML Layout on Android
Head First XML Layout on AndroidYuki Anzai
 
Androidのライブ壁紙について
Androidのライブ壁紙についてAndroidのライブ壁紙について
Androidのライブ壁紙についてyoropan
 
[Cloud OnAir] Talks by DevRel Vol. 1 インフラストラクチャ 2020年7月30日 放送
[Cloud OnAir] Talks by DevRel Vol. 1 インフラストラクチャ 2020年7月30日 放送[Cloud OnAir] Talks by DevRel Vol. 1 インフラストラクチャ 2020年7月30日 放送
[Cloud OnAir] Talks by DevRel Vol. 1 インフラストラクチャ 2020年7月30日 放送Google Cloud Platform - Japan
 
ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用Yatabe Terumasa
 
そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 2 <Texture Streaming, メモリプロ...
  そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 2 <Texture Streaming, メモリプロ...  そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 2 <Texture Streaming, メモリプロ...
そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 2 <Texture Streaming, メモリプロ...エピック・ゲームズ・ジャパン Epic Games Japan
 
LabVIEW NXG Web Module Training Slide
LabVIEW NXG Web Module Training SlideLabVIEW NXG Web Module Training Slide
LabVIEW NXG Web Module Training SlideYusuke Tochigi
 
SugarCRM meets Azure
SugarCRM meets AzureSugarCRM meets Azure
SugarCRM meets AzureToshiya TSURU
 
Cloud9にリモートデスクトップ接続する
Cloud9にリモートデスクトップ接続するCloud9にリモートデスクトップ接続する
Cloud9にリモートデスクトップ接続するRyo Ishii
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejsTakayoshi Tanaka
 
FlutterをRenderObjectまで理解する
FlutterをRenderObjectまで理解するFlutterをRenderObjectまで理解する
FlutterをRenderObjectまで理解するKeisukeKiriyama
 
[ABC2012S]Android2x/3x/4x対応アプリ開発Tips
[ABC2012S]Android2x/3x/4x対応アプリ開発Tips[ABC2012S]Android2x/3x/4x対応アプリ開発Tips
[ABC2012S]Android2x/3x/4x対応アプリ開発TipsKenichi Kambara
 
0406web creators night_DeNA
0406web creators night_DeNA0406web creators night_DeNA
0406web creators night_DeNADeNA_open_events
 
How to django at first
How to django at firstHow to django at first
How to django at firstMaito Kuwahara
 
Titanium Mobile
Titanium MobileTitanium Mobile
Titanium MobileNaoya Ito
 

Similar to Pf部2012年1月勉強会.androidsola (20)

Android gameprogramming
Android gameprogrammingAndroid gameprogramming
Android gameprogramming
 
Android Lecture #04 @PRO&BSC Inc.
Android Lecture #04 @PRO&BSC Inc.Android Lecture #04 @PRO&BSC Inc.
Android Lecture #04 @PRO&BSC Inc.
 
Zend Frameworkで始める携帯サイト
Zend Frameworkで始める携帯サイトZend Frameworkで始める携帯サイト
Zend Frameworkで始める携帯サイト
 
Windows azure mobile services による mobile + cloud アプリケーション超高速開発
Windows azure mobile services による mobile + cloud アプリケーション超高速開発Windows azure mobile services による mobile + cloud アプリケーション超高速開発
Windows azure mobile services による mobile + cloud アプリケーション超高速開発
 
Azure IoT Edge で Custom Vision
Azure IoT Edge で Custom VisionAzure IoT Edge で Custom Vision
Azure IoT Edge で Custom Vision
 
Head First XML Layout on Android
Head First XML Layout on AndroidHead First XML Layout on Android
Head First XML Layout on Android
 
Androidのライブ壁紙について
Androidのライブ壁紙についてAndroidのライブ壁紙について
Androidのライブ壁紙について
 
[Cloud OnAir] Talks by DevRel Vol. 1 インフラストラクチャ 2020年7月30日 放送
[Cloud OnAir] Talks by DevRel Vol. 1 インフラストラクチャ 2020年7月30日 放送[Cloud OnAir] Talks by DevRel Vol. 1 インフラストラクチャ 2020年7月30日 放送
[Cloud OnAir] Talks by DevRel Vol. 1 インフラストラクチャ 2020年7月30日 放送
 
ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用
 
そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 2 <Texture Streaming, メモリプロ...
  そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 2 <Texture Streaming, メモリプロ...  そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 2 <Texture Streaming, メモリプロ...
そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 2 <Texture Streaming, メモリプロ...
 
LabVIEW NXG Web Module Training Slide
LabVIEW NXG Web Module Training SlideLabVIEW NXG Web Module Training Slide
LabVIEW NXG Web Module Training Slide
 
SugarCRM meets Azure
SugarCRM meets AzureSugarCRM meets Azure
SugarCRM meets Azure
 
Cloud9にリモートデスクトップ接続する
Cloud9にリモートデスクトップ接続するCloud9にリモートデスクトップ接続する
Cloud9にリモートデスクトップ接続する
 
Snapdragon-SCORER
Snapdragon-SCORERSnapdragon-SCORER
Snapdragon-SCORER
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
 
FlutterをRenderObjectまで理解する
FlutterをRenderObjectまで理解するFlutterをRenderObjectまで理解する
FlutterをRenderObjectまで理解する
 
[ABC2012S]Android2x/3x/4x対応アプリ開発Tips
[ABC2012S]Android2x/3x/4x対応アプリ開発Tips[ABC2012S]Android2x/3x/4x対応アプリ開発Tips
[ABC2012S]Android2x/3x/4x対応アプリ開発Tips
 
0406web creators night_DeNA
0406web creators night_DeNA0406web creators night_DeNA
0406web creators night_DeNA
 
How to django at first
How to django at firstHow to django at first
How to django at first
 
Titanium Mobile
Titanium MobileTitanium Mobile
Titanium Mobile
 

Recently uploaded

論文紹介: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
 
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
 
論文紹介: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
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
論文紹介: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
 
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
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 

Recently uploaded (9)

論文紹介: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
 
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」の紹介
 
論文紹介: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
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
論文紹介: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
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 

Pf部2012年1月勉強会.androidsola

  • 2. 自己紹介 ● twitter : @androidsola G+ : http://gplus.to/sola blog : http://blog.sola-dolphin-1.net/
  • 3. 本日の内容 ● カスタム ROM を作り始めた理由 ● これまでに変更した内容 ● 今後 ● カスタム ROM の作り方(※自分のやり方)
  • 6. 標準の Galaxy Nexus に不満 ● 例) menu キー欲しい&押し難い
  • 10. SC-04D からの変更点 ● Android を 4.0.1 から 4.0.3 に変更 ● kernel を 3.0.1 から 3.0.8 に変更+クロック変更 ● software navigation bar に menu キーを設置 ● ロックスクリーンでマナーモード切替出来るように変更 ● カメラのシャッター音を変更 ● 再起動メニューの追加 ● Tablet 用の UI に切り替える機能の追加
  • 11. Android を 4.0.1 から 4.0.3 に変更 ● SC-04D には(現時点で)バージョンアップが来ないので、 自分で上げた。( 4.0.1 は黒歴史バージョンだし ... )
  • 12. Android を 4.0.1 から 4.0.3 に変更 ● manifest を 4.0.1_r1 から 4.0.3_r1 に変更 変更前 repo init -u https://android.googlesource.com/platform/ma nifest -b android-4.0.1_r1 変更後 repo init -u https://android.googlesource.com/platform/ma nifest -b android-4.0.3_r1
  • 13. Android を 4.0.1 から 4.0.3 に変更 ● Graphics のライブラリを 4.0.3 用のものに変更する Binaries for Galaxy Nexus http://code.google.com/intl/ja/android/nexus/ drivers.html
  • 14. kernel を 3.0.1 から 3.0.8 に変更 ● Graphics のライブラリに合わせて、更新 ドライバとライブラリの組み合わせが悪いと起動しない。 表示を出そうとする辺りで、落ちる。 → リブートを繰り返して、起動しない端末になる。 これは、 PandaBoard でも同じ。
  • 15. software navigation bar に menu キーを設置 ● 変更前 ● 変更後
  • 16. software navigation bar に menu キーを設置 ● navigation bar 用のレイアウトファイルを変更する 標準のレイアウト 左から、 40dp 、 80dp 、 80dp 、 80dp 、 40dp (合計 320dp ) となっている。
  • 17. software navigation bar に menu キーを設置 ● navigation bar 用のレイアウトファイルを変更する 改造後のレイアウト 左から、 80dp 、 80dp 、 80dp 、 80dp (合計 320dp ) にした。 右端の menu を出す部分は要らないので潰した。
  • 18. software navigation bar に menu キーを設置 ● navigation bar 用のレイアウトファイルを変更する frameworks/base/packages/SystemUI/res/layout/navigation_bar.xml 追加した menu キーの部分 + <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/mymenu" + android:layout_width="80dp" + android:layout_height="match_parent" + android:src="@drawable/ic_sysbar_menu" + systemui:keyCode="82" + android:layout_weight="0" + systemui:glowBackground="@drawable/ic_sysbar_highlight" + android:contentDescription="@string/accessibility_menu" + /> 横向きにした時の部分も忘れずに変更する。
  • 19. software navigation bar に menu キーを設置 ● 右端の menu キーが出ないようにする frameworks/base/packages/SystemUI/src/com/android/systemui/statusba r/phone/NavigationBarView.java 以下 2 つのメソッドを空に変更 public void setMenuVisibility(final boolean show) public void setMenuVisibility(final boolean show, final boolean force) 以下のメソッドに menu キー用の処理を追加 public void setDisabledFlags(int disabledFlags, boolean force) 他の home や back キー同様の処理を入れただけ。 (たぶん) navigation bar が消えてる時に無効にしてる。
  • 20. software navigation bar に menu キーを設置 ● 補足)キーイベントの種類 frameworks/base/core/java/android/view/KeyEvent.java 約 200 個のキーイベントが存在する。 ソース( navigation_bar.xml )を変更すれば、 自分好みにキーイベントを割り当てる事が出来る。
  • 21. ロックスクリーンで マナーモード切替出来るように変更 ● 変更前 ● 変更後
  • 22. ロックスクリーンで マナーモード切替出来るように変更 ● sound on の状態のサークルを作る frameworks/base/core/res/res/values/arrays.xml <array name="lockscreen_targets_with_camera"> <item>@drawable/ic_lockscreen_unlock</item> - <item>@null</item> + <item>@drawable/ic_lockscreen_soundon</item> <item>@drawable/ic_lockscreen_camera</item> <item>@null</item> </array>
  • 23. ロックスクリーンで マナーモード切替出来るように変更 ● sound off の状態のサークルを作る frameworks/base/core/res/res/values/arrays.xml + <array name="lockscreen_targets_with_camera_silent"> + <item>@drawable/ic_lockscreen_unlock</item> + <item>@drawable/ic_lockscreen_silent</item> + <item>@drawable/ic_lockscreen_camera</item> <item>@null</item> + </array>
  • 24. 追加した sound on/off の状態のサークルを出す( 1 ) frameworks/base/policy/src/com/android/internal/policy/impl/LockScreen .java public void updateResources() { int resId; if (mCameraDisabled) { // Fall back to showing ring/silence if camera is disabled by DPM... resId = mSilentMode ? R.array.lockscreen_targets_when_silent : R.array.lockscreen_targets_when_soundon; } else { - resId = R.array.lockscreen_targets_with_camera; + resId = mSilentMode ? R.array.lockscreen_targets_with_camera + : R.array.lockscreen_targets_with_camera_silent; + } mMultiWaveView.setTargetResources(resId); }
  • 25. 追加した sound on/off の状態のサークルを出す( 2 ) frameworks/base/policy/src/com/android/internal/policy/impl/LockScreen .java public void onTrigger(View v, int target) { - if (target == 0 || target == 1) { + if (target == 0) { mCallback.goToUnlockScreen(); - } else if (target == 2 || target == 3) { + } else if (target == 1) { + toggleRingMode(); + mUnlockWidgetMethods.updateResources(); + mCallback.pokeWakelock(); + } else if (target == 2 || target == 3) { if (!mCameraDisabled) { // Start the Camera Intent intent = new Intent(MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA);
  • 26. カメラのシャッター音を変更 ● シャッター音とフォーカス時の音 frameworks/base/data/sounds/effects/camera_click.ogg frameworks/base/data/sounds/effects/ogg/camera_click.ogg frameworks/base/data/sounds/effects/ogg/camera_focus.ogg
  • 27. 再起動メニューの追加 ● カスタム ROM 作成をしてるとよく行う操作なので追加
  • 28. Tablet 用の UI に切り替える機能の追加 ● Galaxy Nexus 単体で Tablet の UI も使えるようにした                           同じイメージで切替可能         ※再起動は必要
  • 29. 前回の PF 部で紹介した Tablet と Phone の UI の話
  • 31. Tablet/Phone 統合 ● Tablet と Phone の UI が統合されており、 以下の処理で区別している。 frameworks/base/packages/SystemUI/src/com/android/systemui/SystemUI Service.java public void onCreate() { // Pick status bar or system bar. IWindowManager wm = IWindowManager.Stub.asInterface( ServiceManager.getService(Context.WINDOW_SERVICE)); try { SERVICES[0] = wm.canStatusBarHide() Phone 向け ? R.string.config_statusBarComponent : R.string.config_systemBarComponent; } catch... Tablet 向け
  • 32. Tablet/Phone 統合 ● wm.canStatusBarHide() が返す true/false を 決めている場所 frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWi ndowManager.java int shortSizeDp = shortSize * DisplayMetrics.DENSITY_DEFAULT / DisplayMetrics.DENSITY_DEVICE; mStatusBarCanHide = shortSizeDp < 600; mStatusBarHeight = mContext.getResources().getDimensionPixelSize( mStatusBarCanHide ? com.android.internal.R.dimen.status_bar_height : com.android.internal.R.dimen.system_bar_height);
  • 33. Tablet/Phone 統合 ● Galaxy Nexus での計算式 int shortSizeDp = shortSize * DisplayMetrics.DENSITY_DEFAULT / DisplayMetrics.DENSITY_DEVICE; mStatusBarCanHide = shortSizeDp < 600; int shortSizeDp = 720 (縦横の小さい方の解像度) * 160 / 320; ( ro.sf.lcd_density の値) mStatusBarCanHide = 360 < 600;
  • 34. Tablet/Phone 統合 ● 解像度 800×480 なタブレットの場合の例 int shortSizeDp = shortSize * DisplayMetrics.DENSITY_DEFAULT / DisplayMetrics.DENSITY_DEVICE; mStatusBarCanHide = shortSizeDp < 600; int shortSizeDp = 480 (縦横の小さい方の解像度) * 160 / 120; ( ro.sf.lcd_density の値) mStatusBarCanHide = 640 < 600;
  • 35. Tablet 用の UI に切り替える機能の追加 ● 最初に思い付いた方法 /system/build.prop を書き換えて再起動する Phone UI の時は ro.sf.lcd_density=320 Tablet UI の時は ro.sf.lcd_density=160 →root 権限が必要なのと、めんどくさいのでボツ
  • 36. Tablet 用の UI に切り替える機能の追加 ● 次に思い付いた方法 Phone UI 用と Tablet UI 用の system.img を作成 必要な時に書き換える → これもめんどくさい
  • 37. Tablet 用の UI に切り替える機能の追加 ● 最終的に思い付いた方法 開発者向けオプションで、 ON/OFF 選択して再起動 →root 権限も書き換えの手間もない。  再起動の約 30 秒待つだけ。
  • 38. Tablet 用の UI に切り替える機能の追加 ● UI 切り替えの仕組み persist.sys.force.tablet の値で切り替え true : Tablet UI 、 true 以外: Phone UI 開発者向けオプションの Tablet UI を使用にチェックを入れると、 true になる。 → 設定アプリにこの機能を入れる。
  • 39. Tablet 用の UI に切り替える機能の追加 ● ro.sf.lcd_density を参照してるところ( 1 ) frameworks/base/services/surfaceflinger/DisplayHardware/DisplayHardwa re.cpp void DisplayHardware::init(uint32_t dpy) の抜粋 if (property_get("qemu.sf.lcd_density", property, NULL) <= 0) { if (property_get("ro.sf.lcd_density", property, NULL) <= 0) { LOGW("ro.sf.lcd_density not defined, using 160 dpi by default."); strcpy(property, "160"); } } else { /* for the emulator case, reset the dpi values too */ mDpiX = mDpiY = atoi(property); } mDensity = atoi(property) * (1.0f/160.0f);
  • 40. Tablet 用の UI に切り替える機能の追加 ● ro.sf.lcd_density を参照してるところ( 1 )を乗っ取る frameworks/base/services/surfaceflinger/DisplayHardware/DisplayHardwa re.cpp void DisplayHardware::init(uint32_t dpy) の抜粋 mDensity = atoi(property) * (1.0f/160.0f); +if (property_get("persist.sys.force.tablet", property, NULL) > 0) { + if (strcmp(property, "true") == 0) { + strcpy(property, "160"); + mDensity = atoi(property) * (1.0f/160.0f); + } +}
  • 41. Tablet 用の UI に切り替える機能の追加 ● ro.sf.lcd_density を参照してるところ( 2 ) frameworks/base/core/java/android/util/DisplayMetrics.java private static int getDeviceDensity() { return SystemProperties.getInt("qemu.sf.lcd_density", SystemProperties.getInt("ro.sf.lcd_density", DENSITY_DEFAULT)); }
  • 42. Tablet 用の UI に切り替える機能の追加 ● ro.sf.lcd_density を参照してるところ( 2 )を乗っ取る frameworks/base/core/java/android/util/DisplayMetrics.java private static int getDeviceDensity() { + String forceTablet = SystemProperties.get("persist.sys.force.tablet"); + if (! "".equals(forceTablet)) { + if (forceTablet.equals("true")) { + return DENSITY_DEFAULT; + } + } return SystemProperties.getInt("qemu.sf.lcd_density", SystemProperties.getInt("ro.sf.lcd_density", DENSITY_DEFAULT)); }
  • 43. Tablet 用の UI に切り替える機能の追加 ● 以上の変更で Tablet UI にしたところ、問題発生 Tablet の UI になって起動するが、 SystemUI が落ちる ...orz
  • 44. Tablet 用の UI に切り替える機能の追加 ● 原因は software navigation bar software navigation bar は Tablet の UI で 出してはいけないらしい。 Tablet の UI は独自に持ってるためか?
  • 47. software navigation bar ● 表示させるには以下の変更が必要 frameworks/base/core/res/res/values/config.xml 初期値 <bool name="config_showNavigationBar">false</bool> 表示させるために変更した後 <bool name="config_showNavigationBar">true</bool> ● Emulator で試す場合 qemu.hw.mainkeys が 1 に設定されて、 config_showNavigetionBar の値が false に変更される。 emulator で試す場合は 0 に設定する。
  • 48. Tablet 用の UI に切り替える機能の追加 ● config_showNavigationBar の値を上書きする frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWind owManager.java config_showNavigationBar を参照してるところの後に追加する。 + String forceTablet = SystemProperties.get("persist.sys.force.tablet"); + if (! "".equals(forceTablet)) { + if (forceTablet.equals("true")) mHasNavigationBar = false; + else if (forceTablet.equals("false")) mHasNavigationBar = true; + }
  • 50. 今後の予定 ● カスタム ROM を公開 1.Galaxy Nexus SC-04D に特化したもの → 今まで通り、ソースからビルドして作成 2.Factory Image ベースで作成したもの →SC-04D が無くてもビルド可能にするためのもの 3.AOSP + gapps の組み合わせで作成したもの → よくあるカスタム ROM の配布と同じ形式
  • 51. ソースコードの公開場所 ● bitbucket https://bitbucket.org/sola fork してどんどん改良して欲しいです。 (改良したものは公開して欲しい)
  • 53.