概要

  • Galaxy Nexus 用 ROM をソースから Build する方法
  • たまに自作 ROM で遊びたくなるのでメモ

詳細

  • ソースの取得
    4.3.1_r1 が最終っぽい。(↓の repository で git branch -av して確認)
    いや、本来はここで最終のを探すべきだった^^;

    repo init -u https://android.googlesource.com/platform/manifest -b android-4.3.1_r1
    repo sync -j8
    
  • SAMSUNG の Proprietary なバイナリの取得
    ここ に書かれている通り

    wget https://dl.google.com/dl/android/aosp/broadcom-maguro-jwr66v-67de03a5.tgz
    wget https://dl.google.com/dl/android/aosp/imgtec-maguro-jwr66v-8c6053ac.tgz
    wget https://dl.google.com/dl/android/aosp/invensense-maguro-jwr66v-d0d44515.tgz
    wget https://dl.google.com/dl/android/aosp/nxp-maguro-jwr66v-c43474a5.tgz
    wget https://dl.google.com/dl/android/aosp/samsung-maguro-jwr66v-03e74ff7.tgz
    wget https://dl.google.com/dl/android/aosp/widevine-maguro-jwr66v-9189a15f.tgz
    
  • これらを解凍

    tar zxvf broadcom-maguro-jwr66v-67de03a5.tgz
    tar zxvf imgtec-maguro-jwr66v-8c6053ac.tgz
    tar zxvf invensense-maguro-jwr66v-d0d44515.tgz
    tar zxvf nxp-maguro-jwr66v-c43474a5.tgz
    tar zxvf samsung-maguro-jwr66v-03e74ff7.tgz
    tar zxvf widevine-maguro-jwr66v-9189a15f.tgz
    
  • 解凍された Shell Script を実行し、色々読んで
    “I ACCEPT” を入力

    ./extract-broadcom-maguro.sh
    ./extract-imgtec-maguro.sh
    ./extract-invensense-maguro.sh
    ./extract-nxp-maguro.sh
    ./extract-samsung-maguro.sh
    ./extract-widevine-maguro.sh
    
  • GPS はデバイスからバイナリを取ってこないと使えない。。

    • https://anders.com/cms/435/Google.Galaxy.Nexus/Android/AOSP/camera/GPS/driver
      ここを参照
    • 以下でデバイスから取得して配置
      ↑のサイトには書かれてないが、gps.omap4.so と ducati-m3.bin も取得する必要があった。fRom は↑の ./extract-samsung-maguro.sh で生成される

      adb pull /system/vendor/etc/sirfgps.conf
      cp sirfgps.conf vendor/samsung/maguro/proprietary/
              
      adb pull /system/vendor/lib/hw/gps.omap4.so
      cp gps.omap4.so vendor/samsung/maguro/proprietary/
              
      adb pull  /system/vendor/firmware/ducati-m3.bin
      cp ducati-m3.bin vendor/samsung/maguro/proprietary/
      
    • vendor/samsung/maguro/proprietary/Android.mk の最後(endif の前)に以下を追加

      include $(CLEAR_VARS)
      LOCAL_MODULE := sirfgps
      LOCAL_MODULE_OWNER := samsung
      LOCAL_SRC_FILES := sirfgps.conf
      LOCAL_MODULE_TAGS := optional
      LOCAL_MODULE_SUFFIX := .conf
      LOCAL_MODULE_CLASS := SHARED_LIBRARIES
      LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR)/etc
      include $(BUILD_PREBUILT)
              
      include $(CLEAR_VARS)
      LOCAL_MODULE := gps.omap4
      LOCAL_MODULE_OWNER := samsung
      LOCAL_SRC_FILES := gps.omap4.so
      LOCAL_MODULE_TAGS := optional
      LOCAL_MODULE_SUFFIX := .so
      LOCAL_MODULE_CLASS := SHARED_LIBRARIES
      LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR)/lib/hw
      include $(BUILD_PREBUILT)
              
      include $(CLEAR_VARS)
      LOCAL_MODULE := ducati-m3
      LOCAL_MODULE_OWNER := samsung
      LOCAL_SRC_FILES := ducati-m3.bin
      LOCAL_MODULE_TAGS := optional
      LOCAL_MODULE_SUFFIX := .bin
      LOCAL_MODULE_CLASS := SHARED_LIBRARIES
      LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR)/firmware
      include $(BUILD_PREBUILT)
      
    • vendor/samsung/maguro/device-partial.mk に以下を追加
      (下4行を追加、その上の行の最後に \ を追加)

      PRODUCT_PACKAGES := \
          fRom \
          libsec-ril \
          libsecril-client \
          sirfgps \
          gps.omap4 \
          ducati-m3 \
          libpn544_fw
      
  • Build
    full_maguro-userdebug は 12 なので、lunch して 12 を選んでもOK

    source build/envsetup.sh
    lunch full_maguro-userdebug
    make -j8
    make -j8 otapackage
    
  • 焼く

    adb push out/target/product/maguro/full_maguro-ota-eng.xxxxx.zip /sdcard/
    adb push gapps-jb43-20131116-dmd151.zip /sdcard/
    adb push UPDATE-SuperSU-v1.43.zip /sdcaard/
    adb reboot recovery
    

    Push して、TWRP で起動して以下を焼く

まとめ

  • 端末からいくつか binary を抜く必要はあるが、ソースからビルドして端末上で動かすことができた
  • これで色々試せる。位置偽装とか。