Skip to content

flutter

环境

首先把flutter doctor都过了,再来看下面的。

如果报错java不匹配:

  1. gradle版本和java版本不匹配https://docs.gradle.org/current/userguide/compatibility.html#java_runtime
    1. 更换java版本
    2. 更换flutter项目的android\gradle\wrapper\gradle-wrapper.properties中的distributionUrl=https://mirrors.cloud.tencent.com/gradle/gradle-8.4-all.zip,这里用的腾讯源,指定gradle版本。也可以手动下载zip,然后把包放到对应的gradle路径里面
  2. AndriodStudio默认的java版本与gradle不匹配,flutter默认会使用AS的jbr环境,本地的JAVA_HOME什么的并不会被使用。不过可以在项目中设置android\gradle.propertiesorg.gradle.java.home=D:/JavaTools/jdk-17来更换本地jdk,如果你要打开AS,然后Project Structure里面更换SDKs中的jbr也行,但是更麻烦,还要重启电脑。

如果是网络问题,maybe可以换源:android\build.gradle中,配置:

javascript
allprojects {
    repositories {
       maven { url 'https://maven.aliyun.com/repository/google' }
        maven { url 'https://maven.aliyun.com/repository/jcenter' }
        maven { url 'https://maven.aliyun.com/repository/public' }
    }
}

注意源只能使用https,http会报错了。

结构

<font style="background-color:rgb(232, 234, 237);">pubspec.yaml</font> 文件指定与您的应用相关的基本信息,例如其当前版本、依赖项以及其随附的资源。

<font style="color:rgb(26, 115, 232);">analysis_options.yaml</font>此文件决定了 Flutter 在分析代码时的严格程度。

lib\main.dart入口文件

打包发布

打包命令是flutter build apk

打包前可以在android\app\src\main\AndroidManifest.xml的manifest中添加<uses-permission android:name="android.permission.INTERNET" />等,来请求使用网络等权限.

图标

如果要手动设置 launcher icon 还是很麻烦的。幸运的是,这个问题被一个叫 flutter_launcher_icons 的插件解决了。所以原来那个超级麻烦的问题现在就转变为学会使用这个插件就行了。

  1. 通过 flutter pub add dev:flutter_launcher_icons来安装插件,并准备一张1024*1024的图片。
    1. 注意这里的 dev: 表示作为开发期间的依赖,flutter_launcher_icons 会出现在 dev_dependencies 下面。出现在这里的好处是等发版的时候 flutter_launcher_icons 不会被包括里 apk 中。
  2. pubspec.yaml中添加配置如下:
javascript
flutter_icons:
  image_path: "images/icon1024.png"// 这个是图片路径
  android: true 
  ios: true
  1. 执行 flutter pub run flutter_launcher_icons:main
  2. <font style="color:rgb(37, 41, 51);">android/app/src/main/res/mipap-xxx</font>

INFO

图片格式:

APP名字

````

``
javascript
flutter_native_splash:
  color: "#42a5f5"
  image: images/splash.png

然后执行flutter pub run flutter_native_splash:create运行,第一时间就会看到启动画面了。splash.png 会居中显示。

  1. splash.png 要准备 4x 的。插件会自动为我们生成小分辨率的
  2. 每次修改配置都得重新执行 flutter pub run flutter_native_splash:create
  3. 不光是配置了 android 的启动页面,ios,web 的也一起生成好了。
  4. 恢复默认,执行:flutter pub run flutter_native_splash:remove

有一个小福利。默认情况下当 flutter 开始绘制的时候, Splash Screen 就自动消失了。但这个时候,首屏的数据可能还没有准备好,还无法显示画面,我们可能还得准备一个 loading 的画面。

javascript
void main() {
  WidgetsBinding widgetsBinding = WidgetsFlutterBinding.ensureInitialized();
  FlutterNativeSplash.preserve(widgetsBinding: widgetsBinding);
  runApp(const MyApp());

  Timer(Duration(seconds: 10), () {
     FlutterNativeSplash.remove();
  });
}

还可以额外添加品牌logo

javascript
flutter_native_splash:
  color: "#42a5f5"
  image: images/splash.png
  branding: images/logo.png

签名

javascript
keytool -genkey -v -keystore ./android/sign.jks -storetype JKS -keyalg RSA
  -keysize 2048 -validity 10000 -alias key

在android目录下创建key.properties

javascript
storePassword=your_store_password
keyPassword=your_key_password
keyAlias=key
storeFile=../sign.jks

然后在android\app\build.gradle中配置:

javascript
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))

android {
    signingConfigs {
        release {
            keyAlias keystoreProperties['keyAlias']
            keyPassword keystoreProperties['keyPassword']
            storeFile file(keystoreProperties['storeFile'])
            storePassword keystoreProperties['storePassword']
        }
    }
    buildTypes {
        release {
            signingConfig signingConfigs.release
            minifyEnabled true    # 启用代码混淆
            shrinkResources true # 移除无用资源
        }
    }
}

package名

还是那个安卓配置文件,manifest添加属性package="com.yourcompany.appname",同步app下的biuld.gradle里面的package,以及其他地方的package

打包flutter build apk --release