For those of you who don't know what JPL is - it's an API that connects java to SWI-Prolog. Now, I've read around the internet that SWI-Prolog isn't compatible with Android but it is with Linux, but the rest of the code is compatible with Android as no errors are being picked up from the Android IDE I've got on my phone, and no errors were picked up by Netbeans with the Android SDK.
My code is below:

Java Code:
package org.demo;
import android.os.Environment;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Hashtable;
import java.util.Scanner;
import jpl.Atom;
import jpl.Compound;
import jpl.JPL;
import jpl.Query;
import jpl.Term;
import jpl.Util;
import jpl.Variable;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.RegexFileFilter;
import org.apache.commons.io.filefilter.TrueFileFilter;

public class LanguageProcessor
{	
    Boolean truth = true;
    ArrayList<String> npt = new ArrayList<String>();
    ArrayList<ArrayList<String>> input = new ArrayList<ArrayList<String>>();
    ArrayList<Boolean> check;
    public LanguageProcessor(String user) // this constructor initializes the class by giving value to the class variable, and loading the knowledge base
    {
        check = new ArrayList<Boolean>();
    	//new queries are created to act as prolog queries inside the JVM by using the following syntax
    	JPL.init();
        String p = System.getProperty("user.dir");
        p+="/GAPT.pl";
    	Query q1 = new Query("consult", new Term [] {new Atom(p)});   
        System.out.println(q1.hasSolution() ?"Hello, " + user + ". How may I help you?" : "App could not be loaded"); 
        // where the 1st parameter of the Query/2 constructor is the type of prolog query, and the 2nd parameter is an array of all the terms used
    }
    
    public void NLPquery(String x) //this method checks if the query posted by the user is valid
    {
    	String[] y = x.split("[\n.] ");
        for (String y1 : y) 
        {
            npt.add(y1); //each one a sentence
        }
        //each sentence a list
        //for each, check number of words, make new list where each word is a new term
        for(int i = 0; i < npt.size(); i++)
        {
            String[] z = npt.get(i).split(" ");
            input.add(new ArrayList<String>());
            for (String z1 : z) 
            {
                input.get(i).add(z1);
            }
            String S = "[";
            for (int j = 0; j<input.get(i).size();j++)
            {
        	S+=input.get(i).get(j);
                if(j<input.get(i).size()-1)
                {
                    S+= ",";
                }
            }
            S+= "]";
            Query q2 = new Query("s(_,"+S+",[]).");
            check.add(q2.hasSolution());
        }  
        for(int i = 0; i<check.size();i++)
        {
            if(truth && check.get(i) == true)
            {
                truth = true;
            }
            else 
            {
                truth = false; i=check.size();
            }
        }        	
        if(truth == true)
        { 
        	//the query() method returns a boolean value based on the output of the query object instance created
        	// in this case, the JVM will be querying the GAPT.pl knowledge base if the input string is recognized by the grammar as a subset of "phr"
        	// in prolog query syntax, this would be: ?- phr(X,[]).
        	queryDecoder();
        }
        else response(false);
    }
    
    public void queryDecoder() //this method re-routes the program to the Handler of whatever kind of phrase was given by the user
    {
    	for(int i = 0; i < input.size(); i++)
    	{
            String[] S = new String[input.size()];
            Query q2 = new Query(new Compound("s", new Term[]{new Variable("X"),Util.stringArrayToList(input.get(i).toArray(S)),new Atom("[]")}));
            java.util.Hashtable solution;
            solution = q2.oneSolution();
            if(solution.get("X").toString().equals("command"))
            commandHandler(i);
            else if(solution.get("X").toString().equals("query"))
            questionHandler(i);
    	}
    }
    
    public void commandHandler(int i) 
    {
        //if calendar command update the database of the calendar
        //if search, look for the file with the specified name
        //if alarm, set an alarm with the given parameters
        String[] Y = new String[input.size()];
        Query q2 = new Query(new Compound("i", new Term[]{new Variable("X"),Util.stringArrayToList(input.get(i).toArray(Y)),new Atom("[]")}));
        java.util.Hashtable solution = q2.oneSolution();
        if(solution.get("X").toString().equals("event"))
        Calendar("Command",i);
        else if(solution.get("X").toString().equals("search"))
        Search(i);
        else if(solution.get("X").toString().equals("alarm"))
        Alarm(i);
    }
    
    public void questionHandler(int i)
    {
        //if map query pass control to map
        //if calendar query, query the calendar database and update if necessary
        //else query google
        String[] Y = new String[input.size()];
        Query q2 = new Query(new Compound("q", new Term[]{new Variable("X"),Util.stringArrayToList(input.get(i).toArray(Y)),new Atom("[]")}));
        java.util.Hashtable solution = q2.oneSolution();
        if(solution.get("X").toString().equals("dir"))
        Directions();
        else if(solution.get("X").toString().equals("time"))
        Calendar("Query",i);
    }
    
