我在 Android 项目中有一些代码 parses HTML using Jsoup.它不使用任何特定于 Android 的内容,它们只是采用 InputStream 并返回我的模型类的静态方法。该应用程序使用 Gradle 在 Android Studio 中构建自身。
有什么方法可以创建一个标准的 Java main
方法来执行诸如从本地文件加载 HTML、通过解析器运行它并输出 JSON 文件(在我的模型上使用 Gson类(class))?我在想也许我可以向 Gradle 添加一个新的 sourceSet
,就像一组 jvmCompatible
类?我非常不希望将我的代码复制到单独的项目中。
编辑: 我想我没有说清楚,但我希望能够从命令行在我的开发机器上本地运行它,而不是在 Android 设备或模拟器上。
最佳答案
您不一定需要在构建文件中执行任何操作来进行设置;构建文件生成 Java .class 文件,您可以直接从命令行将它们提供给 Java。您可以向任何类添加 main
方法:
package com.example.foo;
class MyClass {
...
public static void main(String [] args) {
...
}
}
main
方法将被愉快地忽略,除非您通过 Java 命令行调用它。您可以通过将类路径设置为中间构建目录并告诉 Java 命令行启动哪个类来完成此操作:
java -classpath app/build/intermediates/classes/debug/ com.example.foo.MyClass
在其中传递应用模块构建输出中 build/intermediates/classes/debug
目录的路径以及类的完全限定名称。
请注意,如果您正在运行使用 ProGuard 的发布版本,如果代码中没有以其他方式引用此 main 方法,则可能会被删除。
确保您不访问任何 Android 类,否则您将收到运行时错误。
顺便说一句,您可能会发现值得将纯 Java 代码分离到构建中的纯 Java 模块中。除此之外,它还可以让您使用 JUnit 为其中的类编写漂亮的测试用例;如果您问这个问题是因为您想对解析器进行一些测试,您可能会发现在单元测试的支持下这样做很方便。
关于java - 我可以通过常规 Java main 方法从 Android 项目运行纯 Java 代码的子集吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25730288/