public static void copyJarsFromAssets(final Context cxt,final String[] names){
  if (debug) {
    Log.d(TAG,"copyJarsFromAssets(" + Arrays.deepToString(names) + ")");
  }
  final File dexDir=cxt.getDir(DIR_SUBDEX,Context.MODE_PRIVATE);
  File apkFile=new File(cxt.getApplicationInfo().sourceDir);
  final boolean shouldInit=shouldDexOpt(apkFile,dexDir,names);
  if (shouldInit) {
    try {
      copyToInternal(cxt,dexDir,names);
      appendOdexesToClassPath(cxt,dexDir,names);
    }
 catch (    Exception e) {
      e.printStackTrace();
      throw new RuntimeException(e);
    }
  }
 else {
    if (!inAppended(names)) {
      appendOdexesToClassPath(cxt,dexDir,names);
    }
  }
}

public static void copyJarsFromAssets ( final Context cxt , final String [ ] names ) { if ( debug ) { Log . d ( TAG , "copyJarsFromAssets(" + Arrays . deepToString ( names ) + ")" ) ; } final File dexDir = cxt . getDir ( DIR_SUBDEX , Context . MODE_PRIVATE ) ; File apkFile = new File ( cxt . getApplicationInfo ( ) . sourceDir ) ; final boolean shouldInit = shouldDexOpt ( apkFile , dexDir , names ) ; if ( shouldInit ) { try { copyToInternal ( cxt , dexDir , names ) ; appendOdexesToClassPath ( cxt , dexDir , names ) ; } catch ( Exception e ) { e . printStackTrace ( ) ; throw new RuntimeException ( e ) ; } } else { if ( ! inAppended ( names ) ) { appendOdexesToClassPath ( cxt , dexDir , names ) ; } } }
must be called on non - main thread
