Android集成Flutter页面

2,437 阅读2分钟

1、Flutter模块导入

1.创建Flutter模块

切换到项目的根目录上一层,执行如下命令创建flutter模块

flutter create -t modue h_flutter

在项目的setting.gradle中添加

setBinding(new Binding([gradle:this]))
evaluate(new File(
   settingsDir.parentFile,'h_flutter/.android/include_flutter.groovy'
))

或者根据自己的实际目录修改上述目录,这样就绑定了Flutter模块,在项目结构视图中应该就能看到Flutter的结构。

这样,flutter模块就已经引入了,但是自己的项目中还没实际引用Flutter,还不能使用Flutter相关代码,需要在自己的项目中引入flutter

2.引用flutter模块

app下的build.gradle添加implementation project(':flutter')(或者compile project(':flutter'))

在引用的时候注意下native的minSdkVersion,要和flutter模块的统一,否则会报错;

同时,对于老项目,可能会有

Cause: assert appProject != null | | null false

需要把项目的module名字改成app

3.修改native代码

Flutter1.12前需要在Application继承FlutterApplication或者onCreate中FlutterMain.startInitialization(getApplicationContext());Flutter1.12之后的版本就不需要了,Flutter已经自动注册了。

2.native项目加载Flutter页面

老版本的Flutter使用

Flutter.createView(this, getLifecycle(), "route");来创建view,

addContentView添加View,

Flutter1.12后没有了这个方法,直接创建一个Activity继承自FlutterActivity,Flutter1.12之后FlutterActivity使用io.flutter.embedding.android.FlutterActivity,启动这个Activity即可,即可进入Flutter的demo页面。

3.Flutter模块热重载

1.使用debug包;

2.关闭杀死当前应用;

3.终端到Flutter(h_flutter)目录,输入flutter attach,会显示

Waiting for a connection from Flutter on PCT AL10...等待连接手机

4.打开app,会提示同步文件到设备

🔥 To hot reload changes while running, press "r". To hot restart (and rebuild state), press "R".

热重载按r,热重启按R

可能遇到的问题:

上面说的新老版本的区分是Flutter1.12,之前为老版本。

1.首先最重要的是看下,正使用的Flutter版本,1.12之后的版本的话要注意有些改动,比方说:Flutter.createView()已经不可用了,而且FlutterActivity已经推荐使用io.flutter.embedding.android.FlutterActivity

官方说明:github.com/flutter/flu…

2.Could not HEAD 'repo1.maven.org/maven2/io/f…'. Received status code 501 from server: HTTPS Required

maven已经推荐使用https

maven  {
    url "https://repo1.maven.org/maven2"
}

3.Default interface methods are only supported starting with Android N (--min-api 24): void io.flutter.plugin.platform.PlatformView.onFlutterViewAttached(android.view.view)

Flutter里面已经指定了编译版本,所以自己项目的build.gradle中也要指定。

android {
	compileOptions {
  	sourceCompatibility JavaVersion.VERSION_1_8
  	targetCompatibility JavaVersion.VERSION_1_8
  	}
 }
[FATAL:flutter/shell/platform/android/library_loader.cc(24)] Check failed: result.

而且debug可以运行,release不可以运行,那就是混淆问题

-keep class io.flutter.facade.**{*;}
-keep class io.flutter.plug.**{*;}
-keep class io.flutter.app.** { *; }
-keep class io.flutter.plugin.**  { *; }
-keep class io.flutter.util.**  { *; }
-keep class io.flutter.view.**  { *; }
-keep class io.flutter.**  { *; }
-keep class io.flutter.plugins.**  { *; }

还有其他问题,版本兼容或者其他的,没一一列举,欢迎留言。