适用于flutter单独开发,android项目单独开发的场景
1:将flutter项目打包成aar文件,详情见官方文档:https://flutter.cn/docs/development/add-to-app/android/add-flutter-screen
2:在原生android项目文件中,项目根目录app/build.gradle文件中添加以下模块
String storageUrl = System.env.FLUTTER_STORAGE_BASE_URL ?: "https://storage.googleapis.com"
repositories {
maven {
url ‘可以写自己flutter项目的绝对路径比如:d:\\flutter_pro\\build\\host\\outputs\\repo‘
}
maven {
url ‘http://download.flutter.io‘
}
}
3:同样在项目根目录app/build.gradle文件中的 dependencies 模块添加以下代码
debugImplementation ‘com.example.flutter项目名称:flutter_debug:1.0‘
profileImplementation ‘com.example.flutter项目名称:flutter_profile:1.0‘
releaseImplementation ‘com.example.flutter项目名称:flutter_release:1.0‘
4:同样在项目根目录app/build.gradle文件中的 android/buildTypes 添加以下代码
profile {
initWith debug
}
ps:
1-4步在flutter生成aar文件完毕后,会在控制台打印出以上配置信息,请留意
5:在项目根目录app/src/main/AndroidManifest.xml中添加以下代码到 application 模块里
<activity android:name="io.flutter.embedding.android.FlutterActivity" android:theme="@style/LaunchTheme" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" android:hardwareAccelerated="true" android:windowSoftInputMode="adjustResize" />
6:让项目自动下载依赖包
7:在android项目中想使用flutter的文件中引入包
import io.flutter.embedding.android.FlutterActivity;
8:调用flutter页面代码,调用逻辑按自己项目需求来
startActivity(
FlutterActivity
.withNewEngine()
.initialRoute("自己flutter项目的页面路由如:/main")
.build(this)
);
ps:
编译报错:在第5步中的 android:theme="@style/LaunchTheme" 出错
在src/main/res/values文件夹添加styles.xml ,内容如下
<?xml version="1.0" encoding="utf-8"?> <resources> <style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar"> <!-- Show a splash screen on the activity. Automatically removed when Flutter draws its first frame --> <item name="android:windowFullscreen">true</item> </style> </resources>
继续编译,报错,Cannot fit requested classes in a single dex file
网上搜索原因是:
原因:项目貌似有点大,已经超过65k个方法。一个dex已经装不下了,需要个多个dex,也就是multidex ,因为Android系统定义总方法数是一个short int,short int 最大值为65536。
一脸懵逼,明明自己是写的个原生android demo项目,整个页面就一个按钮
按照提示
在 app 的 build.gradle 文件中(原文地址:https://blog.csdn.net/MRYZJ/article/details/103463212)
android {
defaultConfig {
···
// 这里添加
multiDexEnabled true
}
}
dependencies {
// 引入support支持库的multidex库
implementation ‘com.android.support:multidex:1.0.3‘
//或androidx支持库的multidex库
implementation ‘androidx.multidex:multidex:2.0.1‘
}
运行,成功,点击按钮能正常出现flutter页面,但是中间会有一段黑屏时间,稍后解决,至少项目能够正常运行了
ps:
黑屏解决方案,网上很多,大概思路就是将主题设置为白色或者透明即可
代码可以修改为(将页面先初始化,调用的时候直接使用即可):
Intent demo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
demo = FlutterActivity
.withNewEngine()
.initialRoute("/main")
.build(this);
}
public void getflutter(View view) {
if(null == demo){
Toast.makeText(this, "未找到flutter页面", Toast.LENGTH_SHORT).show();
}else {
startActivity(demo);
}
}
原文:https://www.cnblogs.com/liumang/p/14635031.html