java - 我可以通过常规 J​​ava main 方法从 Android 项目运行纯 Java 代码的子集吗?

标签 java android unit-testing gradle android-gradle-plugin

我在 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 - 我可以通过常规 J​​ava main 方法从 Android 项目运行纯 Java 代码的子集吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25730288/

相关文章:

java - 使用 JSlider 上的 ChangeListener 更改 JPanel 上绘制线条的粗细

java - ArrayStoreException 使用 apache httpasyncclient 发帖

c# - 如何在 C# 中创建转发方法调用的代理对象?

unit-testing - 如何模拟acegi身份验证服务进行单元测试?

ios - 使单元测试等待另一个方法中的异步调用

java - 将 RTF 加载到 JTextPane 中

java - 如何通过反射找到参数化重写方法?

android - 如何在此使用 Android 布局和自定义 GUI 设计

android - 如何让 root 为 Android 中的系统应用程序工作?

java - 在 gridview 中缩放 imageview 时的空白