title: Run Time Error: FATAL EXCEPTION: main java.lang.ExceptionInInitializerError
body: <p>Hi am new to Android App development and i was trying to implement a simple OCR App found here: <a href="https://github.com/GautamGupta/Simple-Android-OCR" rel="nofollow">https://github.com/GautamGupta/Simple-Android-OCR</a>
  Am using android studio, i found some errors that had to do with permission which i fixed but now i am getting this error:</p>
  
  <pre><code>03-31 20:07:55.010      822-822/com.example.zakaria.myapp E/AndroidRuntime﹕ FATAL EXCEPTION: main
      java.lang.ExceptionInInitializerError
              at engenoid.tessocrtest.MainActivity.onPhotoTaken(MainActivity.java:210)
              at engenoid.tessocrtest.MainActivity.onActivityResult(MainActivity.java:134)
              at android.app.Activity.dispatchActivityResult(Activity.java:5515)
              at android.app.ActivityThread.deliverResults(ActivityThread.java:3429)
              at android.app.ActivityThread.handleSendResult(ActivityThread.java:3476)
              at android.app.ActivityThread.access$1200(ActivityThread.java:157)
              at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1337)
              at android.os.Handler.dispatchMessage(Handler.java:99)
              at android.os.Looper.loop(Looper.java:176)
              at android.app.ActivityThread.main(ActivityThread.java:5317)
              at java.lang.reflect.Method.invokeNative(Native Method)
              at java.lang.reflect.Method.invoke(Method.java:511)
              at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
              at dalvik.system.NativeStart.main(Native Method)
       Caused by: java.lang.UnsatisfiedLinkError: Couldn't load lept from loader dalvik.system.PathClassLoader[dexPath=/data/app/com.example.zakaria.myapp-10.apk,libraryPath=/data/app-lib/com.example.zakaria.myapp-10]: findLibrary returned null
              at java.lang.Runtime.loadLibrary(Runtime.java:365)
              at java.lang.System.loadLibrary(System.java:535)
              at com.googlecode.tesseract.android.TessBaseAPI.&lt;clinit&gt;(TessBaseAPI.java:44)
              at engenoid.tessocrtest.MainActivity.onPhotoTaken(MainActivity.java:210)
              at engenoid.tessocrtest.MainActivity.onActivityResult(MainActivity.java:134)
              at android.app.Activity.dispatchActivityResult(Activity.java:5515)
              at android.app.ActivityThread.deliverResults(ActivityThread.java:3429)
              at android.app.ActivityThread.handleSendResult(ActivityThread.java:3476)
              at android.app.ActivityThread.access$1200(ActivityThread.java:157)
              at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1337)
              at android.os.Handler.dispatchMessage(Handler.java:99)
              at android.os.Looper.loop(Looper.java:176)
              at android.app.ActivityThread.main(ActivityThread.java:5317)
              at java.lang.reflect.Method.invokeNative(Native Method)
              at java.lang.reflect.Method.invoke(Method.java:511)
              at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
              at dalvik.system.NativeStart.main(Native Method)
  </code></pre>
  
  <p>Here is the main Activity:</p>
  
  <pre><code>package engenoid.tessocrtest;
  
  import android.app.Activity;
  import android.content.Intent;
  import android.content.res.AssetManager;
  import android.graphics.Bitmap;
  import android.graphics.BitmapFactory;
  import android.graphics.Matrix;
  import android.media.ExifInterface;
  import android.net.Uri;
  import android.os.Bundle;
  import android.os.Environment;
  import android.provider.MediaStore;
  import android.util.Log;
  import android.view.View;
  import android.widget.Button;
  import android.widget.EditText;
  
  import com.example.zakaria.myapp.R;
  import com.googlecode.tesseract.android.TessBaseAPI;
  
  import java.io.File;
  import java.io.FileOutputStream;
  import java.io.IOException;
  import java.io.InputStream;
  import java.io.OutputStream;
  
  public class MainActivity extends Activity {
      public static final String PACKAGE_NAME = "com.datumdroid.android.ocr.simple";
      public static final String DATA_PATH = Environment
              .getExternalStorageDirectory().toString() + "/SimpleAndroidOCR/";
  
      // You should have the trained data file in assets folder
      // You can get them at:
      // http://code.google.com/p/tesseract-ocr/downloads/list
      public static final String lang = "eng";
  
      private static final String TAG = "SimpleAndroidOCR.java";
  
      protected Button _button;
      // protected ImageView _image;
      protected EditText _field;
      protected String _path;
      protected boolean _taken;
  
      protected static final String PHOTO_TAKEN = "photo_taken";
  
      @Override
      public void onCreate(Bundle savedInstanceState) {
  
          String[] paths = new String[] { DATA_PATH, DATA_PATH + "tessdata/" };
  
          for (String path : paths) {
              File dir = new File(path);
              if (!dir.exists()) {
                  if (!dir.mkdirs()) {
                      Log.v(TAG, "ERROR: Creation of directory " + path + " on sdcard failed");
                      return;
                  } else {
                      Log.v(TAG, "Created directory " + path + " on sdcard");
                  }
              }
  
          }
  
          // lang.traineddata file with the app (in assets folder)
          // You can get them at:
          // http://code.google.com/p/tesseract-ocr/downloads/list
          // This area needs work and optimization
          if (!(new File(DATA_PATH + "tessdata/" + lang + ".traineddata")).exists()) {
              try {
  
                  AssetManager assetManager = getAssets();
                  InputStream in = assetManager.open("tessdata/" + lang + ".traineddata");
                  //GZIPInputStream gin = new GZIPInputStream(in);
                  OutputStream out = new FileOutputStream(DATA_PATH
                          + "tessdata/" + lang + ".traineddata");
  
                  // Transfer bytes from in to out
                  byte[] buf = new byte[1024];
                  int len;
                  //while ((lenf = gin.read(buff)) &gt; 0) {
                  while ((len = in.read(buf)) &gt; 0) {
                      out.write(buf, 0, len);
                  }
                  in.close();
                  //gin.close();
                  out.close();
  
                  Log.v(TAG, "Copied " + lang + " traineddata");
              } catch (IOException e) {
                  Log.e(TAG, "Was unable to copy " + lang + " traineddata " + e.toString());
              }
          }
  
          super.onCreate(savedInstanceState);
  
          setContentView(R.layout.main);
  
          // _image = (ImageView) findViewById(R.id.image);
          _field = (EditText) findViewById(R.id.field);
          _button = (Button) findViewById(R.id.button);
          _button.setOnClickListener(new ButtonClickHandler());
  
          _path = DATA_PATH + "/ocr.jpg";
      }
  
      public class ButtonClickHandler implements View.OnClickListener {
          public void onClick(View view) {
              Log.v(TAG, "Starting Camera app");
              startCameraActivity();
          }
      }
  
      // Simple android photo capture:
      // http://labs.makemachine.net/2010/03/simple-android-photo-capture/
  
      protected void startCameraActivity() {
          File file = new File(_path);
          Uri outputFileUri = Uri.fromFile(file);
  
          final Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
          intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
  
          startActivityForResult(intent, 0);
      }
  
      @Override
      protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  
          Log.i(TAG, "resultCode: " + resultCode);
  
          if (resultCode == -1) {
              onPhotoTaken();
          } else {
              Log.v(TAG, "User cancelled");
          }
      }
  
      @Override
      protected void onSaveInstanceState(Bundle outState) {
          outState.putBoolean(MainActivity.PHOTO_TAKEN, _taken);
      }
  
      @Override
      protected void onRestoreInstanceState(Bundle savedInstanceState) {
          Log.i(TAG, "onRestoreInstanceState()");
          if (savedInstanceState.getBoolean(MainActivity.PHOTO_TAKEN)) {
              onPhotoTaken();
          }
      }
  
      protected void onPhotoTaken() {
          _taken = true;
  
          BitmapFactory.Options options = new BitmapFactory.Options();
          options.inSampleSize = 4;
  
          Bitmap bitmap = BitmapFactory.decodeFile(_path, options);
  
          try {
              ExifInterface exif = new ExifInterface(_path);
              int exifOrientation = exif.getAttributeInt(
                      ExifInterface.TAG_ORIENTATION,
                      ExifInterface.ORIENTATION_NORMAL);
  
              Log.v(TAG, "Orient: " + exifOrientation);
  
              int rotate = 0;
  
              switch (exifOrientation) {
                  case ExifInterface.ORIENTATION_ROTATE_90:
                      rotate = 90;
                      break;
                  case ExifInterface.ORIENTATION_ROTATE_180:
                      rotate = 180;
                      break;
                  case ExifInterface.ORIENTATION_ROTATE_270:
                      rotate = 270;
                      break;
              }
  
              Log.v(TAG, "Rotation: " + rotate);
  
              if (rotate != 0) {
  
                  // Getting width &amp; height of the given image.
                  int w = bitmap.getWidth();
                  int h = bitmap.getHeight();
  
                  // Setting pre rotate
                  Matrix mtx = new Matrix();
                  mtx.preRotate(rotate);
  
                  // Rotating Bitmap
                  bitmap = Bitmap.createBitmap(bitmap, 0, 0, w, h, mtx, false);
              }
  
              // Convert to ARGB_8888, required by tess
              bitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true);
  
          } catch (IOException e) {
              Log.e(TAG, "Couldn't correct orientation: " + e.toString());
          }
  
          // _image.setImageBitmap( bitmap );
  
          Log.v(TAG, "Before baseApi");
  
          TessBaseAPI baseApi = new TessBaseAPI();
          baseApi.setDebug(true);
          baseApi.init(DATA_PATH, lang);
          baseApi.setImage(bitmap);
  
          String recognizedText = baseApi.getUTF8Text();
  
          baseApi.end();
  
          // You now have the text in recognizedText var, you can do anything with it.
          // We will display a stripped out trimmed alpha-numeric version of it (if lang is eng)
          // so that garbage doesn't make it to the display.
  
          Log.v(TAG, "OCRED TEXT: " + recognizedText);
  
          if ( lang.equalsIgnoreCase("eng") ) {
              recognizedText = recognizedText.replaceAll("[^a-zA-Z0-9]+", " ");
          }
  
          recognizedText = recognizedText.trim();
  
          if ( recognizedText.length() != 0 ) {
              _field.setText(_field.getText().toString().length() == 0 ? recognizedText : _field.getText() + " " + recognizedText);
              _field.setSelection(_field.getText().toString().length());
          }
  
  
      }
  
  }
  </code></pre>
  
  <p>And this is the manifest</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt;
  &lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.example.zakaria.myapp" &gt;
  
  
  
      &lt;uses-permission android:name="android.permission.CAMERA"/&gt;
      &lt;uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /&gt;
      &lt;uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /&gt;
      &lt;uses-feature android:name="android.hardware.camera.autofocus" /&gt;
      &lt;uses-feature
          android:name="android.hardware.camera.flash"
          android:required="false" /&gt;
      &lt;uses-feature android:name="android.hardware.camera" /&gt;
  
      &lt;application
          android:allowBackup="true"
          android:icon="@mipmap/ic_launcher"
          android:label="@string/app_name"
          android:theme="@style/AppTheme"&gt;
          &lt;activity
              android:name="engenoid.tessocrtest.MainActivity"
              android:label="@string/app_name" &gt;
              &lt;intent-filter&gt;
                  &lt;action android:name="android.intent.action.MAIN" /&gt;
  
                  &lt;category android:name="android.intent.category.LAUNCHER" /&gt;
              &lt;/intent-filter&gt;
          &lt;/activity&gt;
      &lt;/application&gt;
  
  &lt;/manifest&gt;
  </code></pre>
  
  <p>So if i need to post any thing else please tell me and thanks in advance!</p>