当前位置: 首页 > 面试题库 >

在Android上的运行时将字符串编译为代码

郑星辰
2023-03-14
问题内容

我尝试在Android上的Janino上使用这些东西,并得出结论说,它们根本无法在Dalvik VM中运行。

所以我只想问一个简单的问题:在 Android上
,是否有可能在运行时编译包含代码的字符串以供应用程序使用。如果是这样,是否有让我这样做的库和/或您可以共享一个代码示例来做到这一点?

对于 (一个非常简单的) 示例,如果我有一个包含以下内容的String对象:

public class Adder{

     int x;
     int y;

     public Adder(int x,int y) {
     this.x = x;
     this.y = y;
     }

     public int add() { return x+y;}

}

作为一根巨大的弦线。有没有一种方法可以处理它以创建Adder对象的实例,以便可以add()通过Reflection API 调用该方法?

编辑 我尝试了beanshell解释,但是事实证明它太慢了。我正在寻找更快的东西,就像詹尼诺一样


问题答案:

ImagePlayground是一个开源Android应用程序,它使用Dexmaker和自定义编程语言来完成此任务。



 类似资料:
  • 我正在学习如何通过OCA考试,并坚持这个java字符串池的概念。 考虑以下几点: 和在字符串中是相同的,在对象中也是相同的,因为它是相同的字符串文本,所以JVM在编译时将字符串池和。 现在,是在运行时计算的,因此应该返回一个新字符串。因此,应该为false,但事实并非如此。为什么? 我的一个理论是方法首先检查是否有空白需要删除,如果没有,则简单返回本身。这可以解释为什么s1==s3,但我不确定。

  • 我正在使用java 11处理一些依赖项并编译到旧版本。我将一个依赖项迁移到Java11并正常工作,但我们仍然必须在Java8上运行Tomcat 7或8。是否可以使用标志来编译使用,或并在8上运行的代码? 发布标志表明应该可以: --发布版本 针对特定 VM 版本的公共、受支持和记录的 API 进行编译。支持的版本目标为 6、7、8 和 9。 这个项目是一个依赖项,独立运行在SprinBoot2.1

  • 问题内容: 就像标题所说的那样,我正在尝试在Java中将字符串“ test”编码为base32字符串“ ORSXG5A =“。 我在网上搜索时发现的所有类都是使用32位从字符串编码为数组的类,但是显然这不是我想要的。 很抱歉这个新手问题。 问题答案: Apache commons编解码器提供了一个可以执行此操作的类 版画 您可以在此处下载。

  • 问题内容: Java 8引入了重要的新语言功能,例如lambda表达式。 语言的这些变化是否伴随着已编译字节码的重大变化,从而阻止了它在Java 7虚拟机上运行而无需使用某些逆向转换程序? 问题答案: 不可以,在源代码中使用1.8功能要求你以1.8 VM为目标。我刚刚尝试了新的Java 8版本,并尝试使用进行编译,但编译器拒绝了:

  • 当我尝试安装一个app时,有两种可能: null 当APK文件存在于构建文件夹中时运行应用程序(工作非常好) 运行->运行应用程序(预期项目将生成,应用程序将安装,但显示上述错误!) 执行之后清理和运行应用程序的相同过程

  • 当我尝试安装一个应用程序时,有两种可能性: null 我试过的事情: 当构建文件夹中存在APK文件时运行应用程序(工作正常) 运行->运行应用程序(预计将构建项目并安装应用程序,但它显示了上面提到的错误!) 执行后清理和运行应用程序的过程相同