Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何编写一个Java程序来编译、加载和使用来自web的代码_Java_Android_Compilation - Fatal编程技术网

如何编写一个Java程序来编译、加载和使用来自web的代码

如何编写一个Java程序来编译、加载和使用来自web的代码,java,android,compilation,Java,Android,Compilation,我正在寻找编写一个Java程序,它将从web下载一个文本格式的Java源文件,编译它,加载它,并将其作为运行程序的一部分使用。我听说这是可能的,但不知道如何编写代码来实现。如果您能为我指出这类文档的方向,那么一个功能完整的示例或教程将非常好 一旦我了解了它是如何完成的,我计划利用这一知识构建一个Android应用程序,它可以使用来自web的代码进行自定义。桌面程序可以使用shell脚本下载、编译和运行Java程序。Android没有编译器,添加一个编译器是非常重要的。最简单的方法是制作一个服务器

我正在寻找编写一个Java程序,它将从web下载一个文本格式的Java源文件,编译它,加载它,并将其作为运行程序的一部分使用。我听说这是可能的,但不知道如何编写代码来实现。如果您能为我指出这类文档的方向,那么一个功能完整的示例或教程将非常好


一旦我了解了它是如何完成的,我计划利用这一知识构建一个Android应用程序,它可以使用来自web的代码进行自定义。

桌面程序可以使用shell脚本下载、编译和运行Java程序。Android没有编译器,添加一个编译器是非常重要的。最简单的方法是制作一个服务器程序。然后,Android程序会告诉服务器程序下载并编译Java源代码,然后将结果发送给Android程序,然后Android程序会使用其


需要注意的是,JDK编译器为标准Java虚拟机生成字节码,而Android的JVM使用Dalvik VM,因此在编译Java类时,不能只使用JDK;您必须使用安卓SDK生成安卓类加载器可以使用的兼容字节码。

是的,从一般意义上讲,您可以做自己想做的事情。然而,在Android的特定情况下,沙箱可能会施加限制,使您试图做的事情变得困难或不可能。要在一般情况下做到这一点,您可以使用以下方法:

  • 使用您选择的web库(例如,或者,对于简单任务,Java内置的
    URLConnection
    类也是完全可以接受的)在本地下载Java文件

  • 使用
    System.exec()
    派生一个
    javac
    进程来编译下载的Java文件(或者使用一个实现来完成同样的工作)。请注意,如果下载的Java文件使用系统上没有的外部JAR/库,这可能有点棘手

  • 。请注意,只有当运行时类路径还包括加载代码所依赖的任何外部JAR/库时,才能使用它


  • 然而,在安卓设备上几乎肯定不可能执行第2步。相反,您需要在其他地方编译与Android兼容的类文件(如Yusuf所建议的,在服务器上),然后从应用程序下载并加载编译后的类文件。或者,如果你真的在寻找挑战,也许你可以在你的应用程序中打包一个完整的Java编译器,并以这种方式编译Java文件。

    权限将是一个问题。无法将文件写入安装应用程序的分区。如果你将应用程序移动到SD卡上,也许你可以

    另一种方法是创建自定义类加载器,并使用它将类文件提供给运行时。我不知道你是否能在Android上做到这一点


    脚本是一种选择吗?我相信你可以找到Android的脚本解释器。然后,您可以在解释器中下载并执行脚本。

    您尝试执行的操作与构建在设备上的项目或两者类似,但仅限于创建要在Android上运行的应用程序,而不是向当前运行的应用程序添加代码功能。虽然JRuby for Android更适合编写脚本,但它可能提供足够的功能,因为它是开源的,您可以修改它以满足您的需要


    AIDE项目似乎更像是一项成就,因为您可以在设备上用Java编写应用程序。功能包括Dropbox和git支持。AIDE似乎是一个封闭源代码的应用程序。

    “我想写一个Java程序,用于在Android上部署?”?使用J2SE会很棘手,JDK中提供了
    JavaComplier
    。是的,我计划利用这些知识构建一个Android应用程序。嗯,自我修改代码。让我知道你的应用程序将被调用,这样我就可以避免它。当然没有理由在机器上编译。这就是字节码的全部意义。为什么不从等式中删除编译器并在下载前预编译。如果我遇到这样的应用程序,请用一个字卸载!我认为这可能是解决办法。我需要了解如何在服务器上使用Android SDK,而不是JDK。这是一个选项,只要脚本可以完全访问Android API。通常,解释器会让您控制向脚本公开哪些内容。应用程序未安装在/system上。您也无法写入它们的安装位置,但不需要这样做。如果你想安装一个新的应用程序,你可以将平台指向你临时放置它的地方,在以可运行的形式安装之前,它会弹出一个对话框供用户确认。如果你想在你的应用程序中使用代码,你可以使用一个类加载器,该加载器的位置在你的私有存储中。