flutter 安装部署问题总结
1、Mac版本下安装cocoapods,主要原因是rvm没有安装,ruby没有选择使用
\curl -sSL https://get.rvm.io | bash -s stable
出现长时间打不开,安装GPG等密钥工具,导入密码后也无法安装,首先检查https://get.rvm.io网址是否可访问,不可访问就没有办法。
解决方法:
curl -sSL https://github.com/rvm/rvm/tarball/stable -o rvm-stable.tar.gz
tar -xzvf rvm-stable.tar.gz
cd rvm-rvm-6bfc921/
./install --auto-dotfiles
source /Users/zhangjianyong/.rvm/scripts/rvm
rvm install 2.7.2
rvm use 2.7.2
sudo gem install cocoapods
2、如果出现No devices available
配置sdk位置
flutter config --android-sdk /Users/zhangjianyong/Library/Android/sdk
重启Android Studio 即可
3、flutter 如果使用Provider 进行状态管理。一定分好层,否则会监测不到。
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
margin: EdgeInsets.only(top: 0),
color: Colors.white,
child: ChangeNotifierProvider<CustomerFeeInfoNotefier>.value(
value: mCustomerFeeInfoNotefier,
child: Column(
children: [
Consumer<CustomerFeeInfoNotefier>(
builder: (context, textValueAvaliableNotifier, child) {
return __renderList(mCustomerFeeInfoNotefier);
})
],
))));
}
4、在使用flutter调试支付宝时,由于大部分第三方插件不支持沙箱支付,需要修改源码。以flutter_alipay为例,需要在flutter的sdk下找到FlutterAlipayPlugin.java源文件,参考路径:flutter-sdk根目录(个人安装的)/.pub-cache/hosted/pub.flutter-io.cn/flutter_alipay-1.0.0/android/src/main/java/org/zoomdev/flutter/alipay。
中增加沙箱环境支持。EnvUtils.setEnv(EnvUtils.EnvEnum.SANDBOX);
public static void pay(final Activity currentActivity, final String payInfo, final Result callback){
new AsyncTask<String,Object,Map<String,String>>(){
@Override
protected Map<String, String> doInBackground(String... strings) {
try{
PayTask alipay = new PayTask(currentActivity);
EnvUtils.setEnv(EnvUtils.EnvEnum.SANDBOX);
Map<String, String> result = alipay.payV2(payInfo, true);
return result;
}catch (Exception e){
Map<String,String> result = new HashMap<>();
result.put("$error",e.getMessage());
return result;
}
}
5、flutter 调用高德地图。
组件引用后一定在你的application/android/app/build.gradle中引入lib,否则会出现lcom/amap/api/maps/amapoptions等类没有找到
dependencies {
.....
implementation('com.amap.api:3dmap:7.7.0')
}
6.flutter 调用定位组件后,按官方文档需要“implementation fileTree(include: ['*.jar'], dir: 'libs')”
会和地图组件冲突,出现错误 More than one file was found with OS independent path 'assets/ap1.data'
应修改为:implementation fileTree(include: ['AMap_Location_V5.3.1_20210331.jar'], dir: 'libs')
原因:地图jar包重复导入。
7.amap_flutter_location 2.0.0 中出现定位权限被禁用,AndroidManifest.xml中一定是8个权限,网上有帖子是6个造成
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
8. 阿里支付出现Execution failed for task ':flutter_alipay:bundleDebugAar'.
dependencies {
classpath 'com.android.tools.build:gradle:3.5.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
android根目录的build.gradle下为3.5.0,我原来是4.0
9、高德地图flutter开发总结
(1)引用
amap_flutter_map: ^1.0.1
amap_flutter_location: ^1.0.1
amap_location_flutter_plugin: ^0.1.4
permission_handler: ^5.1.0+2
(2)配置build.gradle
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
dependencies {
//demo中引入高德地图SDK
implementation('com.amap.api:3dmap:7.7.0')
implementation fileTree(include: ['AMap_Location_V5.3.1_20210331.jar'], dir: 'libs')
}
(3)拷贝jar包到lib目录
(4)发布时候注意混淆问题
buildTypes {
release {
// TODO: Add your own signing config for the release build.
// Signing with the debug keys for now, so `flutter run --release` works.
signingConfig signingConfigs.debug
//关闭混淆, 否则在运行release包后可能出现运行崩溃, TODO后续进行混淆配置
minifyEnabled false //删除无用代码
shrinkResources false //删除无用资源
}
}
(6) flutter_alipay的支付宝支付功能发布ios时,会出现【include statically linked binaries AlipaySDK】
修改/Users/zhangjianyong/.pub-cache/hosted/pub.flutter-io.cn/flutter_alipay-1.0.0/ios/flutter_alipay.podspec,增加
s.static_framework = true