Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to define and use a system property in Android Instrumentation test?

Tags:

I am trying to use some arguments for an Instrumentation test. I noticed that I can read system properties with System.getProperty() function. So I use setprop command to set a system property. For example: adb shell setprop AP 123. Inside my Test code I try to read this AP property with :

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

Then I use logcat to view this debug message but I get a null value for this property. Any ideas on what could be wrong? Note that I can still read the system property with adb shell getprop AP command.

like image 627
Michalis Avatar asked Sep 20 '10 09:09

Michalis


People also ask

What is setprop in Android?

The setprop and getprop commands are used to access the data in that database. Unless the property name starts with persist. - then the value gets stored in /data/property folder. Follow this answer to receive notifications.


1 Answers

To get the property set by 'setprop', there are two options:
One. use android.os.SystemProperties, this is a hide API. use it like this:

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  + ">"); 

Two. use 'getprop' utility:

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()); 

Maybe using functions availble in NDK is an option too, but why bother?

like image 64
accuya Avatar answered Nov 08 '22 12:11

accuya