プロダクトごとの Makefile
(your_product.mk
など) に、以下のように記述しておくと、ビルド時に build.prop
に追加されます。
PRODUCT_PROPERTY_OVERRIDES += \
persist.sys.timezone = Asia/Tokyo
default.prop
に以下のような感じで追加すると、デバイス起動時にシステムプロパティとして設定されます。
persist.sys.timezone=Asia/Tokyo
init.rc
あるいは、プロダクトごとの init
ファイルに、以下のような感じで追加しておくことができます。
setprop persist.sys.timezone Asia/Tokyo
/dev/socket/property_service
で、サイズは環境変数の ANDROID_PROPERTY_WORKSPACE
で取得する。Bionic libc のライブラリ libcutils
がこの shared memory に対してシステムプロパティを読み書きするインタフェースを提供する。Bionic libc の libcutils
をリンクし、cutils/properties.h
を include して、以下の関数を使用します。
int property_get(const char *key, char *value, const char *default_value);
int property_set(const char *key, const char *value);
int property_list(void (*propfn)(const char *key, const char *value, void *cookie), void *cookie);
使い方はこんな感じ。
#include "utils/properties.h"
char value[PROPERTY_VALUE_MAX];
if (property_get("ro.hardware", value, "") > 0) {
if (strcmp(value, "hoge") == 0) {
// ...
}
}
android.os.SystemProperties
の下記のメソッドを使用します。
public static String get(String key, String def)
public static int getInt(String key, int def)
public static long getLong(String key, long def)
public static boolean getBoolean(String key, boolean def)
public static void set(String key, String val)
これは Android platform で使われているプライベートなクラスなので、Android アプリからは通常使用しません。 扱い的には internal usage only とされているが、internal usage って何のことを言っているのかが曖昧。
SystemProperties
は JNI を使って、libcutils
のネイティブコードを叩いています。
get は通常できるが、set は UID が適切にセットされていないとできないっぽいです(2016-03-16 追記: 現状これらは hide API 扱いなので、いずれも通常のアプリケーションからは使用できません)。
似たようなものに、通常の J2SE アプリケーションで使用可能な java.lang.System
クラスの getProperty()
系 API がありますが、この API で取得するプロパティは VM に関するプロパティであり、情報が異なります。
Bionic libc の libcutils
に、コマンドラインツールとして以下のコマンドが用意されています。これらは shell script からも実行可能です。
getprop (例: getprop com.example.key)
setprop (例: setprop com.example.key value)