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

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

Android crifan 2730浏览 0评论

【背景】

希望实现:

在android环境中,如何去动态的,对于输入的一个java文件,

实时地去编译该java文件,(生成对应的class)

以及在android代码中,引用此编译后的java的class,实现调用其中的函数,引用其中的变量。

 

先去在NeatBeans中弄了个测试的java代码:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package demo_eddl_method_code;

/**
 *
 * @author CLi
 */
public class Demo_eddl_method_code {
    
    public static int getSum(int x, int y)
    {
        int sum = 0;
        sum = x + y;
        return sum;
    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        int x = 1;
        int y = 2;
        int gotSum = getSum(x, y);
        System.out.println(gotSum);
    }

}

希望可以在android代码中,将上述的代码,动态的编译,然后且在android代码中,可以调用到对应的函数getSum。

 

【折腾过程】

1.貌似从:

how to compile java code in android [duplicate]

找到的:

Convert String to code

好像是所要的。

但是其是用的java6中的库:

javax.tools Interface JavaCompiler

此处,不知道android中是否存在和是否能够正常使用。

2.后来折腾代码,结果期间出错:

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

3.参考:

How can I compile and deploy a java class at runtime?

找到:

http://code.google.com/p/compilation-toolbox/

看其介绍,其也还是利用了javax.tools的。所以,估计还是不行。

不过,也去试试是否可用:

【记录】折腾Android(java)的动态编译工具:compilation-toolbox

结果也还是不行。

 

4.继续参考:

How can I compile and deploy a java class at runtime?

先去试试BCEL

【记录】折腾用BECL去实现android中动态编译并调用java代码

 

5.再参考:

Compile to java bytecode (without using Java)

去看看:

Trove

http://teatrove.sourceforge.net/trove.html

 

6.

转载请注明:在路上 » 【记录】在android中编译并调用编译好的java代码

发表我的评论
取消评论

表情

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

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (2)

  1. 我觉得这个主要问题也应该把javac编译为dex,然后再去调用的话,应该问题不大。主要问题在于。javac里面,它会检测你的运行环境的jdk等等版本。还有可能一些数据类型的区别,其实只要修改少量的地方,但是文件太大了,一般人很难完成。就像是你去改一个简单的,工资管理系统,那问题找起来很容易.但是如果你想去,把一个ERP里面的毛病找出来,那就太难了。尤其是那种无缘无故崩溃的
    过vgggg7年前 (2017-02-04)回复
  2. 不知楼主这个问题解决没有。 我现在也需要在android里动态编译生成java类。 还有网站挺漂亮的 。
    hyy361410年前 (2013-12-30)回复
86 queries in 0.150 seconds, using 22.13MB memory