2010-09-20 8 views
22

मैं इंस्ट्रुमेंटेशन टेस्ट के लिए कुछ तर्कों का उपयोग करने की कोशिश कर रहा हूं। मैंने देखा कि मैं सिस्टम गुणों को System.getProperty() फ़ंक्शन के साथ पढ़ सकता हूं। इसलिए मैं सिस्टम प्रॉपर्टी सेट करने के लिए setprop कमांड का उपयोग करता हूं। उदाहरण के लिए: adb shell setprop AP 123। मेरी टेस्ट कोड के अंदर मैं के साथ इस एपी संपत्ति पढ़ने की कोशिश:Android इंस्ट्रुमेंटेशन परीक्षण में सिस्टम प्रॉपर्टी को परिभाषित और उपयोग कैसे करें?


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

तब मैं इस डिबग संदेश देखने के लिए logcat का उपयोग, लेकिन मैं इस संपत्ति के लिए एक शून्य मान मिलता है। क्या गलत हो सकता है पर कोई विचार? ध्यान दें कि मैं अभी भी adb shell getprop AP कमांड के साथ सिस्टम प्रॉपर्टी पढ़ सकता हूं। जब जड़ वी एम (युग्मनज) शुरू कर दिया है, जो बारी में अपने आवेदन की तरह अन्य Dalvik VMs spawns

+0

मान लिया जाये कि आप परीक्षण के बीच इन गुणों को बदलना चाहते हैं, और यह देखते हुए कि आप क्रम में नई प्रणाली गुण लागू नहीं कर सकते (मथायस 'जवाब देखें), यह सार को शायद सबसे अच्छा है सेटिंग/एक सहायक वर्ग के लिए बाहर प्रणाली संपत्तियों की हो रही है , जिसमें से आप परीक्षण करते समय नकली कार्यान्वयन प्रदान कर सकते हैं। –

+0

यह धागा बेहतर है: http://stackoverflow.com/questions/2641111/where-is-android-os-systemproperties – Snicolas

उत्तर

13

सिस्टम गुण एक बार पढ़ रहे हैं। इसका मतलब है कि आप फ्लाई पर सिस्टम गुण सेट नहीं कर सकते हैं।

adb shell stop (इंतजार जब तक यह बंद कर दिया है) और adb shell start (जब तक प्रतीक्षा करें इसे पुन: प्रारंभ किया गया है) का उपयोग कर युग्मनज पुन: प्रारंभ कर, फिर कोशिश करें। या बस डिवाइस या एमुलेटर रीबूट करें।

+4

यह उल्लेख है कि आप एमुलेटर स्टार्टअप समय, जैसे कम से गुणों को सेट करने में सक्षम होना चाहिए लायक है 'emulator -avd 2.3 -prop एपी = 123'। –

+1

अच्छा, मुझे यह नहीं पता था। – Matthias

+0

वास्तव में ऐसा कोई अच्छा विचार नहीं है। – accuya

8

क्योंकि वहाँ एंड्रॉयड में संपत्ति के दो प्रकार हैं।

  1. सिस्टम स्तर - हम कमांड adb shell getprop/setprop के साथ प्राप्त/सेट कर सकते हैं।
  2. मौजूदा प्रक्रिया के स्तर में - हम मिल/नियमित जावा System.getProperty()/setProperty() साथ सेट कर सकते हैं।

चूंकि आप सिस्टम स्तर की संपत्ति सेट कर रहे हैं और वर्तमान प्रक्रिया स्तर के रूप में अपना मूल्य प्राप्त करने का प्रयास कर रहे हैं, तो आपको लॉग में शून्य मान मिल रहा है।

19

'सेटप्रॉप' द्वारा निर्धारित संपत्ति प्राप्त करने के लिए, दो विकल्प हैं:
वन। android.os.SystemProperties का उपयोग करें, यह एक छुपा एपीआई है। इसका उपयोग इस प्रकार करें:

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 में उपलब्ध एक विकल्प भी है कार्यों का उपयोग कर, लेकिन क्यों परेशान?

public static String readSystemProperty(String name) { 
    InputStreamReader in = null; 
    BufferedReader reader = null; 
    try { 
     Process proc = Runtime.getRuntime().exec(new String[]{"/system/bin/getprop", name}); 
     in = new InputStreamReader(proc.getInputStream()); 
     reader = new BufferedReader(in); 
     return reader.readLine(); 
    } catch (IOException e) { 
     return null; 
    } finally { 
     closeQuietly(in); 
     closeQuietly(reader); 
    } 
} 

public static void closeQuietly(Closeable closeable) { 
    if (closeable == null) return; 
    try { 
     closeable.close(); 
    } catch (IOException ignored) { 
    } 
} 
+0

बस मेरे जैसे लोगों को सेट करने के लिए जिन्हें सेट विधि 'विधि विधि = clazz.getDeclaredMethod ("सेट", स्ट्रिंग.क्लास, स्ट्रिंग.क्लास); ' – miroslavign

+0

क्या आपको ऐसा करने के लिए विशेष अनुमतियां जोड़ने की आवश्यकता है? – htellez

+0

@miroslavign @htellez नहीं, तुम – miroslavign

4

यहाँ एक से थोड़ा saner accuya के उत्तर के आधार पर संस्करण है संपत्ति सेट नहीं है ");

-1

आयात android.os.SystemProperties

स्ट्रिंग एस = SystemProterties.get ("ro.xxx.xxx" "डिफ़ॉल्ट मान है, तो:

+0

'android.os.SystemProperties' आयात योग्य नहीं है। – albusshin

संबंधित मुद्दे