private void dexLibs() throws Exception {
    int percent = 20;

    for (File jarLib : S.dirLibs.listFiles()) {

      // skip native libs in sub directories
      if (!jarLib.isFile() || !jarLib.getName().endsWith(".jar")) {
        continue;
      }

      // compare hash of jar contents to name of dexed version
      String md5 = Util.getMD5Checksum(jarLib);

      // check if jar is pre-dexed
      File dexLib = new File(S.dirDexedLibs, jarLib.getName().replace(".jar", "-" + md5 + ".jar"));
      System.out.println(dexLib.getName());
      if (!dexLib.exists()) {
        com.android.dx.command.dexer.Main.main(
            new String[] {"--verbose", "--output=" + dexLib.getPath(), jarLib.getPath()});
      }

      percent += 1;
      if (setProgress(percent)) {
        return;
      }
    }
  }
 private void dexClasses() throws Exception {
   com.android.dx.command.dexer.Main.main(
       new String[] {"--verbose", "--output=" + S.dexClasses.getPath(), S.dirClasses.getPath()});
 }