【Android】persistプロパティを使用してスクリプトファイルを呼び出す

7404 ワード

Androidシステムには多くの属性があり、属性は2つの部分から構成されています:name&value、これらの属性を使用してシステム設定やプロセス間の情報交換を記録することができます.Androidシステムは、起動時に次のファイルから順にシステム属性をロードします.
  1./default.prop
  2./system/build.prop
  3./system/default.prop
  4./data/local.prop
  5./data/property/*
プロパティは上記のファイルの順序でロードされ、後にロードされたプロパティ値は元のプロパティ値を更新します.システムが再起動すると、属性は消えますが、「persist.」と定義できます.先頭のプロパティ値の場合、システムでsetpropコマンドでこのプロパティを設定すると、/data/property/ディレクトリにコピーが保存されます.これにより、システムが再起動された後、ロードプロセスに従ってこれらのpersist属性の値は消えません.
システムに新しいpersistプロパティを追加する場合は、追加したプロパティを満たすにはproperty_の接頭辞が必要です.service.cファイルのproperty_perms[]マトリクスで定義されています.
property_perms[] = {

    { "net.dns",          AID_RADIO,    0 },

    { "net.",             AID_SYSTEM,   0 },

    { "dev.",             AID_SYSTEM,   0 },

    { "runtime.",         AID_SYSTEM,   0 },

    { "sys.",             AID_SYSTEM,   0 },

    { "service.",         AID_SYSTEM,   0 },

    { "persist.sys.",     AID_SYSTEM,   0 },

    { "persist.service.", AID_SYSTEM,   0 },

    ……

     { NULL, 0, 0 }

};

もちろん、「persist.test.」など、必要なpersist属性の接頭辞を追加することもできます.プレフィックス、property_perms[]マトリクスに{"persist.test."を追加し、AID_SYSTEM,0}でいいです.
 
persistプロパティを使用してスクリプトファイルを呼び出すには、3つのステップに分けて完了します.スクリプトファイルを追加します.persistプロパティを追加します.init..rcにサービスを追加します.
  step1.スクリプトファイルの追加
スクリプトファイル「fortest.sh」をsource/system/core/rootdir/etc/ディレクトリの下に配置します.もちろん、他の場所にも配置できます.そしてsource/device/メーカー/デバイス/ディレクトリの下のdevice.mkファイルにPRODUCT_を追加COPY_FILESコマンド
PRODUCT_COPY_FILES += \

    /system/core/rootdir/etc/fortest.sh:/system/etc/fortest.sh

PRODUCT_経由COPY_FILESコマンドは、ソースコードに追加されたスクリプトファイル「fortest.sh」を最終的にシステムの/system/etc/ディレクトリに生成します.persistプロパティでスクリプトファイルを実行するには、現在/system/etc/fortestのため、システムにスクリプトファイルを追加するだけでは十分ではありません.shスクリプトには実行可能な権限がありません.
スクリプトファイルにユーザーモード&ファイル権限を追加するには、ソースコードinit..rcのon boot section追加
chown root root /system/etc/fortest.sh chmod 0777 /system/etc/fortest.sh

しかし、デバッグ後、ls/system/etc/fortestを通過することが分かった.sh-al後表示:-rw-r--r--root root/system/etc/fortest.shは、予想された目標を達成していないでしょう.他のsectionにこのセグメントコードを入れてみましたが、成功しませんでした.
最後にandroidでfilesystem_config.hではファイルを追加するuid&gid&操作権限を実現します.android_filesystem_config.hのandroid_files[]マトリクスに追加
{00777, AID_SYSTEM,      AID_SHELL,      "system/etc/fortest.sh"}

  
  step2.persistプロパティの追加
前述したように、カスタムpersistプロパティを追加するにはandroidソースコードにすでに存在する接頭辞を使用することができ、もちろん自分で定義した接頭辞を使用することもできます.properyでのみservice.cファイルのproperty_perms[]マトリクスにカスタムpersistを追加します.test.接頭辞.
以前はinit..rcファイルでは「setprop persist.test.test 0」でもこの機能を完了できますが、システムが再起動するたびにinitプロセスがinitをロードするためです.rc & init..rcファイルなので、「setprop persist.test.test 0」というコマンドを実行することは避けられません.これによりpersist.test.testは、システムが再起動するたびに元の初期値に戻ります.これはpersist属性が実現しようとする役割と少し矛盾している.
SOurce/device/メーカー/機器/BoardConfig.mkファイルにカスタムpersistを追加します.test.testプロパティを選択し、default valueを1 or 0に設定します.
ADDITONAL_DEFAULT_PROPERTIES += persist.test.test   0

これによりシステム内のdefault.propでpersistを生成する.test.testプロパティで、初期値は0です.この追加方法に加えて、source/device/メーカー/デバイス/system.propにカスタム属性を追加します.
 
  step3.init..rcにサービスを追加
initについてrcの紹介はsource/system/core/readmeを参照することができる.txt.InitはActions、Services、Commands&Optionsの4つの部分から構成されています.
  【Actions】
Actionsは、名前が付けられたコマンドシーケンスのセットです.Actionsにはトリガ条件があり、トリガ条件はactionがいつ実行されるかを決定します.イベントが発生すると、actionのトリガ条件が一致すると、このactionは、キューにすでに存在しない限り、予備実行キューの末尾に追加されます.
各actionのコマンドは順次実行されます.Initプロセスは、デバイスの作成/破棄、プロパティ設定、プロセスの再起動など、他のactivities間でコマンドシーケンスを実行します.
  【Services】
Servicesはinitによって起動され、必要に応じて再起動されるプログラムです.もちろん、これらのプログラムは存在します. 
  【Options】
optionsはサービスの修飾子で、initがどのようにサービスを起動するか、いつ起動するかを教えます.
init..rcのon boot sectionの後に新しいサービスを追加してnewと命名して、その対応するスクリプトファイルの位置は/system/etc/fortestです.sh,user&groupをroot,自動起動をdisableに設定し,このサービスは1回のみ起動する.
Optionsコマンドによりpersist.test.testプロパティが変化した場合、サービス「new」をオンにします.
service new /system/etc/fortest.sh

    user root

    group root

    disable

    oneshot





on property:pesist.test.test=1

    start new



on property:persist.test.test=0

    stop new

 
まとめ:persistプロパティ、スクリプトファイル、サービスを追加するプロセスについて説明します.persistプロパティ値が変化した場合、サービスを開き、スクリプトファイルを最終的に呼び出します.
ps:init.rcファイルでchmodコマンドでファイル権限の追加に成功したオオカミが助けてくれます.ありがとう!
 
参考記事:http://www.cnblogs.com/leaven/archive/2010/12/25/1917007.html
        http://blog.sina.com.cn/s/blog_6b936f150101jhfl.html