flutter
环境
首先把flutter doctor
都过了,再来看下面的。
如果报错java不匹配:
- gradle版本和java版本不匹配https://docs.gradle.org/current/userguide/compatibility.html#java_runtime
- 更换java版本
- 更换flutter项目的
android\gradle\wrapper\gradle-wrapper.properties
中的distributionUrl=https://mirrors.cloud.tencent.com/gradle/gradle-8.4-all.zip
,这里用的腾讯源,指定gradle版本。也可以手动下载zip,然后把包放到对应的gradle路径里面
- AndriodStudio默认的java版本与gradle不匹配,flutter默认会使用AS的jbr环境,本地的JAVA_HOME什么的并不会被使用。不过可以在项目中设置
android\gradle.properties
为org.gradle.java.home=D:/JavaTools/jdk-17
来更换本地jdk,如果你要打开AS,然后Project Structure里面更换SDKs中的jbr也行,但是更麻烦,还要重启电脑。
如果是网络问题,maybe可以换源:android\build.gradle
中,配置:
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 的插件解决了。所以原来那个超级麻烦的问题现在就转变为学会使用这个插件就行了。
- 通过
flutter pub add dev:flutter_launcher_icons
来安装插件,并准备一张1024*1024的图片。- 注意这里的
dev:
表示作为开发期间的依赖,flutter_launcher_icons 会出现在 dev_dependencies 下面。出现在这里的好处是等发版的时候 flutter_launcher_icons 不会被包括里 apk 中。
- 注意这里的
- 在
pubspec.yaml
中添加配置如下:
flutter_icons:
image_path: "images/icon1024.png"// 这个是图片路径
android: true
ios: true
- 执行
flutter pub run flutter_launcher_icons:main
- 在
<font style="color:rgb(37, 41, 51);">android/app/src/main/res/mipap-xxx</font>
INFO
图片格式:
APP名字
````
``flutter_native_splash:
color: "#42a5f5"
image: images/splash.png
然后执行flutter pub run flutter_native_splash:create
运行,第一时间就会看到启动画面了。splash.png 会居中显示。
- splash.png 要准备 4x 的。插件会自动为我们生成小分辨率的
- 每次修改配置都得重新执行 flutter pub run flutter_native_splash:create
- 不光是配置了 android 的启动页面,ios,web 的也一起生成好了。
- 恢复默认,执行:
flutter pub run flutter_native_splash:remove
有一个小福利。默认情况下当 flutter 开始绘制的时候, Splash Screen 就自动消失了。但这个时候,首屏的数据可能还没有准备好,还无法显示画面,我们可能还得准备一个 loading 的画面。
void main() {
WidgetsBinding widgetsBinding = WidgetsFlutterBinding.ensureInitialized();
FlutterNativeSplash.preserve(widgetsBinding: widgetsBinding);
runApp(const MyApp());
Timer(Duration(seconds: 10), () {
FlutterNativeSplash.remove();
});
}
还可以额外添加品牌logo
flutter_native_splash:
color: "#42a5f5"
image: images/splash.png
branding: images/logo.png
签名
keytool -genkey -v -keystore ./android/sign.jks -storetype JKS -keyalg RSA
-keysize 2048 -validity 10000 -alias key
在android目录下创建key.properties
storePassword=your_store_password
keyPassword=your_key_password
keyAlias=key
storeFile=../sign.jks
然后在android\app\build.gradle
中配置:
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