Flutter项目中如何使用与调用AAR文件?
调用Flutter项目中集成的AAR类步骤指南
1. 确认AAR集成配置无误
- 将AAR文件放置在
android/app/libs目录下(无libs文件夹则新建) - 在
android/app/build.gradle的dependencies块中添加:implementation files('libs/你的AAR文件名.aar') - 同步Gradle,确保没有编译报错
2. 通过MethodChannel实现Flutter与AAR的交互
Flutter无法直接调用原生AAR类,需要通过MethodChannel做桥接:
步骤1:Flutter端定义MethodChannel
在Dart文件中编写调用桥接:
import 'package:flutter/services.dart'; class AarBridge { static const MethodChannel _channel = MethodChannel('aar_interaction_channel'); // 封装调用AAR方法的函数 static Future<String?> invokeAarMethod(String inputParam) async { try { final String? result = await _channel.invokeMethod( 'call_aar_target_method', {'param': inputParam} ); return result; } on PlatformException catch (e) { return "调用失败: ${e.message}"; } } }
步骤2:Android原生层调用AAR类
打开android/app/src/main/kotlin/你的包名/MainActivity.kt(Java对应MainActivity.java):
Kotlin版本
import io.flutter.embedding.android.FlutterActivity import io.flutter.embedding.engine.FlutterEngine import io.flutter.plugin.common.MethodChannel import com.your.aar.package.TargetAarClass // 替换为AAR中实际类的完整包路径 class MainActivity : FlutterActivity() { private val CHANNEL = "aar_interaction_channel" override fun configureFlutterEngine(flutterEngine: FlutterEngine) { super.configureFlutterEngine(flutterEngine) MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL).setMethodCallHandler { call, result -> when (call.method) { "call_aar_target_method" -> { val param = call.argument<String>("param") // 实例化AAR类并调用目标方法 val aarInstance = TargetAarClass() val aarResult = aarInstance.targetMethod(param) // 替换为AAR中实际方法名 result.success(aarResult) } else -> result.notImplemented() } } } }
Java版本
import io.flutter.embedding.android.FlutterActivity; import io.flutter.embedding.engine.FlutterEngine; import io.flutter.plugin.common.MethodChannel; import com.your.aar.package.TargetAarClass; // 替换为AAR中实际类的完整包路径 public class MainActivity extends FlutterActivity { private static final String CHANNEL = "aar_interaction_channel"; @Override public void configureFlutterEngine(FlutterEngine flutterEngine) { super.configureFlutterEngine(flutterEngine); new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), CHANNEL).setMethodCallHandler( (call, result) -> { if (call.method.equals("call_aar_target_method")) { String param = call.argument("param"); TargetAarClass aarInstance = new TargetAarClass(); String aarResult = aarInstance.targetMethod(param); // 替换为AAR中实际方法名 result.success(aarResult); } else { result.notImplemented(); } } ); } }
3. 调用示例
在Flutter页面中直接调用封装好的方法:
ElevatedButton( onPressed: () async { String? result = await AarBridge.invokeAarMethod("测试参数"); print("AAR返回结果: $result"); }, child: const Text("调用AAR方法"), )
关键注意事项
- 必须明确AAR中类的完整包名和方法签名,若没有文档,可直接将AAR拖入Android Studio查看类结构
- 若AAR依赖其他第三方库,需在
android/app/build.gradle的dependencies中添加对应依赖,否则会出现类找不到的错误 - 确保AAR的CPU架构(armeabi-v7a、arm64-v8a等)与Flutter项目的架构配置一致,避免运行时崩溃
内容的提问来源于stack exchange,提问作者ABDELILAH MOUHIB
相关产品推荐
相关产品推荐

