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