26

インストルメンテーションテストにいくつかの引数を使用しようとしています。System.getProperty()関数でシステムプロパティを読み取れることに気づきました。そこで、setpropコマンドを使用してシステムプロパティを設定します。例:adb shell setprop AP 123。テストコード内で、このAPプロパティを次のように読み取ろうとしています。


tmp = System.getProperty("AP"); 
Log.d("MyTest","AP Value = " + tmp);

次に、logcatを使用してこのデバッグメッセージを表示しますが、このプロパティの値はnullになります。何が間違っている可能性があるかについてのアイデアはありますか?コマンドを使用してシステムプロパティを読み取ることができることに注意してくださいadb shell getprop AP

4

7 に答える 7

25

「setprop」によって設定されたプロパティを取得するには、2 つのオプションがあります
。android.os.SystemProperties を使用します。これは隠し API です。次のように使用します。

Class clazz = null;
clazz = Class.forName("android.os.SystemProperties");
Method method = clazz.getDeclaredMethod("get", String.class);
String prop = (String)method.invoke(null, "AP");
Log.e("so_test", "my prop is: <" + prop  + ">");

二。「getprop」ユーティリティを使用します。

Process proc = Runtime.getRuntime().exec(new String[]{"/system/bin/getprop", "AP"});
BufferedReader reader = new BufferedReader(new InputStreamReader(proc.getInputStream()));
Log.e("so_test", "my prop is: " + reader.readLine());

NDK で利用可能な関数を使用することもオプションの 1 つかもしれませんが、なぜ気にするのでしょうか?

于 2012-07-24T02:33:01.593 に答える
15

ルートVM(Zygote)が起動すると、システムプロパティが一度読み取られ、アプリケーションのような他のDalvikVMが生成されます。つまり、システムプロパティをその場で設定することはできません。

adb shell stop(停止するまで待つ)と(再起動するまで待つ)を使用してZygoteを再起動しadb shell startてから、再試行してください。または、デバイスまたはエミュレータを再起動するだけです。

于 2011-04-09T09:50:33.587 に答える
11

Androidには2種類のプロパティがあるためです。

  1. システムレベル-コマンドで取得/設定できますadb shell getprop/setprop
  2. 現在のプロセスレベルでは、通常のJavaで取得/設定できますSystem.getProperty()/setProperty()

システムレベルのプロパティを設定し、その値を現在のプロセスレベルとして取得しようとすると、ログにnull値が記録されます。

于 2011-06-07T13:42:58.237 に答える