打包apk
1. 配置APP的图标和名称
配置APP图标
项目根目录/android/app/src/main/res/
看到很多个以mipmap-为前缀命名的文件夹,文件夹名称的后缀是对应的APP图标像素密度:
mdpi (中) ~160dpi
hdpi (高) ~240dip
xhdpi (超高) ~320dip
xxhdpi (超超高) ~480dip
xxxhdpi (超超超高) ~640dip
复制代码
将对应像素密度的图片放入对应的文件夹中,图片记得用png格式。安装的APP会根据对应的屏幕像素密度使用适应尺寸的图标,但要注意,APP图标文件最好统一使用同一个名字,方便后面配置。
可与设计师沟通,让其提供如下尺寸:
- Android:
48*48
72*72
96*96
144*144
192*192
复制代码
- IOS:
40*40
60*60
58*58
87*87
80*80
120*120
180*180
复制代码
注:IOS客户端的APP图标需要png格式外,而且不应包含任何透明区域和圆角
配置APP名称、图标和系统权限
项目根目录/android/app/src/main/AndroidManifest.xml
- application标签内部属性
android:label="flutter_app" // 为APP安装到手机上显示的名称,可支持中文(中文最长宜控制在6位,超长后面显示成...)
android:icon="@mipmap/ic_launcher" // 为APP图标用到的图片文件名称
// 这里图片文件不需要输入文件格式后缀,前面说过的要使用相同文件名,因为这里并没有按像素密度分别配置对应的图片文件
复制代码
- uses-permission标签元素:定义APP的系统权限,如:打开麦克风摄像头、获取联系人电话簿、是否允许上网等权限(具体请参考安卓开发官网)
<uses-permission android:name="android.permission.INTERNET"/> // 此默认配置了允许手机联网的权限,因为flutter和APP交换数据需要用到该权限。
复制代码
2. 生成keystore文件,并创建key.properties文件
终端输入如下命令:
flutter doctor -v
看见结果如下
C:\Progra~1\Android"Android Studio1"\jre\bin\keytool -genkey -v -keystore E:\key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key
注:记得把路径中最后的java替换成keytool。若路径中文件名带有空格,需要引号括住。
按要求输入
此时即可在你指定的路径E:下找到生成的key.jks文件。再回到项目根目录/android文件夹下,并打开粘贴下面的代码:
storePassword=<password from previous step> // 输入上一步创建KEY时输入的 密钥库 密码
keyPassword=<password from previous step> // 输入上一步创建KEY时输入的 密钥 密码
keyAlias=key
storeFile=<E:/key.jks> // key.jks的存放路径,注意为右斜杠
复制代码
最终文件内容如下:
storePassword=123456
keyPassword=123456
keyAlias=key
storeFile=E:/key.jks
复制代码
注意:jks文件和key.properties文件,千万不要共享出去
3. 配置key注册
项目根目录/android/app/build.gradle文件
- 在android {这一行前面,加入如下代码:
def keystorePropertiesFile = rootProject.file("key.properties")
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
复制代码
- 把如下代码进行替换
buildTypes {
release {
signingConfig signingConfigs.debug
}
}
复制代码
替换成的代码:
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
复制代码
- 找到defaultConfig配置项,录入APPID和版本号,请参考版本号命名控制
defaultConfig {
applicationId "com.example.flutterapp" //APPID
minSdkVersion 16 //可运行应用的最低版本的 Android 平台,由该平台的 API 级别标识符指定
targetSdkVersion 27 //指定运行应用的目标 API 级别。在某些情况下,这允许应用使用在目标 API 级别中定义的清单元素或行为,而不是仅限于使用那些针对最低 API 级别定义的元素或行为。
versionCode flutterVersionCode.toInteger() //内部版本号
versionName flutterVersionName //对外公布的版本号
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
复制代码
4. 编译生成apk文件
终端输入如下命令:
flutter build apk
需要等待一段时间执行完毕
安装apk到Android的模拟器/真机
终端输入如下命令:
flutter install
注:打开Android模拟器或者电脑连上真机(且打开开发者模式)执行上面命令。