2

私が行う手順:

私はコードで行います

System.setProperty("myproperty", 1);

次に、シェル スクリプトでプロパティ「myProperty」を 3 に設定します。次のようにします。

# setprop "myproperty" 3

次に、コードで次のようにプロパティを読み取ろうとします。

System.getProperty("myproperty");

値 1 を取得しました。これは、シェルからのセットが実際には機能しなかったことを意味します。しかし、シェルからすべての小道具を印刷すると

# getprop

リストを見ると、myproperty は 3 に等しいことがわかります。

簡単に言えば、スクリプトからプロパティの値を変更したいのですが、このスクリプトが実際にプロパティを変更していることがわかりますが、Java コードでは古い値を取得しています。

何か案は?

4

3 に答える 3

13

Android の Java コードは、Java ライブラリに System.getProperty および System.setProperty 関数を提供しますが、これらの Java API は意味的にはネイティブ バージョンと同等ですが、Java バージョンはデータをまったく異なる場所に格納することに注意することが重要です。実際、dalvik VM はプロパティを格納するためにハッシュテーブルを使用します。そのため、Java プロパティは分離されており、ネイティブ プロパティを取得または設定することはできず、その逆もありません。

android.os.SystemProperties クラスを使用してネイティブ プロパティを操作できますが、これは内部使用のみを目的としています。プロパティを取得/設定するために、jni を介してネイティブ プロパティ ライブラリを呼び出します。

于 2013-06-05T16:11:50.093 に答える
1

そのスニペットを使用しgetPropてシェル コマンドとして実行し、任意のプロパティの値を取得できます。

private String getSystemProperty(String propertyName) {
    String propertyValue = "[UNKNOWN]";

    try {
        Process getPropProcess = Runtime.getRuntime().exec("getprop " + propertyName);

        BufferedReader osRes =
                new BufferedReader(new InputStreamReader(getPropProcess.getInputStream()));

        propertyValue = osRes.readLine();

        osRes.close();
    } catch (Exception e) {
        // Do nothing - can't get property value
    }

    return propertyValue;
}
于 2017-05-30T05:44:46.670 に答える