63    private static final String androidBuild = 
"android.os.Build";
 
   64    private static final String androidBuildVersion = 
"android.os.Build$VERSION";
 
   65    private static final String androidBuildVersionCodes = 
"android.os.Build$VERSION_CODES";
 
   69        Class<?> abClass = 
null;
 
   70        Object abObject= 
null;
 
   71        Class<?> abvClass = 
null;
 
   72        Object abvObject= 
null;
 
   73        Class<?> abvcClass = 
null;
 
   74        Object abvcObject= 
null;
 
   76        final boolean isDalvikVm = 
"Dalvik".equals(System.getProperty(
"java.vm.name"));
 
   81              abObject = abClass.getDeclaredConstructor().newInstance();
 
   83              abvObject = abvClass.getDeclaredConstructor().newInstance();
 
   85              abvcObject = abvcClass.getDeclaredConstructor().newInstance();
 
   86          } 
catch (
final Exception e) {  }
 
   88        isAvailable = isDalvikVm && 
null != abObject && 
null != abvObject;
 
   90            CPU_ABI_NAME = getString(abClass, abObject, 
"CPU_ABI", 
true);
 
   91            CPU_ABI2_NAME = getString(abClass, abObject, 
"CPU_ABI2", 
true);
 
   92            CODENAME = getString(abvClass, abvObject, 
"CODENAME", 
false);
 
   93            INCREMENTAL = getString(abvClass, abvObject, 
"INCREMENTAL", 
false);
 
   94            RELEASE = getString(abvClass, abvObject, 
"RELEASE", 
false);
 
   95            SDK_INT = getInt(abvClass, abvObject, 
"SDK_INT");
 
   96            final String sdk_name;
 
   97            if( 
null != abvcObject ) {
 
   98                final HashMap<Integer, String> version_codes = getVersionCodes(abvcClass, abvcObject);
 
   99                sdk_name = version_codes.get(
SDK_INT);
 
  142    private static final HashMap<Integer, String> getVersionCodes(
final Class<?> cls, 
final Object obj) {
 
  143        final Field[] fields = cls.getFields();
 
  144        final HashMap<Integer, String> map = 
new HashMap<Integer, String>( 3 * fields.length / 2, 0.75f );
 
  145        for(
int i=0; i<fields.length; i++) {
 
  147                final int version = fields[i].getInt(obj);
 
  148                final String version_name = fields[i].getName();
 
  150                map.put(Integer.valueOf(version), version_name);
 
  151            } 
catch (
final Exception e) { e.printStackTrace();  }
 
  156    private static final String getString(
final Class<?> cls, 
final Object obj, 
final String name, 
final boolean lowerCase) {
 
  158            final Field f = cls.getField(name);
 
  159            final String s = (String) f.get(obj);
 
  160            if( lowerCase && 
null != s ) {
 
  161                return s.toLowerCase();
 
  165        } 
catch (
final Exception e) { e.printStackTrace();  }
 
  169    private static final int getInt(
final Class<?> cls, 
final Object obj, 
final String name) {
 
  171            final Field f = cls.getField(name);
 
  172            return f.getInt(obj);
 
  173        } 
catch (
final Exception e) { e.printStackTrace();  }