static List<File> load(Context context,ApplicationInfo applicationInfo,File dexDir,boolean forceReload) throws IOException {
  Log.i(TAG,"PatchDexExtractor.load(" + applicationInfo.sourceDir + ", "+ forceReload+ ")");
  final File sourceApk=new File(applicationInfo.sourceDir);
  long currentCrc=getZipCrc(sourceApk);
  List<File> files;
  if (!forceReload && !isModified(context,sourceApk,currentCrc)) {
    try {
      files=loadExistingExtractions(context,sourceApk,dexDir);
    }
 catch (    IOException ioe) {
      Log.w(TAG,"Failed to reload existing extracted secondary dex files," + " falling back to fresh extraction",ioe);
      files=performExtractions(sourceApk,dexDir);
      putStoredApkInfo(context,getTimeStamp(sourceApk),currentCrc,files.size() + 1);
    }
  }
 else {
    Log.i(TAG,"Detected that extraction must be performed.");
    files=performExtractions(sourceApk,dexDir);
    putStoredApkInfo(context,getTimeStamp(sourceApk),currentCrc,files.size() + 1);
  }
  Log.i(TAG,"load found " + files.size() + " secondary dex files");
  return files;
}

static List < File > load ( Context context , ApplicationInfo applicationInfo , File dexDir , boolean forceReload ) throws IOException { Log . i ( TAG , "PatchDexExtractor.load(" + applicationInfo . sourceDir + ", " + forceReload + ")" ) ; final File sourceApk = new File ( applicationInfo . sourceDir ) ; long currentCrc = getZipCrc ( sourceApk ) ; List < File > files ; if ( ! forceReload && ! isModified ( context , sourceApk , currentCrc ) ) { try { files = loadExistingExtractions ( context , sourceApk , dexDir ) ; } catch ( IOException ioe ) { Log . w ( TAG , "Failed to reload existing extracted secondary dex files," + " falling back to fresh extraction" , ioe ) ; files = performExtractions ( sourceApk , dexDir ) ; putStoredApkInfo ( context , getTimeStamp ( sourceApk ) , currentCrc , files . size ( ) + 1 ) ; } } else { Log . i ( TAG , "Detected that extraction must be performed." ) ; files = performExtractions ( sourceApk , dexDir ) ; putStoredApkInfo ( context , getTimeStamp ( sourceApk ) , currentCrc , files . size ( ) + 1 ) ; } Log . i ( TAG , "load found " + files . size ( ) + " secondary dex files" ) ; return files ; }
extracts application secondary dexes into files in the application data directory .
