老工程集成flutter有两大方法:

*
把老工程完全改成flutter,这种方法能实现dart代码的动态加载,但改动很大,
因为flutter引擎内部写死了android-studio里的一些路径,如果AndroidManifest.xml的路径,改造可以做,但不一定有很好的兼容性
具体集成流程参考:https://blog.csdn.net/langouster/article/details/80511569
<https://blog.csdn.net/langouster/article/details/80511569>

*

制作一个纯的flutter工程A,fluuter的开发调试都在这个工程进行,当需要发布到老工程B时,把A工程flutter编译后的平台相关的中间文件复制到B工程,B工程没有dart的调试功能,类似与基础了一个第三方的功能模块
本文介绍此种方法

综合考虑后使用第二种方法更加适合我们,具体流程如下

*
老工程导入flutter相关文件
a.首先编译纯flutter工程A(命令行flutter build apk –release)
b.把A工程”build\app\intermediates\flutter\relase\assets”文件夹复制到老的非Flutter
B工程”app\src\main\assets”下
c.把A工程下的.flutter-plugins文件复制到B工程目录下,和app目录并列,并根据实际情况编辑文件内的路径
d.把”version/flutter.gradle”复制到B工程”app\”目录下
e.复制

*
修改setttings.gradle,加入以下代码,用于包含flutter插件用到的第三方包
def flutterProjectRoot = rootProject.projectDir.toPath() def plugins = new
Properties()def pluginsFile = new File(flutterProjectRoot.toFile(),
'.flutter-plugins') if (pluginsFile.exists()) { pluginsFile.withReader('UTF-8')
{ reader -> plugins.load(reader) } } plugins.each { name, path ->def
pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile()
include":$name" project(":$name").projectDir = pluginDirectory }
* 修改local.properties,加入 flutter.sdk=D:\\flutter #路径根据实际情况 flutter.buildMode
=debug flutter.versionName=1.0.0 flutter.versionCode=1
* 修改app/build.gradle,在最后加入 def localProperties = new Properties() def
localPropertiesFile = rootProject.file('local.properties') if
(localPropertiesFile.exists()) { localPropertiesFile.withReader('UTF-8') {
reader -> localProperties.load(reader) } }def flutterRoot =
localProperties.getProperty('flutter.sdk') if (flutterRoot == null) { throw new
GradleException("Flutter SDK not found. Define location with flutter.sdk in the
local.properties file.") } def flutterVersionCode = localProperties.getProperty(
'flutter.versionCode') if (flutterVersionCode == null) { throw new
GradleException("versionCode not found. Define flutter.versionCode in the
local.properties file.") } def flutterVersionName = localProperties.getProperty(
'flutter.versionName') if (flutterVersionName == null) { throw new
GradleException("versionName not found. Define flutter.versionName in the
local.properties file.") } apply from: 'flutter.gradle'
最好指定一下指令集,flutter安装后默认支持的指令集有armeabi-v7a,armeabi-v8a,如果需要支持armeabi需自己编译引擎
android { defaultConfig { //添加这部分 ndk { abiFilters 'armeabi-v7a' //只生成armv7的so
} }
* 修改AndroidManifest.xml文件 <application android:name=
"io.flutter.app.FlutterApplication" 加入这行 android:allowBackup="true" android:icon
="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon=
"@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme=
"@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <
action android:name="android.intent.action.MAIN" /> <category android:name=
"android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application
>
* 新建一个activity, 集成于FlutterActivity, 参考下面的代码 import android.os.Bundle; import
io.flutter.app.FlutterActivity;import
io.flutter.plugins.GeneratedPluginRegistrant;public class MainActivity extends
FlutterActivity { @Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); GeneratedPluginRegistrant.registerWith(this
); } }

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信