Android の build.prop に設定値を追加する方法
Android のシステムプロパティを設定する方法は多々あります。
参考
その中でもデバイス固有のプロパティを記述するのが /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
に反映されます。
なお、下に行くほど優先度が高く、プロパティを上書きします1。
確認は android-7.1.1_r6 で行いました2。
buildinfo.sh
中を見ると以下のように echo
が並んでいます。ビルド時の環境変数を反映させるのが目的のようです。
よほどの理由が無い限り、このファイルに手を加えるべきではありません。
6 7 8 | 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 等にあったりします。
プロダクトのルートにある system.prop
が使用されるということです。
これは build/core/Makefile 内で以下のように記述されているためです。
見ての通り、TARGET_SYSTEM_PROP
という変数でファイルを指定すれば、そのファイルを使用するようになります。
200 201 202 203 204 | 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
を定義するとプロパティを上書きすることが出来ます3。
エミュレーターだと build/target/board/generic_x86_64/device.mk 等の中に記述されていたりします。
1 2 | PRODUCT_PROPERTY_OVERRIDES += \ persist.sys.timezone = Asia/Tokyo |
ビルド毎に設定を使い分けたい場合に使用すると良いでしょう4。
build.prop を生成している記述
上記3つの情報を統合して system/build.prop
ファイルにしているのは、
build/core/Makefile 内の以下の記述です。
今後、仕様が変更されることもありうるので、OSのバージョンが変わった場合は確認した方が良いでしょう。
205 206 207 208 209 210 211 212 213 214 215 216 217 218 | $(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 件のコメント:
コメントを投稿