Flutter插件开发之集成本地aar

第一步,我们先准备一个待集成的aar文件。我这里采用Androidstudio创建一个module,然后assemble一个libfoo.aar文件,具体代码如下:

package com.droid.libfoo;

public class Foo {
    public int sum(int a, int b) {
        return a + b;
    }
}

第二步,创建一个flutter 插件工程:

flutter create --template=plugin foo_plugin

创建完成之后,用Androidstudio打开这个flutter工程,并在Android手机上运行下,确保该工程可以正常的构建和运行。

 第三步,import libfoo.aar 到这个插件工程,操作如下:

1. 在 ProjectRoot/android/下创建 libs文件夹,并拷贝 libfoo.aar 到其中

2. 修改build.gradle,集成libfoo.aar 

 3. 修改完成之后,开始构建,会遇到如下的错误:

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':foo_plugin:bundleDebugAar'.
> Direct local .aar file dependencies are not supported when building an AAR. The resulting AAR would be broken because the classes and Android resources from any local .aar file dependencies would not be packaged in the resulting AAR. Previ
Flutter 插件可以集成本地AAR 包和 JAR 包。具体步骤如下: 1. 在 Flutter 项目的 `android` 目录下创建 `libs` 目录,将 AAR 包和 JAR 包复制到该目录下。 2. 在 Flutter 项目的 `android/app/build.gradle` 文件中添加如下配置: ``` repositories { flatDir { dirs 'libs' } } dependencies { // 引入 AAR 包 implementation(name: 'your-aar-filename-without-extension', ext: 'aar') // 引入 JAR 包 implementation files('libs/your-jar-filename.jar') } ``` 3. 在 Flutter 插件Android 实现类中,使用以下代码加载本地AAR 包和 JAR 包: ``` import android.content.Context; import android.content.res.AssetManager; import android.os.Bundle; import android.util.Log; import io.flutter.embedding.android.FlutterActivity; import io.flutter.embedding.android.FlutterActivityLaunchConfigs; import io.flutter.embedding.android.FlutterView; import io.flutter.embedding.engine.FlutterEngine; import io.flutter.plugin.common.MethodChannel; import org.json.JSONObject; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; public class MyFlutterActivity extends FlutterActivity { private static final String CHANNEL = "com.example.myapplication/my_channel"; @Override public void configureFlutterEngine(FlutterEngine flutterEngine) { super.configureFlutterEngine(flutterEngine); // 加载 AAR 包中的类 MyAARClass myAARClass = new MyAARClass(); // 加载 JAR 包中的类 MyJARClass myJARClass = new MyJARClass(); // 注册 MethodChannel new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), CHANNEL) .setMethodCallHandler( (call, result) -> { if (call.method.equals("myMethod")) { // 调用 AAR 包中的方法 String aarResult = myAARClass.myMethod(); // 调用 JAR 包中的方法 String jarResult = myJARClass.myMethod(); // 返回结果 JSONObject jsonObject = new JSONObject(); try { jsonObject.put("aarResult", aarResult); jsonObject.put("jarResult", jarResult); } catch (Exception e) { e.printStackTrace(); } result.success(jsonObject.toString()); } else { result.notImplemented(); } } ); } } ``` 这样,就可以在 Flutter 插件中使用本地AAR 包和 JAR 包了。注意,在使用 JAR 包时,需要将该包放在 `libs` 目录下,并在 `build.gradle` 文件中添加依赖。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值