阅读(3578) (0)

Micronaut 安卓支持

2023-02-23 11:00:06 更新

由于 Micronaut 依赖注入基于注解处理器而不依赖于反射,因此当使用 Android 插件 3.0.0 或更高版本时,它可以在 Android 上使用。

这使您可以为 Android 客户端和服务器实现使用相同的应用程序框架。

配置您的 Android 版本

首先,使用 annotationProcessor 依赖配置将 Micronaut 注释处理器添加到处理器类路径。

在 Android 构建配置的 annotationProcessor 和 compileOnly 范围中包含 Micronaut micronaut-inject-java 依赖项:

Android build.gradle 示例

dependencies {
    ...
    annotationProcessor "io.micronaut:micronaut-inject-java:3.8.6"
    compileOnly "io.micronaut:micronaut-inject-java:3.8.6"
    ...
}

如果您将 lint 作为构建的一部分,您可能还需要禁用无效包检查,因为 Android 包含一个硬编码检查,除非您使用 Dagger,否则将 javax.inject 包视为无效:

在 build.gradle 中配置 lint

android {
    ...
    lintOptions {
        lintOptions { warning 'InvalidPackage' }
    }
}

您可以在 Android 文档中找到有关配置注释处理器的更多信息。

Micronaut inject-java 依赖项使用 Android Java 8 支持功能。

启用依赖注入

正确配置类路径后,下一步就是启动 ApplicationContext。

以下示例演示了为此目的创建 android.app.Application 的子类:

示例 Android 应用程序类

import android.app.Activity;
import android.app.Application;
import android.os.Bundle;

import io.micronaut.context.ApplicationContext;
import io.micronaut.context.env.Environment;

public class BaseApplication extends Application { (1)

    private ApplicationContext ctx;

    @Override
    public void onCreate() {
        super.onCreate();
        ctx = ApplicationContext.run(MainActivity.class, Environment.ANDROID); (2)
        registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() { (3)
            @Override
            public void onActivityCreated(Activity activity, Bundle bundle) {
                ctx.inject(activity);
            }
            ... // shortened for brevity; it is not necessary to implement other methods
        });
    }
}
  1. 扩展 android.app.Application 类

  2. 使用 ANDROID 环境运行 ApplicationContext

  3. 注册一个 ActivityLifecycleCallbacks 实例以允许 Android Activity 实例的依赖注入