如何在运行时在Android中生成和编译Java文件

如何在运行时在Android中生成和编译Java文件,java,android,javac,dsl,dynamically-generated,Java,Android,Javac,Dsl,Dynamically Generated,我知道javax.tools.*这是可能的,但由于Android API中没有包含这一点,我非常想知道,这可能吗 现在,我的目标是创建一个拖放工具,允许用户创建自己的布局(因为不是每个人都想学习移动开发,因为它需要大量的时间、投入和实践),类似于Android Studio自己的布局。当然,最重要的是通过onClickListener和OnTouchListener实现功能。我已经开始通过创建我自己的DSL(领域特定语言)来解决这个问题,它有一个GUI前端,允许用户通过弹出菜单和子菜单选择他们想

我知道javax.tools.*这是可能的,但由于Android API中没有包含这一点,我非常想知道,这可能吗

现在,我的目标是创建一个拖放工具,允许用户创建自己的布局(因为不是每个人都想学习移动开发,因为它需要大量的时间、投入和实践),类似于Android Studio自己的布局。当然,最重要的是通过onClickListener和OnTouchListener实现功能。我已经开始通过创建我自己的DSL(领域特定语言)来解决这个问题,它有一个GUI前端,允许用户通过弹出菜单和子菜单选择他们想要的内容。例如

声明

{if,for,while}

语句后面必须紧跟一个引用,然后是一个条件语句(从该引用中获得),如“if(Object.conditional())”语句

参考资料

{Object1,Object2,Object3}

对象是对其他视图(即按钮、布局、网络视图等)的引用

条件句|动作|获取者|设置者

{isSomething(),doSomething(),getSomething(),setSomething()}

对每个引用的方法进行包装,以便每个包装器跟踪其方法的属性和描述(因此是文档)

事情会是这样的

IF ImageView1.isVisible()
    ImageView1.setVisible(false)
ELSE
    ImageView1.setVisible(true)
当然,方法setVisible(boolean)是setVisiblity(int)的包装版本。这些都不是类型化的,而是从一个简单的弹出菜单中获得的,该菜单根据当前上下文显示了适用的选择

我计划如何将其转换为编译代码,将语句转换为Java代码,根据需要动态插入引用(即,ImageView1将在Java中定义为私有ImageView ImageView1;),生成方法,类似于ButterKnife为其onClick和onTouch注释生成额外类的方法,等等

然后,在计划了所有这些之后(现在已经工作了两周),我发现Android不支持编译这样的代码。请告诉我这样的事情是可能的。这是我百分之百想做的事。任何第三方库都可以这样做吗

如果没有,是否有一些可能的方法来模仿这样做?我可以用漫长而缓慢的方式来做,准备每一种可能的方式,自己通过一个映射来跟踪引用,当它即将被调用时,直接调用与该键相关联的视图的实现方法,理论上这是可行的。事实上,如果我不能,那将是我第二次去。不过会很乱的。 抱歉,如果时间太长,我只想让它工作


TL;DR:有没有办法编译在Android运行时创建的生成Java文件(因为javax.tools.*不存在),如果没有,最好的办法是什么?

有没有办法编译在Android运行时创建的生成Java文件--Android SDK中没有。是否有第三方库可以执行类似操作?我看到了类似“”的东西,但我不知道这是否真的有效。如果您的用户甚至没有输入Java代码,为什么它必须实际编译Java代码?您似乎选择了最复杂的方法。除了Xaver的评论之外,从安全角度来看,我不会做您所描述的事情。最终目标是生成既可以在运行时动态运行又可以在IDE中运行的.xml和.java文件。因此,可以向后运行(在运行时动态运行IDE中创建的.java和.xml)。