更新 flutter sdk flutter/bin/flutter upgrade
原因
运行时会卡在Running 'gradle assembleDebug, 因为Gradle的Maven仓库在国外, 可以使用阿里云的镜像地址。
解决办法
修改项目下 build.gradle 和 flutter 安装目录flutter/packages/flutter_tools/gradle/flutter.gradle 两个文件中 buildscript 和allprojects 中的
google()
jcenter()
改为阿里云镜像
maven { url 'https://maven.aliyun.com/repository/google' }
maven { url 'https://maven.aliyun.com/repository/jcenter' }
maven { url 'http://maven.aliyun.com/nexus/content/groups/public' }
3. ios混合工程 Exception: MissingPluginException(No implementation found for method getAll on channel plugins.flutter.io/shared_preferences)
需要进行手动把flutter使用的模块注册下
@implementation FlutterNativePlugin
+ (void)registerWithRegistry:(NSObject<FlutterPluginRegistry>*)registry {
[FLTDeviceInfoPlugin registerWithRegistrar:[registry registrarForPlugin:@"FLTDeviceInfoPlugin"]];
[FluttertoastPlugin registerWithRegistrar:[registry registrarForPlugin:@"FluttertoastPlugin"]];
[FLTImagePickerPlugin registerWithRegistrar:[registry registrarForPlugin:@"FLTImagePickerPlugin"]];
[LaunchReviewPlugin registerWithRegistrar:[registry registrarForPlugin:@"LaunchReviewPlugin"]];
[FLTPackageInfoPlugin registerWithRegistrar:[registry registrarForPlugin:@"FLTPackageInfoPlugin"]];
[FLTPathProviderPlugin registerWithRegistrar:[registry registrarForPlugin:@"FLTPathProviderPlugin"]];
[PermissionHandlerPlugin registerWithRegistrar:[registry registrarForPlugin:@"PermissionHandlerPlugin"]];
[FLTSharedPreferencesPlugin registerWithRegistrar:[registry registrarForPlugin:@"FLTSharedPreferencesPlugin"]];
[SqflitePlugin registerWithRegistrar:[registry registrarForPlugin:@"SqflitePlugin"]];
[FLTURLLauncherPlugin registerWithRegistrar:[registry registrarForPlugin:@"FLTURLLauncherPlugin"]];
[FLTWebViewFlutterPlugin registerWithRegistrar:[registry registrarForPlugin:@"FLTWebViewFlutterPlugin"]];
}
FlutterViewController *flutterViewController = [[FlutterViewController alloc] init];
self.mUINavigationController = [[UINavigationController alloc] init];
[self.mUINavigationController pushViewController:flutterViewController animated:YES];
[GeneratedPluginRegistrant registerWithRegistry:flutterViewController];
[FlutterNativePlugin registerWithRegistry:flutterViewController];
[FlutterNativePlugin registerWithRegistrar:[flutterViewController registrarForPlugin:@"FlutterNativePlugin"]];
这是因为需要把Flutter工程里面的资源拷贝到主anndorid目录中,打开andorid工程下面的bulid.gradle 加入自动拷贝脚本
android.applicationVariants.all { variant ->
// delete previous files first
delete "${buildDir}/intermediates/merged_assets/${variant.dirName}"
variant.mergeAssets.doLast {
def sourceDir = "${buildDir}/../../../../build/jsb-default"
def resDir = "${outputDir}/res"
def flutterAssetsDir = "${buildDir}/../../../flutter_module/.android/Flutter/build/intermediates/flutter/${variant.dirName}/flutter_assets"
copy {
from "${flutterAssetsDir}"
into "${buildDir}/intermediates/merged_assets/${variant.dirName}/out/flutter_assets"
}
}
}
5. android混合工程 Exception: MissingPluginException(No implementation found for method getAll on channel plugins.flutter.io/shared_preferences)
如果是flutter_module模式,则android同样需要和ios手动注册一下:
implementation project(path: ':flutter')
implementation project(path: ':device_info')
implementation project(path: ':image_picker')
implementation project(path: ':launch_review')
implementation project(path: ':package_info')
implementation project(path: ':path_provider')
implementation project(path: ':permission_handler')
implementation project(path: ':shared_preferences')
implementation project(path: ':sqflite')
implementation project(path: ':url_launcher')
implementation project(path: ':webview_flutter')
flutterEngine.getPlugins().add(new io.flutter.plugins.imagepicker.ImagePickerPlugin());
com.iyaffle.launchreview.LaunchReviewPlugin.registerWith(shimPluginRegistry.registrarFor("com.iyaffle.launchreview.LaunchReviewPlugin"));
flutterEngine.getPlugins().add(new io.flutter.plugins.packageinfo.PackageInfoPlugin());
flutterEngine.getPlugins().add(new io.flutter.plugins.pathprovider.PathProviderPlugin());
flutterEngine.getPlugins().add(new com.baseflow.permissionhandler.PermissionHandlerPlugin());
flutterEngine.getPlugins().add(new io.flutter.plugins.sharedpreferences.SharedPreferencesPlugin());
flutterEngine.getPlugins().add(new com.tekartik.sqflite.SqflitePlugin());
flutterEngine.getPlugins().add(new io.flutter.plugins.urllauncher.UrlLauncherPlugin());
flutterEngine.getPlugins().add(new io.flutter.plugins.webviewflutter.WebViewFlutterPlugin());
Bitcode bundle could not be generated because '/***/.ios/Flutter/engine/Flutter.framework/Flutter' was built without full bitcode. All frameworks and dylibs for bitcode must be generated from Xcode Archive
情形一:有时候时候我们需要将FlutterModule中的.ios工程中的Bitcode关掉就好了
情形二:本情况适用于在情形一无效的情况下
1、修改 ios和.ios 项目bitcode修改为no
2、终端 flutter build ios --release
3、然后对.ios工程执行pod install,然后bitcode修改为no,然后archive
4、.ios的工程archive没问题的话,再对native 项目执行pod install,bitcode修改为no,然后archive