最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【未解决】android中代码运行出错:I/dalvikvm(1565): Could not find method javax.tools.ToolProvider.getSystemJavaCompiler

Android crifan 4238浏览 0评论

【背景】

折腾:

【记录】在android中编译并调用编译好的java代码

过程中,用代码:

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Comparator;
import javax.tools.*;
...

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_ddparser);
		
		//antlrV3Demo();
		//hartEddlParserDemo_NonDebug();
		//hartEddlParserDemo_Debug();
		
		testCompileJavaCode();
	}

    public void testCompileJavaCode()
    {
        File javaSourceCode = new File("/mnt/sdcard/Demo_eddl_method_code.java");
        JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); // this line error: dalvikvm  VFY  unable to resolve static method 

        Writer out = new PrintWriter(System.out);  
        StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
        DiagnosticListener<? super JavaFileObject> diagnosticListener = null;
        Iterable<String> options = null;
        Iterable<String> classes = null;
       
        Iterable<? extends JavaFileObject> compilationUnits1 =
           fileManager.getJavaFileObjects(javaSourceCode);
       
        compiler.getTask(out, fileManager, diagnosticListener, options, classes, compilationUnits1).call();
        
        System.out.println("Got compiled output:" + out.toString());

        try {
            fileManager.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        return;
    }

结果运行出错:

05-07 15:51:25.059: I/dalvikvm(1565): Could not find method javax.tools.ToolProvider.getSystemJavaCompiler, referenced from method com.mm.antlrv3demo.DDParser.testCompileJavaCode

05-07 15:51:25.059: W/dalvikvm(1565): VFY: unable to resolve static method 7852: Ljavax/tools/ToolProvider;.getSystemJavaCompiler ()Ljavax/tools/JavaCompiler;

05-07 15:51:25.059: D/dalvikvm(1565): VFY: replacing opcode 0x71 at 0x0008

05-07 15:52:21.278: D/AndroidRuntime(1565): Shutting down VM

05-07 15:52:21.278: W/dalvikvm(1565): threadid=1: thread exiting with uncaught exception (group=0xb4f98288)

 

【解决过程】

1.看起来是没有找到对应的

javax.tools.ToolProvider

应该是,android本身的环境中,就没有此Java6中的库。

其中,之前折腾android环境中,添加对应的

import javax.tools.*;

的时候,都是要添加对应的JRE环境,才能编译过去的。

但是却在运行的时候,由于是在android环境中,看来是没有此库的支持,所以无法正常运行。

2.参考了:

Is there a work around for the Android error “Unable to resolve virtual method java/beans/PropertyDescriptor”?

感觉也是android中无此库,所以出错。

 

【总结】

目前看来,貌似没办法,能把原先Java6中的javax.tools的库,能弄到Android中,否则看来是无法正常利用

javax.tools.ToolProvider.getSystemJavaCompiler

的。

转载请注明:在路上 » 【未解决】android中代码运行出错:I/dalvikvm(1565): Could not find method javax.tools.ToolProvider.getSystemJavaCompiler

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
83 queries in 0.177 seconds, using 22.11MB memory