按照官方文档的集成方式有2种,一种的aar的打包集成方式,一种是引入model的形式,这里主要说下aar打包的方式我遇到的问题,按照官方提供的打包方式我打包下来是没有flutter依赖的第三方插件,百度和谷歌看来下,如果flutter集成了第三方插件的话 需要使用fat-aar插件来打包aar
fat-aar官方文档: https://github.com/kezong/fat-aar-android flutter官方文档:https://flutter.dev/docs/development/add-to-app/android/project-setup
首先说下我百度谷歌搜送到的基本都是说在flutter中的.android下app中的build.gradle中配置文件,但是我按照集成下来是走不通的,后面看了下在.android下Flutter中的build.gradle来配置,主要修改这2个build.gradle配置文件

按照官方的配置来就行了,这里提一下,需要Open android module in Android Studio

在项目根目录build.gradle下载fat–aar插件
buildscript {
repositories {
google()
jcenter()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:4.1.0'
classpath 'com.github.kezong:fat-aar:1.3.6'
}
}
allprojects {
repositories {
google()
jcenter()
mavenCentral()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
fultter中build.gradle配置中配置引用fat-aar:apply plugin: ‘com.kezong.fat-aar’,后面基本是按照fat-aar官方提供的文档来走了!
pply plugin: 'com.android.library'
apply plugin: 'com.kezong.fat-aar'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
dependencies {
implementation fileTree(dir: 'libs', include: '*.jar')
embed project(path: ':lib-java', configuration: 'default')
embed project(path: ':lib-aar', configuration: 'default')
embed project(path: ':lib-aar2', configuration: 'default')
flavor1Embed project(path: ':lib-aar-local', configuration: 'default')
debugEmbed(name: 'lib-aar-local2', ext: 'aar')
embed 'com.google.guava:guava:20.0'
embed 'com.facebook.fresco:fresco:1.12.0'
implementation('androidx.appcompat:appcompat:1.2.0')
}
以上就是flutter 使用fat-aar打包aar方式,下面集成到Android原生项目中
把aar直接复制到Android项目中引用aar,在app中引入,这里除了引用aar包之外,还需要添加各个 cpu 版本 flutter.so 和 flutter_embedding.jar
repositories {
flatDir {
dirs 'libs'
}
}
dependencies{
api (name: 'flutter-release', ext: 'aar')
implementation 'io.flutter:flutter_embedding_release:1.0.0-241c87ad800beeab545ab867354d4683d5bfb6ce'
implementation 'io.flutter:armeabi_v7a_release:1.0.0-241c87ad800beeab545ab867354d4683d5bfb6ce'
implementation 'io.flutter:arm64_v8a_release:1.0.0-241c87ad800beeab545ab867354d4683d5bfb6ce'
implementation 'io.flutter:x86_64_release:1.0.0-241c87ad800beeab545ab867354d4683d5bfb6ce'
}
后面的1.0.0-241c87ad800beeab545ab867354d4683d5bfb6ce项目是对应的版本号
 
在build.gradle引入
repositories {
mavenCentral()
maven {
url "http://download.flutter.io"
}
}
之后在AndroidManifest.xml中引用就可以了
<activity android:name="com.xxxxxxx.MyFlutterActivity"/>
<activity
android:name="io.flutter.embedding.android.FlutterActivity"
android:theme="@style/api_app_theme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize"
/>
MyFlutterActivity是跳转到flutter 页面的 使用的时候 直接跳转到MyFlutterActivity就可以了
public class MyFlutterActivity extends FlutterActivity {
private static final String CHANNEL_NATIVE = "com.flutterToNative";
public static void openFlutter(Activity activity, String routerUrl) {
Intent intent = MyFlutterActivity.withNewEngine()
.initialRoute(routerUrl)
.build(activity);
activity.startActivity(intent);
}
public static CCEngineIntentBuilder withNewEngine() {
return new CCEngineIntentBuilder(MyFlutterActivity.class);
}
public static CCEngineIntentBuilder withNewEngine(Class<? extends FlutterActivity> activityClass) {
return new CCEngineIntentBuilder(activityClass);
}
public static class CCEngineIntentBuilder extends NewEngineIntentBuilder {
protected CCEngineIntentBuilder(Class<? extends FlutterActivity> activityClass) {
super(activityClass);
}
}
@Override
public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
GeneratedPluginRegistrant.registerWith(flutterEngine);
MethodChannel methodChannel = new MethodChannel(flutterEngine.getDartExecutor(), CHANNEL_NATIVE);
methodChannel.setMethodCallHandler(new MethodChannel.MethodCallHandler() {
@Override
public void onMethodCall(@NonNull MethodCall call, @NonNull MethodChannel.Result result) {
switch (call.method) {
case "backToNative":
finish();
break;
case "iOSFlutter2":
Map<String,String> map=new HashMap<>();
map.put("token",LoginInfoModel.getToken());
map.put("username", UserInfoModel.getNikeName());
map.put("serverip", Constant.Config.BASEIP+"/");
String newToken = LoginInfoModel.getToken();
result.success(map);
break;
default:
result.error("404", "未匹配到对应的方法" + call.method, null);
}
}
});
}
}
注: 至此Android集成flutter 结束 ,如果需要使用缓存或带有缓存引擎的初始路由看下官方文档配置,个人记录,比较粗
|