Home | History | Annotate | Download | only in interpreter
      1 /*
      2  * Copyright (C) 2016 Google Inc.
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
      5  * use this file except in compliance with the License. You may obtain a copy of
      6  * 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, WITHOUT
     12  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
     13  * License for the specific language governing permissions and limitations under
     14  * the License.
     15  */
     16 
     17 package com.googlecode.android_scripting.interpreter;
     18 
     19 import dalvik.system.DexClassLoader;
     20 
     21 import java.util.Collection;
     22 import java.util.Iterator;
     23 
     24 public class ExternalClassLoader {
     25 
     26   public Object load(Collection<String> dexPaths, Collection<String> nativePaths, String className)
     27       throws Exception {
     28     String dexOutputDir = "/sdcard/dexoutput";
     29     String joinedDexPaths = join(dexPaths, ":");
     30     String joinedNativeLibPaths = nativePaths != null ? join(nativePaths, ":") : null;
     31     DexClassLoader loader =
     32         new DexClassLoader(joinedDexPaths, dexOutputDir, joinedNativeLibPaths, this.getClass()
     33             .getClassLoader());
     34     Class<?> classToLoad = Class.forName(className, true, loader);
     35     return classToLoad.newInstance();
     36   }
     37 
     38     private static String join(Collection<String> collection, String delimiter) {
     39         StringBuffer buffer = new StringBuffer();
     40         Iterator<String> iter = collection.iterator();
     41         while (iter.hasNext()) {
     42             buffer.append(iter.next());
     43             if (iter.hasNext()) {
     44                 buffer.append(delimiter);
     45             }
     46         }
     47         return buffer.toString();
     48     }
     49 }