title: How do i set a reflection for android.os.systemproperties?
body: <p>So im trying to get this app to call android.os.SystemProperties from a reflection but its being kind of pain so if anyone could help it would be appreciated.</p>
  
  <p>so this is the part of the code that is failing me:</p>
  
  <pre><code>        String str1 = SystemPropertiesProxy.get("ro.url.changelog");
          String str2 = SystemPropertiesProxy.get("ro.build.incremental");
          String str4 = String.format("?version=%s", str2);
          Object[] arrayOfObject1 = new Object[2];
          arrayOfObject1[0] = str1;
          arrayOfObject1[1] = str4;
          String str5 = String.format("%s%s", arrayOfObject1);
          ...
          myWebView.loadUrl(str5);
  </code></pre>
  
  <p>the code above gives me the error: "The method get(Context, String) in the Type SystemPropertiesProxy is not applicable for the arguments(String)" in the line "String str1 = SystemPropertiesProxy.get("ro.url.changelog")"
  and this is the code for the reflection im trying to set to access android.os.SystemProperties:</p>
  
  <pre><code>package com.package.name;
  
  import java.io.File;  
  import java.lang.reflect.Method;
  import android.content.Context;
  import dalvik.system.DexFile;
  
  
  public class SystemPropertiesProxy
  {
  
  /**
   * This class cannot be instantiated
   */
  private SystemPropertiesProxy(){
  
  }
  
  /**
   * Get the value for the given key.
   * @return an empty string if the key isn't found
   * @throws IllegalArgumentException if the key exceeds 32 characters
   */
  public static String get(Context context, String key) throws IllegalArgumentException {
  
      String ret= "";
  
      try{
  
        ClassLoader cl = context.getClassLoader(); 
        @SuppressWarnings("rawtypes")
        Class SystemProperties = cl.loadClass("android.os.SystemProperties");
  
        //Parameters Types
        @SuppressWarnings("rawtypes")
        Class[] paramTypes= new Class[1];
        paramTypes[0]= String.class;
  
        Method get = SystemProperties.getMethod("get", paramTypes);
  
        //Parameters
        Object[] params= new Object[1];
        params[0]= new String(key);
  
        ret= (String) get.invoke(SystemProperties, params);
  
      }catch( IllegalArgumentException iAE ){
          throw iAE;
      }catch( Exception e ){
          ret= "";
          //TODO
      }
  
      return ret;
  
  }
  
  /**
   * Get the value for the given key.
   * @return if the key isn't found, return def if it isn't null, or an empty string otherwise
   * @throws IllegalArgumentException if the key exceeds 32 characters
   */
  public static String get(Context context, String key, String def) throws IllegalArgumentException {
  
      String ret= def;
  
      try{
  
        ClassLoader cl = context.getClassLoader(); 
        @SuppressWarnings("rawtypes")
        Class SystemProperties = cl.loadClass("android.os.SystemProperties");
  
        //Parameters Types
        @SuppressWarnings("rawtypes")
        Class[] paramTypes= new Class[2];
        paramTypes[0]= String.class;
        paramTypes[1]= String.class;          
  
        Method get = SystemProperties.getMethod("get", paramTypes);
  
        //Parameters
        Object[] params= new Object[2];
        params[0]= new String(key);
        params[1]= new String(def);
  
        ret= (String) get.invoke(SystemProperties, params);
  
      }catch( IllegalArgumentException iAE ){
          throw iAE;
      }catch( Exception e ){
          ret= def;
          //TODO
      }
  
      return ret;
  
  }
  
  /**
   * Get the value for the given key, and return as an integer.
   * @param key the key to lookup
   * @param def a default value to return
   * @return the key parsed as an integer, or def if the key isn't found or
   *         cannot be parsed
   * @throws IllegalArgumentException if the key exceeds 32 characters
   */
  public static Integer getInt(Context context, String key, int def) throws IllegalArgumentException {
  
      Integer ret= def;
  
      try{
  
        ClassLoader cl = context.getClassLoader(); 
        @SuppressWarnings("rawtypes")
        Class SystemProperties = cl.loadClass("android.os.SystemProperties");
  
        //Parameters Types
        @SuppressWarnings("rawtypes")
        Class[] paramTypes= new Class[2];
        paramTypes[0]= String.class;
        paramTypes[1]= int.class;  
  
        Method getInt = SystemProperties.getMethod("getInt", paramTypes);
  
        //Parameters
        Object[] params= new Object[2];
        params[0]= new String(key);
        params[1]= new Integer(def);
  
        ret= (Integer) getInt.invoke(SystemProperties, params);
  
      }catch( IllegalArgumentException iAE ){
          throw iAE;
      }catch( Exception e ){
          ret= def;
          //TODO
      }
  
      return ret;
  
  }
  
  /**
   * Get the value for the given key, and return as a long.
   * @param key the key to lookup
   * @param def a default value to return
   * @return the key parsed as a long, or def if the key isn't found or
   *         cannot be parsed
   * @throws IllegalArgumentException if the key exceeds 32 characters
   */
  public static Long getLong(Context context, String key, long def) throws IllegalArgumentException {
  
      Long ret= def;
  
      try{
  
        ClassLoader cl = context.getClassLoader();
        @SuppressWarnings("rawtypes")
        Class SystemProperties= cl.loadClass("android.os.SystemProperties");
  
        //Parameters Types
        @SuppressWarnings("rawtypes")
        Class[] paramTypes= new Class[2];
        paramTypes[0]= String.class;
        paramTypes[1]= long.class;  
  
        Method getLong = SystemProperties.getMethod("getLong", paramTypes);
  
        //Parameters
        Object[] params= new Object[2];
        params[0]= new String(key);
        params[1]= new Long(def);
  
        ret= (Long) getLong.invoke(SystemProperties, params);
  
      }catch( IllegalArgumentException iAE ){
          throw iAE;
      }catch( Exception e ){
          ret= def;
          //TODO
      }
  
      return ret;
  
  }
  
  /**
   * Get the value for the given key, returned as a boolean.
   * Values 'n', 'no', '0', 'false' or 'off' are considered false.
   * Values 'y', 'yes', '1', 'true' or 'on' are considered true.
   * (case insensitive).
   * If the key does not exist, or has any other value, then the default
   * result is returned.
   * @param key the key to lookup
   * @param def a default value to return
   * @return the key parsed as a boolean, or def if the key isn't found or is
   *         not able to be parsed as a boolean.
   * @throws IllegalArgumentException if the key exceeds 32 characters
   */
  public static Boolean getBoolean(Context context, String key, boolean def) throws IllegalArgumentException {
  
      Boolean ret= def;
  
      try{
  
        ClassLoader cl = context.getClassLoader(); 
        @SuppressWarnings("rawtypes")
        Class SystemProperties = cl.loadClass("android.os.SystemProperties");
  
        //Parameters Types
        @SuppressWarnings("rawtypes")
        Class[] paramTypes= new Class[2];
        paramTypes[0]= String.class;
        paramTypes[1]= boolean.class;  
  
        Method getBoolean = SystemProperties.getMethod("getBoolean", paramTypes);
  
        //Parameters         
        Object[] params= new Object[2];
        params[0]= new String(key);
        params[1]= new Boolean(def);
  
        ret= (Boolean) getBoolean.invoke(SystemProperties, params);
  
      }catch( IllegalArgumentException iAE ){
          throw iAE;
      }catch( Exception e ){
          ret= def;
          //TODO
      }
  
      return ret;
  
  }
  
  /**
   * Set the value for the given key.
   * @throws IllegalArgumentException if the key exceeds 32 characters
   * @throws IllegalArgumentException if the value exceeds 92 characters
   */
  public static void set(Context context, String key, String val) throws IllegalArgumentException {
  
      try{
  
        @SuppressWarnings("unused")
        DexFile df = new DexFile(new File("/system/app/Settings.apk"));
        @SuppressWarnings("unused")
        ClassLoader cl = context.getClassLoader(); 
        @SuppressWarnings("rawtypes")
        Class SystemProperties = Class.forName("android.os.SystemProperties");
  
        //Parameters Types
        @SuppressWarnings("rawtypes")
        Class[] paramTypes= new Class[2];
        paramTypes[0]= String.class;
        paramTypes[1]= String.class;  
  
        Method set = SystemProperties.getMethod("set", paramTypes);
  
        //Parameters         
        Object[] params= new Object[2];
        params[0]= new String(key);
        params[1]= new String(val);
  
        set.invoke(SystemProperties, params);
  
      }
      catch( IllegalArgumentException iAE ){
          throw iAE;
      }
      catch( Exception e ){
          //TODO
      }
  
  }
  }
  </code></pre>
  
  <p>Again any help would be appreciated. Thanks.</p>