1,添加启动背景图
把splash_screen_background.png背景图放在/android/app/src/main/res/drawable下面,
然后在`drawable\launch_background.xml`和`drawable-v21\launch_background.xml`下 配置:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/splash_screen_background" />
</layer-list>
2,支持刘海屏
在AndroidManifest.xml的activity标签下添加:
<activity
android:name=".MainActivity"
android:exported="true"
android:launchMode="singleTop"
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize">
<!-- 增加下面代码 支持刘海屏-->
<meta-data android:name="android.notch_support" android:value="true"/>
3,设置状态栏为透明色 (个人感觉可设置页可不设置)
在未设置前,启动后状态栏如下:
然后
在/android/app/src/main/kotlin/包名/MainActivity类下配置以下代码:
import android.graphics.Color
import android.os.Build
import android.os.Bundle
import io.flutter.embedding.android.FlutterActivity
class MainActivity : FlutterActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
val window = activity.window
//设置状态栏为透明色,fix 启动时状态栏会灰色闪一下
window.statusBarColor = Color.TRANSPARENT
}
}
}
设置后和APP页面背景色一样了,感觉这样不是很好,看不到时间了,如果APP页面背景色是其他颜色,这样设置可能可以。
4,设置启动屏全屏(紧接着步骤三)
步骤三设置后,APP启动发现启动时状态栏为黑色
这时候需要在android/app/src/main/res/values/styles.xml下配置:
<style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar">
<item name="android:windowBackground">@drawable/launch_background</item>
+ <item name="android:windowFullscreen">true</item>
</style>
5,设置APP名和快照名
1,APP名称
在AndroidManifest.xml下 修改:<application android:label="小心情" ...</application>
2,快照名中
在lib中main.dart里找到第一个MaterialApp设置 titlle='小心情'
MaterialApp(title = '小心情'...)
6,在android/build.gradle里设置applicationId和版本
defaultConfig {
applicationId "com.example.lc_mood"
minSdkVersion 19
targetSdkVersion flutter.targetSdkVersion
}
7,设置启动图标
8,设置网络访问权限
在AndroidManifest.xml下添加:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.lc_mood">
<uses-permission android:name="android.permission.INTERNET"/>
...
</manifest>
9,签名APP
1,Windows下: 暂时略
2,MAC下:
keytool -genkey -v -keystore /Users/liufeng/Desktop/flutter/keystore/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key
然后把key.jks放在应用的android的目录下,然后还是在android目录下新建一个文件:
storePassword=123456
keyPassword=123456
keyAlias=key
storeFile=../key.jks
10,配置打包签名
在应用的/android/app/build.gradle目录下
1,在android{..}上面配置:
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}
android {
...
}
2,然后在`android`代码块中添加`signingConfigs`:
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
}
}
3,最后在`buildTypes`代码块中添加`release`配置signingConfigs.release:
buildTypes {
release {
signingConfig signingConfigs.release
}
}
11,打包
1,构建全部架构的安装包 (构建出来的Release包是包含所有ABI架构的)
cd <flutter应用的android目录>
./gradlew assembleRelease
2,构建单一架构的安装包
cd <flutter应用的android目录>
flutter build apk --split-per-abi
在执行命令:后报错:
这时候需要把应用的android/build.gradle文件改一下:
把com.android.tools.build:gradle:7.1.2 改成 classpath 'com.android.tools.build:gradle:4.1.3
dependencies {
// classpath 'com.android.tools.build:gradle:7.1.2'
classpath 'com.android.tools.build:gradle:4.1.3'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
./gradlew assembleRelease构建成功后,apk包有三种架构:
然后构建单一架构安装包:
构建成功后输出打包地址命令:
✓ Built build/app/outputs/flutter-apk/app-armeabi-v7a-release.apk (12.3MB).