package com.lody.virtual.client.env; import android.content.pm.ApplicationInfo; import android.os.Build; import android.os.Handler; import android.os.Looper; import android.os.Process; import android.os.RemoteException; import com.lody.virtual.client.core.VirtualCore; import com.lody.virtual.helper.utils.VLog; import mirror.android.ddm.DdmHandleAppName; import mirror.android.ddm.DdmHandleAppNameJBMR1; /** * @author Lody * <p> * <p/> * Runtime Environment for App. */ public class VirtualRuntime { private static final Handler sUIHandler = new Handler(Looper.getMainLooper()); private static String sInitialPackageName; private static String sProcessName; public static Handler getUIHandler() { return sUIHandler; } public static String getProcessName() { return sProcessName; } public static String getInitialPackageName() { return sInitialPackageName; } public static void setupRuntime(String processName, ApplicationInfo appInfo) { if (sProcessName != null) { return; } sInitialPackageName = appInfo.packageName; sProcessName = processName; mirror.android.os.Process.setArgV0.call(processName); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { DdmHandleAppNameJBMR1.setAppName.call(processName, 0); } else { DdmHandleAppName.setAppName.call(processName); } } public static <T> T crash(RemoteException e) throws RuntimeException { e.printStackTrace(); if (VirtualCore.get().isVAppProcess()) { Process.killProcess(Process.myPid()); System.exit(0); } throw new DeadServerException(e); } public static boolean isArt() { return System.getProperty("java.vm.version").startsWith("2"); } }