use of dalvik.system.DexClassLoader in project android-classyshark by google.
the class DexLoaderBuilder method fromBytes.
public static DexClassLoader fromBytes(Context context, final byte[] dexBytes) throws Exception {
if (null == context) {
throw new RuntimeException("No context provided");
}
String dexFileName = "internal.dex";
final File dexInternalStoragePath = new File(context.getDir("dex", Context.MODE_PRIVATE), dexFileName);
if (!dexInternalStoragePath.exists()) {
prepareDex(dexBytes, dexInternalStoragePath);
}
final File optimizedDexOutputPath = context.getCodeCacheDir();
DexClassLoader loader = new DexClassLoader(dexInternalStoragePath.getAbsolutePath(), optimizedDexOutputPath.getAbsolutePath(), null, context.getClassLoader().getParent());
dexInternalStoragePath.delete();
return loader;
}
use of dalvik.system.DexClassLoader in project cw-omnibus by commonsguy.
the class ThingsLoaderThunk method loadThunk.
private void loadThunk() throws ClassNotFoundException, IllegalAccessException, InstantiationException {
DexClassLoader dcl = new DexClassLoader(apkPath.getAbsolutePath(), cachePath.getAbsolutePath(), null, getClass().getClassLoader());
Class<ThingsLoader> clazz = (Class<ThingsLoader>) dcl.loadClass(classname);
extImpl = clazz.newInstance();
}
use of dalvik.system.DexClassLoader in project buck by facebook.
the class SystemClassLoaderAdder method installDexJars.
/**
* Installs a list of .dex.jar files into the application class loader.
*
* @param appClassLoader The application ClassLoader, which can be retrieved by calling
* {@code getClassLoader} on the application Context.
* @param optimizedDirectory Directory for storing optimized dex files.
* @param dexJars The list of .dex.jar files to load.
*/
static void installDexJars(ClassLoader appClassLoader, File optimizedDirectory, List<File> dexJars) {
SystemClassLoaderAdder classLoaderAdder = new SystemClassLoaderAdder();
for (File dexJar : dexJars) {
DexClassLoader newClassLoader = new DexClassLoader(dexJar.getAbsolutePath(), optimizedDirectory.getAbsolutePath(), null, appClassLoader);
classLoaderAdder.addPathsOfClassLoaderToSystemClassLoader(newClassLoader, (PathClassLoader) appClassLoader);
}
}
use of dalvik.system.DexClassLoader in project android_frameworks_base by ParanoidAndroid.
the class PhoneWindowManager method init.
/** {@inheritDoc} */
@Override
public void init(Context context, IWindowManager windowManager, WindowManagerFuncs windowManagerFuncs) {
mContext = context;
mWindowManager = windowManager;
mWindowManagerFuncs = windowManagerFuncs;
mHeadless = "1".equals(SystemProperties.get("ro.config.headless", "0"));
if (!mHeadless) {
// don't create KeyguardViewMediator if headless
mKeyguardMediator = new KeyguardViewMediator(context, null);
}
mHandler = new PolicyHandler();
mOrientationListener = new MyOrientationListener(mContext, mHandler);
try {
mOrientationListener.setCurrentRotation(windowManager.getRotation());
} catch (RemoteException ex) {
}
updateHybridLayout();
mSettingsObserver = new SettingsObserver(mHandler);
mSettingsObserver.observe();
// SystemUI reboot
mContext.getContentResolver().registerContentObserver(Settings.System.getUriFor(Settings.System.USER_INTERFACE_STATE), false, new ContentObserver(new Handler()) {
@Override
public void onChange(boolean selfChange) {
// Return for reset triggers
if (Settings.System.getInt(mContext.getContentResolver(), Settings.System.USER_INTERFACE_STATE, 0) == 0) {
return;
}
// Update layout
update(true);
// Reset trigger
Settings.System.putInt(mContext.getContentResolver(), Settings.System.USER_INTERFACE_STATE, 0);
}
});
// Expanded desktop
mContext.getContentResolver().registerContentObserver(Settings.System.getUriFor(Settings.System.EXPANDED_DESKTOP_STATE), false, new ContentObserver(new Handler()) {
@Override
public void onChange(boolean selfChange) {
updateHybridLayout();
update(false);
}
});
mShortcutManager = new ShortcutManager(context, mHandler);
mShortcutManager.observe();
mUiMode = context.getResources().getInteger(com.android.internal.R.integer.config_defaultUiModeType);
mHomeIntent = new Intent(Intent.ACTION_MAIN, null);
mHomeIntent.addCategory(Intent.CATEGORY_HOME);
mHomeIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
mCarDockIntent = new Intent(Intent.ACTION_MAIN, null);
mCarDockIntent.addCategory(Intent.CATEGORY_CAR_DOCK);
mCarDockIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
mDeskDockIntent = new Intent(Intent.ACTION_MAIN, null);
mDeskDockIntent.addCategory(Intent.CATEGORY_DESK_DOCK);
mDeskDockIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
mPowerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
mBroadcastWakeLock = mPowerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "PhoneWindowManager.mBroadcastWakeLock");
mEnableShiftMenuBugReports = "1".equals(SystemProperties.get("ro.debuggable"));
mLidOpenRotation = readRotation(com.android.internal.R.integer.config_lidOpenRotation);
mCarDockRotation = readRotation(com.android.internal.R.integer.config_carDockRotation);
mDeskDockRotation = readRotation(com.android.internal.R.integer.config_deskDockRotation);
mUndockedHdmiRotation = readRotation(com.android.internal.R.integer.config_undockedHdmiRotation);
mCarDockEnablesAccelerometer = mContext.getResources().getBoolean(com.android.internal.R.bool.config_carDockEnablesAccelerometer);
mDeskDockEnablesAccelerometer = mContext.getResources().getBoolean(com.android.internal.R.bool.config_deskDockEnablesAccelerometer);
mLidKeyboardAccessibility = mContext.getResources().getInteger(com.android.internal.R.integer.config_lidKeyboardAccessibility);
mLidNavigationAccessibility = mContext.getResources().getInteger(com.android.internal.R.integer.config_lidNavigationAccessibility);
mLidControlsSleep = mContext.getResources().getBoolean(com.android.internal.R.bool.config_lidControlsSleep);
mHasRemovableLid = mContext.getResources().getBoolean(com.android.internal.R.bool.config_hasRemovableLid);
mDeviceHardwareKeys = mContext.getResources().getInteger(com.android.internal.R.integer.config_deviceHardwareKeys);
mHasHomeKey = ((mDeviceHardwareKeys & KEY_MASK_HOME) != 0);
mHasMenuKey = ((mDeviceHardwareKeys & KEY_MASK_MENU) != 0);
mHasAssistKey = ((mDeviceHardwareKeys & KEY_MASK_ASSIST) != 0);
mHasAppSwitchKey = ((mDeviceHardwareKeys & KEY_MASK_APP_SWITCH) != 0);
// register for dock events
IntentFilter filter = new IntentFilter();
filter.addAction(UiModeManager.ACTION_ENTER_CAR_MODE);
filter.addAction(UiModeManager.ACTION_EXIT_CAR_MODE);
filter.addAction(UiModeManager.ACTION_ENTER_DESK_MODE);
filter.addAction(UiModeManager.ACTION_EXIT_DESK_MODE);
filter.addAction(Intent.ACTION_DOCK_EVENT);
Intent intent = context.registerReceiver(mDockReceiver, filter);
if (intent != null) {
// Retrieve current sticky dock event broadcast.
mDockMode = intent.getIntExtra(Intent.EXTRA_DOCK_STATE, Intent.EXTRA_DOCK_STATE_UNDOCKED);
}
// register for dream-related broadcasts
filter = new IntentFilter();
filter.addAction(Intent.ACTION_DREAMING_STARTED);
filter.addAction(Intent.ACTION_DREAMING_STOPPED);
context.registerReceiver(mDreamReceiver, filter);
// register for multiuser-relevant broadcasts
filter = new IntentFilter(Intent.ACTION_USER_SWITCHED);
context.registerReceiver(mMultiuserReceiver, filter);
mVibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
mLongPressVibePattern = getLongIntArray(mContext.getResources(), com.android.internal.R.array.config_longPressVibePattern);
mVirtualKeyVibePattern = getLongIntArray(mContext.getResources(), com.android.internal.R.array.config_virtualKeyVibePattern);
mKeyboardTapVibePattern = getLongIntArray(mContext.getResources(), com.android.internal.R.array.config_keyboardTapVibePattern);
mSafeModeDisabledVibePattern = getLongIntArray(mContext.getResources(), com.android.internal.R.array.config_safeModeDisabledVibePattern);
mSafeModeEnabledVibePattern = getLongIntArray(mContext.getResources(), com.android.internal.R.array.config_safeModeEnabledVibePattern);
mScreenshotChordEnabled = mContext.getResources().getBoolean(com.android.internal.R.bool.config_enableScreenshotChord);
mGlobalKeyManager = new GlobalKeyManager(mContext);
// Controls rotation and the like.
initializeHdmiState();
// Match current screen state.
if (mPowerManager.isScreenOn()) {
screenTurningOn(null);
} else {
screenTurnedOff(WindowManagerPolicy.OFF_BECAUSE_OF_USER);
}
String deviceKeyHandlerLib = mContext.getResources().getString(com.android.internal.R.string.config_deviceKeyHandlerLib);
String deviceKeyHandlerClass = mContext.getResources().getString(com.android.internal.R.string.config_deviceKeyHandlerClass);
if (!deviceKeyHandlerLib.equals("") && !deviceKeyHandlerClass.equals("")) {
DexClassLoader loader = new DexClassLoader(deviceKeyHandlerLib, new ContextWrapper(mContext).getCacheDir().getAbsolutePath(), null, ClassLoader.getSystemClassLoader());
try {
Class<?> klass = loader.loadClass(deviceKeyHandlerClass);
Constructor<?> constructor = klass.getConstructor(Context.class);
mDeviceKeyHandler = (DeviceKeyHandler) constructor.newInstance(mContext);
if (DEBUG)
Slog.d(TAG, "Device key handler loaded");
} catch (Exception e) {
Slog.w(TAG, "Could not instantiate device key handler " + deviceKeyHandlerClass + " from class " + deviceKeyHandlerLib, e);
}
}
}
use of dalvik.system.DexClassLoader in project freeline by alibaba.
the class NativeUtils method injectHackNativeLib.
public static void injectHackNativeLib(String libraryDir, PathClassLoader classLoader) {
try {
Log.i(TAG, "native lib inject process start...");
String refFieldName = "nativeLibraryPathElements";
if (Build.VERSION.SDK_INT < 23) {
refFieldName = "nativeLibraryDirectories";
}
Object pathListObject = ReflectUtil.getField(classLoader, "pathList");
Object nativeLibraryPathElementsObject = ReflectUtil.getField(pathListObject, refFieldName);
Field nativeLibraryPathElementsFiled = ReflectUtil.fieldGetOrg(pathListObject, refFieldName);
DexClassLoader dumbDexClassLoader = new DexClassLoader("", libraryDir, libraryDir, classLoader.getParent());
Object dynamicNativeLibraryPathElements = ReflectUtil.getField(ReflectUtil.getField(dumbDexClassLoader, "pathList"), refFieldName);
Object dynamicNativeLibraryPathElement = Array.get(dynamicNativeLibraryPathElements, 0);
int lengthOfNewNativeLibraryPathElements = Array.getLength(nativeLibraryPathElementsObject) + 1;
Object newNativeLibraryPathElements = Array.newInstance(nativeLibraryPathElementsFiled.getType().getComponentType(), lengthOfNewNativeLibraryPathElements);
Array.set(newNativeLibraryPathElements, 0, dynamicNativeLibraryPathElement);
for (int i = 1; i < lengthOfNewNativeLibraryPathElements; i++) {
Object object = Array.get(nativeLibraryPathElementsObject, i - 1);
Array.set(newNativeLibraryPathElements, i, object);
}
ReflectUtil.setField(pathListObject, refFieldName, newNativeLibraryPathElements);
Log.i(TAG, "inject native lib success " + newNativeLibraryPathElements);
} catch (Exception ex) {
Log.e(TAG, "inject native lib failed", ex);
}
}
Aggregations