/* * Copyright (C) 2010 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.dexgen.util; import dalvik.system.DexClassLoader; /** * Class used indirectly for loading generated dex classes. It allows the caller * to obtain appropriate {@code DexClassLoader} instance, which can be then used for * loading classes. */ public class DexClassLoaderHelper { private static class DexClassLoaderHelperHolder { private static final DexClassLoaderHelper INSTANCE = new DexClassLoaderHelper(); } private DexClassLoaderHelper() { // intentionally empty to disable direct instantiation } /** * Returns the sole instance of {@code DexClassLoaderHelper}. * * @return dex {@code DexClassLoaderHelper} sole instance */ public static DexClassLoaderHelper getInstance() { return DexClassLoaderHelperHolder.INSTANCE; } /** * Creates and returns DexClassLoader instance with its classpath * set to {@code pathHolder}. * * @param pathHolder {@code non-null;} location of jar archive containing dex * classes canned into a working PathHolder instance. * @return dex class loader instance with its classpath set to location * indicated by {@code pathHolder} */ public ClassLoader getDexClassLoader(PathHolder pathHolder) { ClassLoader myLoader = DexClassLoaderHelper.class.getClassLoader(); return new DexClassLoader(pathHolder.getJarFilePath(), pathHolder.getDirLocation(), null, myLoader); } }