1 /*
2  * Copyright (C) 2008 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package dalvik.system;
18 
19 import java.io.File;
20 
21 /**
22  * A class loader that loads classes from {@code .jar} and {@code .apk} files
23  * containing a {@code classes.dex} entry. This can be used to execute code not
24  * installed as part of an application.
25  *
26  * <p>This class loader requires an application-private, writable directory to
27  * cache optimized classes. Use {@code Context.getCodeCacheDir()} to create
28  * such a directory: <pre>   {@code
29  *   File dexOutputDir = context.getCodeCacheDir();
30  * }</pre>
31  *
32  * <p><strong>Do not cache optimized classes on external storage.</strong>
33  * External storage does not provide access controls necessary to protect your
34  * application from code injection attacks.
35  */
36 public class DexClassLoader extends BaseDexClassLoader {
37     /**
38      * Creates a {@code DexClassLoader} that finds interpreted and native
39      * code.  Interpreted classes are found in a set of DEX files contained
40      * in Jar or APK files.
41      *
42      * <p>The path lists are separated using the character specified by the
43      * {@code path.separator} system property, which defaults to {@code :}.
44      *
45      * @param dexPath the list of jar/apk files containing classes and
46      *     resources, delimited by {@code File.pathSeparator}, which
47      *     defaults to {@code ":"} on Android
48      * @param optimizedDirectory directory where optimized dex files
49      *     should be written; must not be {@code null}
50      * @param librarySearchPath the list of directories containing native
51      *     libraries, delimited by {@code File.pathSeparator}; may be
52      *     {@code null}
53      * @param parent the parent class loader
54      */
DexClassLoader(String dexPath, String optimizedDirectory, String librarySearchPath, ClassLoader parent)55     public DexClassLoader(String dexPath, String optimizedDirectory,
56             String librarySearchPath, ClassLoader parent) {
57         super(dexPath, new File(optimizedDirectory), librarySearchPath, parent);
58     }
59 }
60