You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Android .aar库集成到Flutter项目并调用其函数?

Flutter集成本地AAR依赖并调用方法的完整步骤

一、已完成的基础配置回顾

你已经在Flutter项目的android目录下创建linklibrary文件夹,放入E4link-1.0.0.aar,并在该文件夹的build.gradle中添加了以下代码:

configurations.maybeCreate("default")

artifacts.add("default", file('E4link-1.0.0.aar'))

二、配置项目级build.gradle

打开android/build.gradle,在allprojects的repositories块中添加本地文件夹引用:

allprojects {
    repositories {
        google()
        mavenCentral()
        // 添加本地AAR所在文件夹的引用
        flatDir {
            dirs 'linklibrary'
        }
    }
}

三、配置app级build.gradle

打开android/app/build.gradle,在dependencies块中添加AAR依赖:

dependencies {
    // 保留原有依赖,新增这行
    implementation(name: 'E4link-1.0.0', ext: 'aar')
}

注意:如果AAR依赖其他Android库(如AndroidX组件、第三方SDK),需要在此处同步添加对应依赖,否则会出现编译报错。

四、搭建Flutter与原生的通信通道(MethodChannel)

1. 编写Android原生端代码

打开android/app/src/main/kotlin/你的包名/MainActivity.kt(Java项目则打开MainActivity.java),实现MethodChannel的调用逻辑:

Kotlin示例:

import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugin.common.MethodChannel

class MainActivity : FlutterActivity() {
    // 自定义通道名,需和Flutter端完全一致
    private val CHANNEL = "com.example.e4link/channel"

    override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
        super.configureFlutterEngine(flutterEngine)
        MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL).setMethodCallHandler { call, result ->
            // 根据Flutter调用的方法名,执行AAR中的对应函数
            when (call.method) {
                "invokeE4linkMethod" -> {
                    // 示例:获取Flutter传递的参数
                    val inputParam = call.argument<String>("input")
                    // 调用AAR中的目标方法(需替换为实际类和方法名)
                    val methodResult = E4linkCore.processData(inputParam)
                    // 将结果返回给Flutter
                    result.success(methodResult)
                }
                else -> {
                    // 未匹配到方法时返回异常
                    result.notImplemented()
                }
            }
        }
    }
}

Java示例:

import io.flutter.embedding.android.FlutterActivity;
import io.flutter.embedding.engine.FlutterEngine;
import io.flutter.plugin.common.MethodChannel;

public class MainActivity extends FlutterActivity {
    private static final String CHANNEL = "com.example.e4link/channel";

    @Override
    public void configureFlutterEngine(FlutterEngine flutterEngine) {
        super.configureFlutterEngine(flutterEngine);
        new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), CHANNEL).setMethodCallHandler(
                (call, result) -> {
                    if (call.method.equals("invokeE4linkMethod")) {
                        String inputParam = call.argument("input");
                        String methodResult = E4linkCore.processData(inputParam);
                        result.success(methodResult);
                    } else {
                        result.notImplemented();
                    }
                }
        );
    }
}

注意:确保正确导入AAR中的类,若出现类找不到的情况,检查依赖配置是否正确,或确认AAR是否暴露了该类的公开方法。

2. 编写Flutter端调用代码

在Flutter的Dart文件(如main.dart)中,通过MethodChannel调用原生方法:

import 'package:flutter/services.dart';
import 'package:flutter/material.dart';

class _HomePageState extends State<HomePage> {
  static const MethodChannel _channel = MethodChannel('com.example.e4link/channel');
  String _callResult = "未调用";

  Future<void> _callE4linkMethod() async {
    try {
      // 调用原生方法,传递参数
      final String result = await _channel.invokeMethod(
        'invokeE4linkMethod',
        {'input': '来自Flutter的测试参数'}
      );
      setState(() {
        _callResult = "调用结果:$result";
      });
    } on PlatformException catch (e) {
      setState(() {
        _callResult = "调用失败:${e.message}";
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text("调用AAR方法")),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text(_callResult),
            const SizedBox(height: 20),
            ElevatedButton(
              onPressed: _callE4linkMethod,
              child: const Text("触发AAR函数调用"),
            )
          ],
        ),
      ),
    );
  }
}

五、编译运行项目

  1. 执行命令清理缓存:flutter clean
  2. 启动项目:flutter run
  3. 点击页面按钮即可测试AAR方法的调用

常见问题排查

  • 找不到AAR中的类:检查app级build.gradle的依赖配置、AAR存放路径、项目级build.gradle的flatDir配置是否正确
  • 依赖冲突:查看AAR的依赖清单,在app级build.gradle的implementation中通过exclude group: 'xxx', module: 'xxx'排除冲突依赖
  • 调用提示notImplemented:确认Flutter端与原生端的通道名、方法名完全一致

内容的提问来源于stack exchange,提问作者Nns_ninteyFIve

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 07:21:34