private void copyResourcesToLocal() {
    String name, sFileName;
    InputStream content;

    R.raw a = new R.raw();
    java.lang.reflect.Field[] t = R.raw.class.getFields();
    Resources resources = getResources();

    boolean succeed = true;

    for (int i = 0; i < t.length; i++) {
      try {
        name = resources.getText(t[i].getInt(a)).toString();
        sFileName = name.substring(name.lastIndexOf('/') + 1, name.length());
        content = getResources().openRawResource(t[i].getInt(a));
        content.reset();

        // perl project
        if (sFileName.endsWith(GlobalConstants.PERL_PROJECT_ZIP_NAME)) {
          succeed &= Utils.unzip(content, this.getFilesDir().getAbsolutePath() + "/", true);
        }
        // perl -> /data/data/com.android.perl/files/perl
        else if (sFileName.endsWith(GlobalConstants.PERL_ZIP_NAME)) {
          succeed &= Utils.unzip(content, this.getFilesDir().getAbsolutePath() + "/", true);
          FileUtils.chmod(new File(this.getFilesDir().getAbsolutePath() + "/perl/perl"), 0755);
        }
        // perl extras -> /sdcard/com.android.perl/perl/site-perl
        else if (sFileName.endsWith(GlobalConstants.PERL_EXTRAS_ZIP_NAME)) {
          Utils.createDirectoryOnExternalStorage(this.getPackageName() + "/" + "extras");
          Utils.createDirectoryOnExternalStorage(
              this.getPackageName() + "/" + "extras" + "/" + "tmp");
          succeed &=
              Utils.unzip(
                  content,
                  Environment.getExternalStorageDirectory().getAbsolutePath()
                      + "/"
                      + this.getPackageName()
                      + "/extras/",
                  true);
        }

      } catch (Exception e) {
        Log.e(GlobalConstants.LOG_TAG, "Failed to copyResourcesToLocal", e);
        succeed = false;
      }
    } // end for all files in res/raw
  }
 private void createOurExternalStorageRootDir() {
   Utils.createDirectoryOnExternalStorage(this.getPackageName());
 }