2016/12/20
Android の build.prop に設定値を追加する方法
Android のシステムプロパティを設定する方法は多々あります。 > 参考 > > [システムプロパティのあれこれ | まくまく Android ノート](http://maku77.github.io/android/vendor/system-property.html) その中でもデバイス固有のプロパティを記述するのが `/system/build.prop`。 OS を独自ビルドするような仕事をしていると、この `/system/build.prop` に設定値を追加したいことがあるのですが、このファイルの元になる情報が分散しているので、まとめておきます。 ### build.prop の元となるデータ 上述のように `/system/build.prop` はいくつかの設定を集めて作成されます。 具体的には以下の3つ。 - build/tools/buildinfo.sh - device/*vender*/*product*/system.prop - device/*vender*/*product*/*product.mk* 中の `PRODUCT_PROPERTY_OVERRIDES` これらのうち、どれかに記述すると、`/system/build.prop` に反映されます。 なお、下に行くほど優先度が高く、プロパティを上書きします 。 確認は android-7.1.1_r6 で行いました 。 ### buildinfo.sh [build/tools/buildinfo.sh](https://android.googlesource.com/platform/build/+/android-7.1.1_r6/tools/buildinfo.sh) 中を見ると以下のように `echo` が並んでいます。ビルド時の環境変数を反映させるのが目的のようです。 よほどの理由が無い限り、このファイルに手を加えるべきではありません。 ```shell `first-line: 6; echo "ro.build.id=$BUILD_ID" echo "ro.build.display.id=$BUILD_DISPLAY_ID" 以下略 ``` ### system.prop 独自のプロダクトを定義している場合、 device/*vender*/*product*/system.prop がデフォルトになります。 エミュレーターだと [build/target/board/generic_x86_64/system.prop](https://android.googlesource.com/platform/build/+/android-7.1.1_r6/target/board/generic_x86_64/system.prop) 等にあったりします。 プロダクトのルートにある `system.prop` が使用されるということです。 これは [build/core/Makefile](https://android.googlesource.com/platform/build/+/android-7.1.1_r6/core/Makefile) 内で以下のように記述されているためです。 見ての通り、`TARGET_SYSTEM_PROP` という変数でファイルを指定すれば、そのファイルを使用するようになります。 ```makefile `first-line: 200 ifdef TARGET_SYSTEM_PROP system_prop_file := $(TARGET_SYSTEM_PROP) else system_prop_file := $(wildcard $(TARGET_DEVICE_DIR)/system.prop) endif ``` このファイルはプロダクト固有のプロパティを設定するのに使います。 ### PRODUCT_PROPERTY_OVERRIDES 独自のプロダクトを定義している場合、 device/*vender*/*product*/*product.mk* 内に `PRODUCT_PROPERTY_OVERRIDES` を定義するとプロパティを上書きすることが出来ます 。 エミュレーターだと [build/target/board/generic_x86_64/device.mk](https://android.googlesource.com/platform/build/+/android-7.1.1_r6/target/board/generic_x86_64/device.mk) 等の中に記述されていたりします。 ```makefile PRODUCT_PROPERTY_OVERRIDES += \ persist.sys.timezone = Asia/Tokyo ``` ビルド毎に設定を使い分けたい場合に使用すると良いでしょう 。 ### build.prop を生成している記述 上記3つの情報を統合して `system/build.prop` ファイルにしているのは、 [build/core/Makefile](https://android.googlesource.com/platform/build/+/android-7.1.1_r6/core/Makefile) 内の以下の記述です。 今後、仕様が変更されることもありうるので、OSのバージョンが変わった場合は確認した方が良いでしょう。 ```makefile `first-line: 205; $(intermediate_system_build_prop): $(BUILDINFO_SH) $(INTERNAL_BUILD_ID_MAKEFILE) $(BUILD_SYSTEM)/version_defaults.mk $(system_prop_file) $(INSTALLED_ANDROID_INFO_TXT_TARGET) @echo Target buildinfo: $@ @mkdir -p $(dir $@) $(hide) echo > $@ ifneq ($(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_OEM_PROPERTIES),) $(hide) echo "#" >> $@; \ echo "# PRODUCT_OEM_PROPERTIES" >> $@; \ echo "#" >> $@; $(hide) $(foreach prop,$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_OEM_PROPERTIES), \ echo "import /oem/oem.prop $(prop)" >> $@;) endif $(hide) TARGET_BUILD_TYPE="$(TARGET_BUILD_VARIANT)" \ TARGET_BUILD_FLAVOR="$(TARGET_BUILD_FLAVOR)" \ 以下略 ```
0 件のコメント:
コメントを投稿