下载第三方sdk
- 自行下载解压
- 将libs中的jar ,jniLibs中的NDK so库架构等文件复制取出。其中armeabi开头的删除,x86是模拟器,真机运行也可删除
1.flutter添加新的module
- 将flutter工程以安卓模式打开,可重新open选择里面的android。第一次打开时间长
- 新建module,选择library ,过程如下
- 将之前下载好的第三方sdk中jar和so文件复制到module里对应的目录下
- jar包添加之后不要忘记了要add到build.gradle,也可以在gradle中编写通配
- 在清单文件中,按照sdk所需的权限以及 AppID,API Key,Secret Key进行配置
- app添加刚才新建的library依赖,过程如下
- 添加完毕之后可在 build.gradle(app)中查看有
- 完成之后,将项目重新以flutter形式打开,运行一遍,确保没有出现错误,一般出现新建的module和之前的app最小sdk版本不一致问题,修改成一样即可。
2.编写dart端接口
-
过程如下
-
bbbb
3. Android平台的plugin实现
- 将项目重新以android形式打开,导入第三方sdk demo 中相关的类
- module中添加flutter依赖,这样才能使用flutter插件中的一些方法。
- 首先按照build.gradle(app)中引入flutter.sdk的方法,复制到 build.gradle(asr_plugin)
- 然后将build.gradle(app)中引入flutter.sdk的方法全部注释,
- 接下来就可以使用了
- aaaa
4.解决新module添加的插件与原app插件的冲突
- 在build.gradle(app) 中修改。在defaultConfig节点下增加:
ndk {
abiFilters "armeabi-v7a","arm64-v8a","x86_64","x86" /*只打包flutter所支持的架构,flutter没有armeabi架构的so,加x86的原因是为了能够兼容模拟器 abiFilters "armeabi-v7a" release 时打"armeabi-v7包 */
}
- 在buildTypes大括号末尾增加:
packagingOptions {
/* 确保app与asr_plugin都依赖的libflutter.so libapp.so merge时不冲突 */
pickFirst 'lib/x86_64/libflutter.so'
pickFirst 'lib/x86_64/libapp.so'
pickFirst 'lib/x86/libflutter.so'
pickFirst 'lib/arm64-v8a/libflutter.so'
pickFirst 'lib/arm64-v8a/libapp.so'
pickFirst 'lib/armeabi-v7a/libapp.so'
}
5.编写Android端的接口实现
- 根据第三方sdk的使用文档,编写相应的类
- 插件通信与dart端实现,以asr_plugin为例:
- 添加android 6.0 以上需要动态申请权限 ,根据sdk文档添加即可
- 在MainActivity中注册我们开发的插件
public class MainActivity extends FlutterActivity {
//重写此方法
@Override
public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
super.configureFlutterEngine(flutterEngine);
//flutter sdk >= v1.17.0 时使用下面方法注册自定义plugin
AsrPlugin.registerWith(flutterEngine.getDartExecutor().getBinaryMessenger(),this);
}
}
发现的问题汇总
- aaaaa
- aaaa
- aaaa