先来介绍下本人踏上踩坑的辛酸历史,上周四,也就是2020年11月19日的时候,小编修改了一个已经上线几个月的flutter ios端APP,然后被打了回来原因是ios14新增了NSLocalNetworkUsageDescription权限,加上权限后审核通过了。然后小编就捎带手把xcode升级到了最新版本,然后······boom(ios端程序崩了,钻研了时至今日仍未弄好);于是乎小编心想干脆把安卓和ios版本统一吧,然后把flutterSDK升级到1.22.4之后,安卓也崩溃了,接下来进行逐一说明(安卓端的)······
首先,当你升级完flutterSDK后(最新版1.22.4为例),运行安卓项目时会报错,下面会有个提示链接https://github.com/flutter/flutter/wiki/Upgrading-pre-1.12-Android-projects,让你按照上面的方法进行迁移,但是满篇的英文,虽然我有一丢丢英文功底但是看着也很头疼,然后直接百度找方法,在AndroidManifest.xml里加上下面这段代码
<application
xxx>
<activity
xxx
</activity>
<!--新增处-->
<meta-data
android:name="flutterEmbedding"
android:value="2" />
</application>
修改MainActivity.kt(或者MainActivity.java),我这个项目创建时是默认的kotlin语言,按照这个格式把你的MainActivity.kt修改一下即可,MainActivity.java的修改方法在上面贴出来的链接也有
package xxx
//import android.os.Bundle
//import io.flutter.app.FlutterActivity
//import io.flutter.plugins.GeneratedPluginRegistrant
import io.flutter.embedding.android.FlutterActivity
class MainActivity: FlutterActivity() {
// override fun onCreate(savedInstanceState: Bundle?) {
// super.onCreate(savedInstanceState)
// GeneratedPluginRegistrant.registerWith(this)
// }
}
添加后再运行项目就不会包刚刚的错了
还有个简单粗暴的方法,升级SDK后,直接新建一个flutter项目,然后把原来项目的代码直接copy到新项目里也可。
然后运行项目还是报错,报的是一堆kotlin语言的错误(因为我项目里用到了fluwx插件,升级到2.4.1版本后报的错,如果你的项目里没有这个插件而且没报错的话那应该就是插件的问题),我本身是搞java的,flutter也是公司业务需求现学的,对安卓和ios不太了解根本不知道怎么搞,后来请教交流群里的大佬说把Android/gradle里的ext.kotlin_version改一下,于是乎我把他改成了下面这个样子
//android/build.gradle文件
buildscript {
//修改后
ext.kotlin_version = '1.4.20'
repositories {
google()
jcenter()
}
}
再运行项目,cua的一下就起来了~
接下来的问题是,项目是起来了,但是一直是启动页面,看了AS控制台后发现是需要在main.dart里添加一句话:然后启动项目可以正常运行了(之前用flutter1.20.0的时候,ios需要添加这句话,升到22之后安卓也需要了,这句话是干啥的作为非专业移动端开发的我不知道,反正是好使了)
void main() async {
WidgetsFlutterBinding.ensureInitialized();
runApp(new MyApp());
}
最后一个坑:如果你的项目里用到了amap_map_fluttify插件,实现定位和地图功能的话,除了在main.dart里注册key之外还要进行一下初始化才会生效
void main() async {
WidgetsFlutterBinding.ensureInitialized();
//高德初始化key
AmapLocation.instance.init(); //加上这行代码
await AmapService.instance.init(iosKey: "", androidKey: "");
runApp(new MyApp());
}
其他的坑暂时还没遇到,以后遇到再来细说~