2

アプリケーション層から Android システム プロパティにアクセスする方法を知っています。
フレームワーク層android.os.SystemPropertiesクラスでは、すべてのプロパティを取得する責任があります。しかし、内部的には、のようなプロパティを取得するためにいくつかの C コードを呼び出しますnative_get(key,value)
基本的にCコードでどのファイルが参照されているか教えてください。

4

2 に答える 2

6

ファイルにあるそのメソッドのネイティブ コード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 はコンシューマの通常のメモリと同じようにプロパティを読み取ることができます。

于 2012-10-03T12:47:13.703 に答える
3

これらはSDKAPIの一部ではありません。

于 2011-03-10T05:46:08.137 に答える