2013-03-27 31 views
7

Tôi muốn nhận một dòng mã Java từ người dùng và thực thi nó trong Android. Ví dụ:Có thể thực thi chuỗi mã Java khi chạy trong Android không?

String strExecutable = " int var; var = 4 + 3" 
Object obj = aLibrary.eval(strExecutable); 

Đây không phải là tập lệnh java và tôi muốn chạy mã java.

Có thể không? Nếu có thì sao?

Tôi đã nghiên cứu các liên kết như this. Nhưng họ là những câu hỏi về JVM không phải là Android Dalvik.

+1

Android là hệ điều hành. Bạn tạo ứng dụng cho Android bằng cách sử dụng JAVA – Blackbelt

+0

@blackbelt Khi chúng tôi nói Android, chúng tôi thường có nghĩa là Dalvik và các thư viện của nó – breceivemail

+1

Tôi không chắc chắn về mã Java tùy ý, nhưng [câu hỏi này] (http://stackoverflow.com/questions/2226863/ whats-a-good-library-for-parsing-toán-biểu thức-trong-java) và [this this] (http://stackoverflow.com/questions/13747069/is-there-a-mathematical-expression-parsing- library-on-android) có vẻ tương tự, nếu các yêu cầu chỉ là toán học đơn giản. [MVEL] (http://mvel.codehaus.org) nên xử lý chuỗi ví dụ của bạn. – ig0774

Trả lời

1

Bạn có thể thử một cái gì đó như thế này:

// Code Execute, Khaled A Khunaifer, 27 March 2013 
class CodeExcute 
{ 
    public static void execute (String[] commands, String[] headers) 
    { 
     // build commands into new java file 
     try 
     { 
      FileWriter fstream = new FileWriter("Example.java"); 
      BufferedWriter out = new BufferedWriter(fstream); 

      out.write(""); 

      for (String header : headers) out.append(header); 

      out.append("class Example { public static void main(String args[]) { "); 

      for (String cmd : commands) out.append(cmd); 

      out.append(" } }"); 

      out.close(); 
     } 
     catch (Exception e) 
     { 
      System.err.println("Error: " + e.getMessage()); 
     } 

     // set path, compile, & run 
     try 
     { 
      Process tr = Runtime.getRuntime().exec(
       new String[]{ "java -cp .", 
        "javac Example.java", 
        "java Example" }); 
     } 
     catch (Exception e) 
     { 
      System.err.println("Error: " + e.getMessage()); 
     } 

    } 
} 
2

Bạn có thể thử BeanShell! Nó siêu dễ dàng và hoạt động trên Android. Chỉ cần xây dựng ứng dụng của bạn với thư viện jar.

import bsh.Interpreter; 
private void runString(String code){  
    Interpreter interpreter = new Interpreter(); 
    try { 
     interpreter.set("context", this);//set any variable, you can refer to it directly from string 
     interpreter.eval(code);//execute code 
    } 
    catch (Exception e){//handle exception 
     e.printStackTrace(); 
    } 
} 

Nhưng hãy cẩn thận! Sử dụng ứng dụng này trong ứng dụng sản xuất có thể là rủi ro bảo mật, đặc biệt nếu ứng dụng của bạn tương tác với dữ liệu/tệp của người dùng.

Các vấn đề liên quan