|
8 | 8 |
|
9 | 9 | import java.io.Serializable; |
10 | 10 | import java.lang.reflect.Constructor; |
| 11 | +import java.lang.reflect.Field; |
11 | 12 | import java.math.BigDecimal; |
12 | 13 | import java.math.BigInteger; |
13 | 14 | import java.math.MathContext; |
@@ -297,7 +298,7 @@ public static ScriptableObject initStandardObjects( |
297 | 298 |
|
298 | 299 | static String[] getTopPackageNames() { |
299 | 300 | // Include "android" top package if running on Android |
300 | | - return "Dalvik".equals(System.getProperty("java.vm.name")) |
| 301 | + return androidApi > 0 |
301 | 302 | ? new String[] {"java", "javax", "org", "com", "edu", "net", "android"} |
302 | 303 | : new String[] {"java", "javax", "org", "com", "edu", "net"}; |
303 | 304 | } |
@@ -6137,9 +6138,27 @@ public Object call(Context cx, Scriptable scope, Object[] args) { |
6137 | 6138 | } |
6138 | 6139 | } |
6139 | 6140 |
|
| 6141 | + private static int detectAndroidApi() { |
| 6142 | + |
| 6143 | + try { |
| 6144 | + Class<?> versionClass = Class.forName("android.os.Build$VERSION"); |
| 6145 | + Field sdkInt = versionClass.getField("SDK_INT"); |
| 6146 | + return sdkInt.getInt(null); |
| 6147 | + } catch (NoSuchFieldException | IllegalAccessException | ClassNotFoundException e) { |
| 6148 | + if ("Dalvik".equals(System.getProperty("java.vm.name"))) { |
| 6149 | + // Fall back to vm-name |
| 6150 | + return 1; |
| 6151 | + } |
| 6152 | + } |
| 6153 | + return -1; |
| 6154 | + } |
| 6155 | + |
6140 | 6156 | public static final Object[] emptyArgs = new Object[0]; |
6141 | 6157 | public static final String[] emptyStrings = new String[0]; |
6142 | 6158 |
|
6143 | 6159 | static final XMLLoader xmlLoaderImpl = |
6144 | 6160 | ScriptRuntime.loadOneServiceImplementation(XMLLoader.class); |
| 6161 | + |
| 6162 | + /** This value holds the current android API version (or -1) if not running on android */ |
| 6163 | + static final int androidApi = detectAndroidApi(); |
6145 | 6164 | } |
0 commit comments