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

时间:2016-01-13 17:28:09

标签: java android javac dsl dynamically-generated

我知道javax.tools。*这是可能的,但由于这不包含在Android API中,我很想知道,这可能吗?

目前,我的目标是创建一个拖放工具,允许用户创建自己的布局(因为它不是每个人都想学习移动开发,因为它需要大量的时间,奉献和实践)类似于Android Studio如何做到这一点。但是,当然最重要的是通过onClickListener和onTouchListeners实现功能。我已经开始通过创建自己的带有GUI前端的DSL(特定于域的语言)来解决这个问题,允许用户通过PopupMenu和SubMenus选择他们想要的东西。例如......

语句

{if,for,while}

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

参考

{Object1,Object2,Object3}

对象是对其他视图的引用(I.E,按钮,布局,WebView等)。

条件|操作|吸气剂|塞特斯

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

每个Reference的方法都被包装,以便每个包装器跟踪它的方法的属性和描述(因此文档)。

这会是这样的......

IF ImageView1.isVisible()
    ImageView1.setVisible(false)
ELSE
    ImageView1.setVisible(true)

当然,方法setVisible(boolean)是setVisiblity(int)的包装版本。没有这个类型,它是从一个简单的PopupMenu获得的,它根据当前上下文显示适用的选择。

我计划如何将此转录为编译代码是将语句转换为Java代码,在需要时动态插入引用(IE,ImageView1将在java中定义为私有ImageView ImageView1;),生成方法有点类似ButterKnife如何为它的onClick和onTouch注释等生成额外的类。

然后,在计划了所有这些(现在已经工作了2周)后,我发现Android不支持编译这样的代码。请告诉我这样的事情是可能的。这是我100%想要做的事情。这可能与任何第三方库有关吗?

如果没有,是否有可能模仿这样做?我可以用漫长而缓慢的方式来做,准备每一种可能的方式,通过地图跟踪自己的引用,当它即将被调用时,直接调用与该键关联的View的已实现方法,从理论上讲,COULD的工作。事实上,如果我不能,那将是我的第二次。虽然它很混乱。 对不起,如果这太长了,我只想让它发挥作用。

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

0 个答案:

没有答案