aboutsummaryrefslogtreecommitdiffstats
path: root/src/java/com/jogamp/common/os
diff options
context:
space:
mode:
authorSven Gothel <[email protected]>2011-07-24 11:37:45 +0200
committerSven Gothel <[email protected]>2011-07-24 11:37:45 +0200
commit869c49c22573147c94b1e6d931c2cff696a54a47 (patch)
tree882779724e74c324de714bbc6f8c2f88e5492862 /src/java/com/jogamp/common/os
parent9f45b6f09cbce6c7889e099939656356befa585d (diff)
Android integration / cross-test ; Enhance Platform
- android minor build fix - started dex'ing (gluegen-rt.apk, more to come for full junit tests) - android remote dalvikvm launch works (crosstest-java-android-armv7-rel.sh) - android detection, incl version (reflection) - Platform: - Add JAVA_VM_NAME and JAVA_VM_RUNIME - OSType maybe ANDROID, where the OS name (String) is Linux ! (ok ?)
Diffstat (limited to 'src/java/com/jogamp/common/os')
-rw-r--r--src/java/com/jogamp/common/os/AndroidVersion.java97
-rw-r--r--src/java/com/jogamp/common/os/Platform.java37
2 files changed, 128 insertions, 6 deletions
diff --git a/src/java/com/jogamp/common/os/AndroidVersion.java b/src/java/com/jogamp/common/os/AndroidVersion.java
new file mode 100644
index 0000000..b5a7cfa
--- /dev/null
+++ b/src/java/com/jogamp/common/os/AndroidVersion.java
@@ -0,0 +1,97 @@
+package com.jogamp.common.os;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.util.HashMap;
+import java.util.Map;
+
+import com.jogamp.common.util.ReflectionUtil;
+
+public class AndroidVersion {
+ public static final boolean isAvailable;
+
+ /** All SDK version map, where SDK_INT is the key to the current running version */
+ public static final Map<Integer, String> VERSION_CODES;
+
+ /** Development codename, or the string "REL" for official release */
+ public static final String CODENAME;
+
+ /** internal build value used by the underlying source control. */
+ public static final String INCREMENTAL;
+
+ /** official build version string */
+ public static final String RELEASE;
+
+ /** SDK Version number, key to VERSION_CODES */
+ public static final int SDK_INT;
+
+ /** SDK Version string */
+ public static final String SDK_NAME;
+
+ static final String androidBuildVersion = "android.os.Build$VERSION";
+ static final String androidBuildVersionCodes = "android.os.Build$VERSION_CODES";
+
+ static {
+ final ClassLoader cl = AndroidVersion.class.getClassLoader();
+ Class abvClass = null;
+ Object abvObject= null;
+ Class abvcClass = null;
+ Object abvcObject= null;
+ try {
+ abvClass = ReflectionUtil.getClass(androidBuildVersion, true, cl);
+ abvObject = abvClass.newInstance();
+ abvcClass = ReflectionUtil.getClass(androidBuildVersionCodes, true, cl);
+ abvcObject = abvcClass.newInstance();
+ } catch (Exception e) { e.printStackTrace(); /* n/a */ }
+ isAvailable = null != abvObject ;
+ if(isAvailable) {
+ CODENAME = getString(abvClass, abvObject, "CODENAME");
+ INCREMENTAL = getString(abvClass, abvObject, "INCREMENTAL");
+ RELEASE = getString(abvClass, abvObject, "RELEASE");
+ SDK_INT = getInt(abvClass, abvObject, "SDK_INT");
+ VERSION_CODES = getVersionCodes(abvcClass, abvcObject);
+ String sdk_name = VERSION_CODES.get(new Integer(SDK_INT));
+ SDK_NAME = ( null != sdk_name ) ? sdk_name : "SDK_"+SDK_INT ;
+ } else {
+ CODENAME = null;
+ INCREMENTAL = null;
+ RELEASE = null;
+ SDK_INT = -1;
+ VERSION_CODES = new HashMap<Integer, String>();
+ SDK_NAME = null;
+ }
+ }
+
+ private static final Map<Integer, String> getVersionCodes(Class cls, Object obj) {
+ HashMap<Integer, String> map = new HashMap<Integer, String>();
+ Field[] fields = cls.getFields();
+ for(int i=0; i<fields.length; i++) {
+ try {
+ final int version = fields[i].getInt(obj);
+ final String version_name = fields[i].getName();
+ // System.err.println(i+": "+version+": "+version_name);
+ map.put(new Integer(version), version_name);
+ } catch (Exception e) { e.printStackTrace(); /* n/a */ }
+ }
+ return map;
+ }
+
+ private static final String getString(Class cls, Object obj, String name) {
+ try {
+ Field f = cls.getField(name);
+ return (String) f.get(obj);
+ } catch (Exception e) { e.printStackTrace(); /* n/a */ }
+ return null;
+ }
+
+ private static final int getInt(Class cls, Object obj, String name) {
+ try {
+ Field f = cls.getField(name);
+ return f.getInt(obj);
+ } catch (Exception e) { e.printStackTrace(); /* n/a */ }
+ return -1;
+ }
+
+ // android.os.Build.VERSION
+}
diff --git a/src/java/com/jogamp/common/os/Platform.java b/src/java/com/jogamp/common/os/Platform.java
index 4db5b09..6c23f07 100644
--- a/src/java/com/jogamp/common/os/Platform.java
+++ b/src/java/com/jogamp/common/os/Platform.java
@@ -54,6 +54,8 @@ public class Platform {
public static final String ARCH_lower;
public static final String JAVA_VENDOR;
public static final String JAVA_VENDOR_URL;
+ public static final String JAVA_VM_NAME;
+ public static final String JAVA_RUNTIME_NAME;
public static final String JAVA_VERSION;
public static final String NEWLINE;
@@ -142,7 +144,8 @@ public class Platform {
JAVA_VENDOR_URL = System.getProperty("java.vendor.url");
JAVA_VERSION = System.getProperty("java.version");
NEWLINE = System.getProperty("line.separator");
-
+ JAVA_VM_NAME = System.getProperty("java.vm.name");
+ JAVA_RUNTIME_NAME = getJavaRuntimeNameImpl();
JAVA_SE = initIsJavaSE();
LITTLE_ENDIAN = queryIsLittleEndianImpl();
@@ -227,6 +230,9 @@ public class Platform {
}
private static OSType getOSTypeImpl() throws RuntimeException {
+ if ( AndroidVersion.isAvailable ) {
+ return OSType.ANDROID;
+ }
if ( OS_lower.startsWith("linux") ) {
return OSType.LINUX;
}
@@ -254,15 +260,18 @@ public class Platform {
}
throw new RuntimeException("Please port OS detection to your platform (" + OS_lower + "/" + ARCH_lower + ")");
}
-
- private static boolean initIsJavaSE() {
+
+ private static String getJavaRuntimeNameImpl() {
// the fast path, check property Java SE instead of traversing through the ClassLoader
- String java_runtime_name = (String) AccessController.doPrivileged(new PrivilegedAction() {
+ return (String) AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
return System.getProperty("java.runtime.name");
}
});
- if(java_runtime_name.indexOf("Java SE") != -1) {
+ }
+
+ private static boolean initIsJavaSE() {
+ if(JAVA_RUNTIME_NAME.indexOf("Java SE") != -1) {
return true;
}
@@ -294,8 +303,9 @@ public class Platform {
/**
* Returns the OS name.
+ * <p>In case of {@link OSType#ANDROID}, see {@link #getOSType()}, the OS name is Linux</p>
*/
- public static String getOS() {
+ public static String getOSName() {
return OS;
}
@@ -316,6 +326,7 @@ public class Platform {
/**
* Returns the OS type.
+ * <p>In case of {@link OSType#ANDROID} the OS name, see {@link #getOSName()}, is Linux</p>
*/
public static OSType getOSType() {
return OS_TYPE;
@@ -343,6 +354,20 @@ public class Platform {
}
/**
+ * Returns the JAVA VM name.
+ */
+ public static String getJavaVMName() {
+ return JAVA_VM_NAME;
+ }
+
+ /**
+ * Returns the JAVA runtime name.
+ */
+ public static String getJavaRuntimeName() {
+ return JAVA_RUNTIME_NAME;
+ }
+
+ /**
* Returns the JAVA vendor url.
*/
public static String getJavaVendorURL() {