Better default checking if VM is android
This commit is contained in:
parent
64143d85f5
commit
dac1c9588b
@ -19,11 +19,11 @@ import java.io.File;
|
||||
import java.io.ObjectInputStream;
|
||||
import java.io.ObjectOutputStream;
|
||||
import java.nio.charset.Charset;
|
||||
import java.security.AccessController;
|
||||
import java.security.PrivilegedAction;
|
||||
import java.util.Locale;
|
||||
import java.util.TimeZone;
|
||||
|
||||
import io.netty.util.internal.SystemPropertyUtil;
|
||||
|
||||
|
||||
public
|
||||
class OS {
|
||||
@ -77,27 +77,11 @@ class OS {
|
||||
osArch = osArch.toLowerCase(Locale.US);
|
||||
|
||||
if (osName.startsWith("linux")) {
|
||||
// best way to determine if it's android or not
|
||||
boolean isAndroid;
|
||||
try {
|
||||
ClassLoader systemClassLoader;
|
||||
if (System.getSecurityManager() == null) {
|
||||
systemClassLoader = ClassLoader.getSystemClassLoader();
|
||||
}
|
||||
else {
|
||||
systemClassLoader = AccessController.doPrivileged(new PrivilegedAction<ClassLoader>() {
|
||||
@Override
|
||||
public
|
||||
ClassLoader run() {
|
||||
return ClassLoader.getSystemClassLoader();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Class.forName("android.app.Application", false, systemClassLoader);
|
||||
isAndroid = true;
|
||||
} catch (ClassNotFoundException e) { isAndroid = false; }
|
||||
// best way to determine if it's android.
|
||||
// Sometimes java binaries include Android classes on the classpath, even if it isn't actually Android, so we check the VM
|
||||
|
||||
String vmName = SystemPropertyUtil.get("java.vm.name");
|
||||
boolean isAndroid = "Dalvik".equals(vmName);
|
||||
|
||||
if (isAndroid) {
|
||||
// android check from https://stackoverflow.com/questions/14859954/android-os-arch-output-for-arm-mips-x86
|
||||
|
Loading…
Reference in New Issue
Block a user