forked from I2P_Developers/i2p.i2p
* SystemVersion: New util, to consolidate duplicate code,
and determine Java version on Android
This commit is contained in:
@ -19,6 +19,7 @@ import java.util.Locale;
|
||||
|
||||
import net.i2p.I2PAppContext;
|
||||
import net.i2p.util.FileUtil;
|
||||
import net.i2p.util.SystemVersion;
|
||||
|
||||
|
||||
/**
|
||||
@ -50,15 +51,15 @@ public class CPUID {
|
||||
|
||||
private static final boolean isX86 = System.getProperty("os.arch").contains("86") ||
|
||||
System.getProperty("os.arch").equals("amd64");
|
||||
private static final String libPrefix = (System.getProperty("os.name").startsWith("Win") ? "" : "lib");
|
||||
private static final String libSuffix = (System.getProperty("os.name").startsWith("Win") ? ".dll" : ".so");
|
||||
private static final boolean isWindows = System.getProperty("os.name").toLowerCase(Locale.US).contains("windows");
|
||||
private static final boolean isWindows = SystemVersion.isWindows();
|
||||
private static final String libPrefix = isWindows ? "" : "lib";
|
||||
private static final String libSuffix = isWindows ? ".dll" : ".so";
|
||||
private static final boolean isLinux = System.getProperty("os.name").toLowerCase(Locale.US).contains("linux");
|
||||
private static final boolean isFreebsd = System.getProperty("os.name").toLowerCase(Locale.US).contains("freebsd");
|
||||
private static final boolean isNetbsd = System.getProperty("os.name").toLowerCase(Locale.US).contains("netbsd");
|
||||
private static final boolean isOpenbsd = System.getProperty("os.name").toLowerCase(Locale.US).contains("openbsd");
|
||||
private static final boolean isSunos = System.getProperty("os.name").toLowerCase(Locale.US).contains("sunos");
|
||||
private static final boolean isMac = System.getProperty("os.name").startsWith("Mac");
|
||||
private static final boolean isMac = SystemVersion.isMac();
|
||||
|
||||
|
||||
/**
|
||||
@ -71,8 +72,7 @@ public class CPUID {
|
||||
* sun.arch.data.model == 32 => A 32 bit JVM but could be either 32 or 64 bit processor or libs
|
||||
* os.arch contains "64" could be 32 or 64 bit libs
|
||||
*/
|
||||
private static final boolean is64 = "64".equals(System.getProperty("sun.arch.data.model")) ||
|
||||
System.getProperty("os.arch").contains("64");
|
||||
private static final boolean is64 = SystemVersion.is64Bit();
|
||||
|
||||
static
|
||||
{
|
||||
|
@ -15,8 +15,7 @@ import java.io.PipedInputStream;
|
||||
*/
|
||||
public class BigPipedInputStream extends PipedInputStream {
|
||||
|
||||
private static final boolean oneDotSix =
|
||||
(new VersionComparator()).compare(System.getProperty("java.version"), "1.6") >= 0;
|
||||
private static final boolean oneDotSix = SystemVersion.isJava6();
|
||||
|
||||
private static final int PIPE_SIZE = 64*1024;
|
||||
|
||||
|
@ -452,7 +452,7 @@ public class FileUtil {
|
||||
if (!from.exists())
|
||||
return false;
|
||||
boolean success = false;
|
||||
boolean isWindows = System.getProperty("os.name").startsWith("Win");
|
||||
boolean isWindows = SystemVersion.isWindows();
|
||||
// overwrite fails on windows
|
||||
if (!isWindows)
|
||||
success = from.renameTo(to);
|
||||
|
@ -158,15 +158,15 @@ public class NativeBigInteger extends BigInteger {
|
||||
/**
|
||||
* Operating systems
|
||||
*/
|
||||
private static final boolean _isWin = System.getProperty("os.name").startsWith("Win");
|
||||
private static final boolean _isWin = SystemVersion.isWindows();
|
||||
private static final boolean _isOS2 = System.getProperty("os.name").startsWith("OS/2");
|
||||
private static final boolean _isMac = System.getProperty("os.name").startsWith("Mac");
|
||||
private static final boolean _isMac = SystemVersion.isMac();
|
||||
private static final boolean _isLinux = System.getProperty("os.name").toLowerCase(Locale.US).contains("linux");
|
||||
private static final boolean _isFreebsd = System.getProperty("os.name").toLowerCase(Locale.US).contains("freebsd");
|
||||
private static final boolean _isNetbsd = System.getProperty("os.name").toLowerCase(Locale.US).contains("netbsd");
|
||||
private static final boolean _isOpenbsd = System.getProperty("os.name").toLowerCase(Locale.US).contains("openbsd");
|
||||
private static final boolean _isSunos = System.getProperty("os.name").toLowerCase(Locale.US).contains("sunos");
|
||||
private static final boolean _isAndroid = System.getProperty("java.vendor").contains("Android");
|
||||
private static final boolean _isAndroid = SystemVersion.isAndroid();
|
||||
|
||||
/*
|
||||
* This isn't always correct.
|
||||
@ -178,8 +178,7 @@ public class NativeBigInteger extends BigInteger {
|
||||
* sun.arch.data.model == 32 => A 32 bit JVM but could be either 32 or 64 bit processor or libs
|
||||
* os.arch contains "64" could be 32 or 64 bit libs
|
||||
*/
|
||||
private static final boolean _is64 = "64".equals(System.getProperty("sun.arch.data.model")) ||
|
||||
System.getProperty("os.arch").contains("64");
|
||||
private static final boolean _is64 = SystemVersion.is64Bit();
|
||||
|
||||
private static final boolean _isX86 = System.getProperty("os.arch").contains("86") ||
|
||||
System.getProperty("os.arch").equals("amd64");
|
||||
|
@ -10,7 +10,7 @@ public class ReusableGZIPInputStream extends ResettableGZIPInputStream {
|
||||
// Apache Harmony 5.0M13 Deflater doesn't work after reset()
|
||||
// Neither does Android
|
||||
private static final boolean ENABLE_CACHING = !(System.getProperty("java.vendor").startsWith("Apache") ||
|
||||
System.getProperty("java.vendor").contains("Android"));
|
||||
SystemVersion.isAndroid());
|
||||
private static final LinkedBlockingQueue<ReusableGZIPInputStream> _available;
|
||||
static {
|
||||
if (ENABLE_CACHING)
|
||||
|
@ -21,7 +21,7 @@ public class ReusableGZIPOutputStream extends ResettableGZIPOutputStream {
|
||||
// Apache Harmony 5.0M13 Deflater doesn't work after reset()
|
||||
// Neither does Android
|
||||
private static final boolean ENABLE_CACHING = !(System.getProperty("java.vendor").startsWith("Apache") ||
|
||||
System.getProperty("java.vendor").contains("Android"));
|
||||
SystemVersion.isAndroid());
|
||||
private static final LinkedBlockingQueue<ReusableGZIPOutputStream> _available;
|
||||
static {
|
||||
if (ENABLE_CACHING)
|
||||
|
@ -91,7 +91,7 @@ public class SSLEepGet extends EepGet {
|
||||
/** may be null if init failed */
|
||||
private SavingTrustManager _stm;
|
||||
|
||||
private static final boolean _isAndroid = System.getProperty("java.vendor").contains("Android");
|
||||
private static final boolean _isAndroid = SystemVersion.isAndroid();
|
||||
|
||||
/**
|
||||
* A new SSLEepGet with a new SSLState
|
||||
|
@ -12,7 +12,7 @@ import java.io.File;
|
||||
*/
|
||||
public class SecureDirectory extends File {
|
||||
|
||||
protected static final boolean isNotWindows = !System.getProperty("os.name").startsWith("Win");
|
||||
protected static final boolean isNotWindows = !SystemVersion.isWindows();
|
||||
|
||||
public SecureDirectory(String pathname) {
|
||||
super(pathname);
|
||||
|
@ -15,8 +15,7 @@ import net.i2p.I2PAppContext;
|
||||
*/
|
||||
public class SecureFileOutputStream extends FileOutputStream {
|
||||
|
||||
private static final boolean oneDotSix =
|
||||
(new VersionComparator()).compare(System.getProperty("java.version"), "1.6") >= 0;
|
||||
private static final boolean oneDotSix = SystemVersion.isJava6();
|
||||
|
||||
/**
|
||||
* Sets output file to mode 600
|
||||
|
87
core/java/src/net/i2p/util/SystemVersion.java
Normal file
87
core/java/src/net/i2p/util/SystemVersion.java
Normal file
@ -0,0 +1,87 @@
|
||||
package net.i2p.util;
|
||||
|
||||
/*
|
||||
* public domain
|
||||
*/
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
|
||||
/**
|
||||
* Methods to find out what system we are running on
|
||||
*
|
||||
* @since 0.9.3 consolidated from various places
|
||||
*/
|
||||
public abstract class SystemVersion {
|
||||
|
||||
private static final boolean _isWin = System.getProperty("os.name").startsWith("Win");
|
||||
private static final boolean _isMac = System.getProperty("os.name").startsWith("Mac");
|
||||
private static final boolean _isAndroid = System.getProperty("java.vendor").contains("Android");
|
||||
private static final boolean _is64 = "64".equals(System.getProperty("sun.arch.data.model")) ||
|
||||
System.getProperty("os.arch").contains("64");
|
||||
|
||||
private static final boolean _oneDotSix;
|
||||
private static final int _androidSDK;
|
||||
|
||||
static {
|
||||
int sdk = 0;
|
||||
if (_isAndroid) {
|
||||
try {
|
||||
Class ver = Class.forName("android.os.Build.VERSION", true, ClassLoader.getSystemClassLoader());
|
||||
Field field = ver.getField("SDK_INT");
|
||||
sdk = field.getInt(null);
|
||||
} catch (Exception e) {}
|
||||
}
|
||||
_androidSDK = sdk;
|
||||
|
||||
if (_isAndroid) {
|
||||
_oneDotSix = _androidSDK >= 9;
|
||||
} else {
|
||||
_oneDotSix = (new VersionComparator()).compare(System.getProperty("java.version"), "1.6") >= 0;
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean isWindows() {
|
||||
return _isWin;
|
||||
}
|
||||
|
||||
public static boolean isMac() {
|
||||
return _isMac;
|
||||
}
|
||||
|
||||
public static boolean isAndroid() {
|
||||
return _isAndroid;
|
||||
}
|
||||
|
||||
/**
|
||||
* Better than (new VersionComparator()).compare(System.getProperty("java.version"), "1.6") >= 0
|
||||
* as it handles Android also, where java.version = "0".
|
||||
*
|
||||
* @return true if Java 1.6 or higher, or Android API 9 or higher
|
||||
*/
|
||||
public static boolean isJava6() {
|
||||
return _oneDotSix;
|
||||
}
|
||||
|
||||
/**
|
||||
* This isn't always correct.
|
||||
* http://stackoverflow.com/questions/807263/how-do-i-detect-which-kind-of-jre-is-installed-32bit-vs-64bit
|
||||
* http://mark.koli.ch/2009/10/javas-osarch-system-property-is-the-bitness-of-the-jre-not-the-operating-system.html
|
||||
* http://mark.koli.ch/2009/10/reliably-checking-os-bitness-32-or-64-bit-on-windows-with-a-tiny-c-app.html
|
||||
* sun.arch.data.model not on all JVMs
|
||||
* sun.arch.data.model == 64 => 64 bit processor
|
||||
* sun.arch.data.model == 32 => A 32 bit JVM but could be either 32 or 64 bit processor or libs
|
||||
* os.arch contains "64" could be 32 or 64 bit libs
|
||||
*/
|
||||
public static boolean is64Bit() {
|
||||
return _is64;
|
||||
}
|
||||
|
||||
/**
|
||||
* Identical to android.os.Build.VERSION.SDK_INT.
|
||||
* For use outside of Android code.
|
||||
* @return The SDK (API) version, e.g. 8 for Froyo, 0 if unknown
|
||||
*/
|
||||
public static int getAndroidVersion() {
|
||||
return _androidSDK;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user