    public void Calendar(String y,int j)
    {
        //this method creates the parameters required for a calendar command or enquiry and calls a method to deal with them accordingly
        String action, time, day, month, etype,name;
        action = etype = time = day = month = name = null;
        for(int i = 0; i<input.get(j).size();i++)
        {
            Atom A = new Atom(input.get(j).get(i));
            Query q2 = new Query(new Compound("lex",new Term[]{A,new Variable("X")}));
            Hashtable<?, ?> solution = q2.oneSolution();
            if(solution.get("X").toString().equals("v(event)"))
            action = A.toString();
            else if(solution.get("X").toString().equals("n"))
            etype = A.toString();
            else if(solution.get("X").toString().equals("day"))
            day = A.toString();
            else if(solution.get("X").toString().equals("month"))
            month = A.toString();
            else if(solution.get("X").toString().equals("timeU"))
            time = A.toString();          
        }
        String date;
        Scanner sc = new Scanner(System.in);
        sc.useDelimiter("\n");
        System.out.println("Is there a location for the event?");
        String ans = sc.next();
        if("yes".equals(ans.toLowerCase()))
        {
            System.out.println("Where is the event?");
            name = sc.next();
        }
        else name = null;
        date = day + month;
        CalendarAction(action,etype,time,date,name,y);
    }
    
    public void Search(int j)
    {
        //this method creates the parameters necessary for a Search action (if needed by the application)
        String action, name;
        action = name = null;
        for(int i = 0; i<input.get(j).size();i++)
        {
            Atom A = new Atom(input.get(j).get(i));
            Query q2 = new Query(new Compound("lex",new Term[]{A,new Variable("X")}));
            Hashtable<?, ?> solution = q2.oneSolution();
            if(solution.get("X").toString().equals("v(search)"))
            action = input.get(j).get(i);
            else if(solution.get("X").toString().equals("n"))
            name = input.get(j).get(i);
        }
        Scanner sc = new Scanner(System.in);
        sc.useDelimiter("\n");
        System.out.println("What is the "+name+"'s name?");
        String filename = sc.next();
        SearchAction(action,filename,name);      
    }
    
    public void SearchAction(String action,String filename, String name)
    {
        String type = null;
        if("music".equals(name))
            type = ".mp3";
        else if("video".equals(name))
            type = ".mp4";
        else if("photo".equals(name))
            type = ".jpg";
        File file = null;
    	showFiles(type,action,filename,file);
    }

    public void showFiles(String type,String action, String filename,File file) 
    {
        Collection<File> files=null;
        if(file==null)
        {
            files = FileUtils.listFiles(
                    Environment.getExternalStorageDirectory(),
                    new RegexFileFilter(filename+type),
                    TrueFileFilter.TRUE);
        }

        else
        {
            files = FileUtils.listFiles(
                    file,
                    new RegexFileFilter(filename+type),
                    TrueFileFilter.TRUE);
        }
        for(File f : files)
        {
            try
            {
                if("delete".equals(action))
                f.delete();
                else if("find".equals(action))
                f.getPath();
                else if("open".equals(action))
                Runtime.getRuntime().exec(f.toString());
            }catch(IOException e)
            {System.out.println("File could not be loaded");}
        }
        
    }
      
    public void Alarm(int j)
    {
        //this method creates the parameters necessary to create an alarm
        String action, time, day, month;
        action = time = day = month = null;
        for(int i = 0; i<input.get(j).size();i++)
        {
            Atom A = new Atom(input.get(j).get(i));
            Query q2 = new Query(new Compound("lex",new Term[]{A,new Variable("X")}));
            java.util.Hashtable solution = q2.oneSolution();
            if(solution.get("X").toString().equals("v(alarm)"))
            action = A.toString();
            else if(solution.get("X").toString().equals("day"))
            day = A.toString();
            else if(solution.get("X").toString().equals("month"))
            month = A.toString();
            else if(solution.get("X").toString().equals("timeU"))
            time = A.toString();
        }
        String date = day + month;
        AlarmAction(action,time,date);
    }

    public void Directions()
    {

        //this method will create the parameters used in a map enquiry and call the method necessary
            Scanner sc = new Scanner(System.in); 
            sc.useDelimiter("\n");
            System.out.println("What is the name of the location you want to find?");
            String name = sc.next();
            Map(name);
    }
    
    public void CalendarAction(String action,String etype,String time,String date,String name,String y)
    {
    	response(true);
    	
    }
    
    public void AlarmAction(String action, String time, String date)
    {
    	response(true);
    }
    
    public void Map(String name)
    {
    	response(true);
    	
    }
    
    public void response(boolean x) //implement when everything else is done
    {
        //give user confirmation of query handling
        if(x== true) 
        	{
        		System.out.println("I was able to properly handle your command. Here is the result.");
        	}        
        // display result obtained                     
        else 
        	{
        		System.out.println("Sorry, no results could be found for the given command."); 
        	}
     }
}
What I've done is exported the entire project folder onto my android device and compiled it using AIDE, but when I run the program I get an error saying that the .apk built is crashing.
I have 3 questions:

1. My project had some build path settings set on my computer but not my android device, is the build path included in my project folder? i.e., if I've got a build path leading to a separate folder on my computer, but I didnt download that folder onto my android phone, would the essentials of that folder have been imported along with the project folder or would I need to do that myself and change the build settings of my device?
2. Are SWI-Prolog and JPL really incompatible with Android? What if I downloaded the LinuxOnAndroid software, would that make a difference and how much would it change my phone?
3. If neither of the two can actually work to fix this issue, is there any way I can fix my NLP software to create a knowledge base inside of java instead of connecting it to an SWI Prolog engine?