アプリケーション層から Android システム プロパティにアクセスする方法を知っています。
フレームワーク層android.os.SystemProperties
クラスでは、すべてのプロパティを取得する責任があります。しかし、内部的には、のようなプロパティを取得するためにいくつかの C コードを呼び出しますnative_get(key,value)
。
基本的にCコードでどのファイルが参照されているか教えてください。
2 に答える
ファイルにあるそのメソッドのネイティブ コードandroid_os_SystemProperties.cpp
。/bionic/libc/bionic/system_properties.c
共有メモリからプロパティ値を読み取るBionic libc ライブラリにそれらを委譲します。
以下は、「 Android プロパティ システム」 の記事からの引用です (Android プロパティの仕組みを理解したい場合は、すべてを読むことをお勧めします)。
init プロセスは、次のファイルからプロパティを読み込みます。
/default.prop /system/build.prop /system/default.prop /data/local.prop
次のステップは、プロパティ サービスの開始です。このステップでは、UNIX ドメイン ソケット サーバーが作成されます。このソケットのパス名は
"/dev/socket/property_service"
、他のクライアント プロセスによく知られているものです。
最後に、init プロセスが poll を呼び出して、ソケットの接続イベントを待ちます。コンシューマー側では、libc を初期化するとき (
bionic/libc/bionic/libc_common.c __libc_init_common function
)。環境変数から fd とサイズを取得し、共有メモリを独自の領域にマップします (bionic/libc/bionic/system_properties.c __system_properties_init function
)。その後、libcutils はコンシューマの通常のメモリと同じようにプロパティを読み取ることができます。
これらはSDKAPIの一部ではありません。