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