zl程序教程

您现在的位置是:首页 >  移动开发

当前栏目

flutter项目如何打包(android)

2023-09-11 14:20:21 时间

打包前要做的

1.更换图标

andriod–》app–app–》src—》main-》Java----》res–》minpmap

image-20201109212407881

其实这个打包的坑还是比较多的,官方文档显然是站在大神级程序员的角度写的,所以如果你看文档,特别是前端,那基本是打不成功的。

不要怕,我这里就详细的把打包的过程和坑给大家演示一下。

1.配置APP的图标

想配置APP的图片,你需要找到下面的目录:

项目根目录/android/app/src/main/res/

进入之后你会看到很多mipmap-为前缀命名的文件夹,后边的是像素密度,可以看出图标的分辨率。

  • mdpi (中) ~160dpi

  • hdpi (高) ~240dip

  • xhdpi (超高) ~320dip

  • xxhdpi (超超高) ~480dip

  • xxxhdpi (超超超高) ~640dip

将对应像素密度的图片放入对应的文件夹中,图片记得用png格式,记得名字要统一,才能一次性进行配置。

2.修改APP名称

在这个文件下

android\app\src\main\AndroidManifest.xml

AndroidManifest.xml 文件

这个文件主要用来配置APP的名称、图标和系统权限,所在的目录在:

项目根目录/android/app/src/main/AndroidManifest.xml

android:label="flutter_app"   //配置APP的名称,支持中文
android:icon="@mipmap/ic_launcher" //APP图标的文件名称

3.生成 keystore

这里的坑挺多的,小伙伴一定要注意。官方写的非常简单,只要在终端运行如下代码就可以成功,但事实是报错。

keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key

keytool -genkey -v -keystore key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key

报错截图如下:

image-20201109214719564

根本找不到这个目录,真的很坑,其实我们只是没有配置环境变量。但是为了一个包配置环境变量是不知道的。

这时候可以用下面的命令找到keytool.exe的位置。

flutter doctor -v

这时候你直接拷贝命令并进行输入,但这里也有个坑,就是如果文件夹中间带有空空,你需要用带引号扩上。

image-20201110092013010

D:\Program\Android\'Android Studio'\jre\bin\keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key

这就可以了吗?那你就太天真了,还是会报错。

image-20201109215323434

image-20201109215104718

这个错误的主要问题是目录不存在和没有写权限,所以我们要更换一个有写权限的目录。我们把命令改成了下面的形式。

D:\Program\Android\'Android Studio'\jre\bin\keytool -genkey -v -keystore D:\key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key

这时候就可以创建成功了。

如果创建不成功,显示:

keytool 错误: java.lang.Exception: 未生成密钥对, 别名 <key> 已经存在

那么你的D盘下面肯定之前 已经生成了key.jks文件,删除即可

image-20201109220308872

你的D盘下面就会有一个Jks的文件,记住这个文件不能共享给任何人。

有了这个key.jks文件后,可以到项目目录下的android文件夹下,创建一个名为key.properties的文件,并打开粘贴下面的代码。

storePassword=<password from previous step>    //输入上一步创建KEY时输入的 密钥库 密码
keyPassword=<password from previous step>    //输入上一步创建KEY时输入的 密钥 密码
keyAlias=key
storeFile=<E:/key.jks>    //key.jks的存放路径

我的文件最后是这样的

storePassword=666666 
keyPassword=666666   
keyAlias=key
storeFile=<D:/key.jks>    

image-20201109220623861

storePassword=123123
keyPassword=123123
keyAlias=key
storeFile=D:/key.jks

这个工作中也不要分享出去哦,这个Key就算生成成功了。

配置key注册

key生成好后,需要在build.gradle文件中进行配置。这个过程其实很简单,就是粘贴复制一些东西,你是不需要知道这些文件的具体用处的。

第一项:

进入项目目录的/android/app/build.gradle文件,在

android{

}

这一行前面,加入如下代码:

def keystorePropertiesFile = rootProject.file("key.properties")
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
android{

}

把如下代码进行替换

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
    }
}

生成apk

直接在终端中输入:

flutter build apk

这时候就打包成功了,剩下的安装过程我就省略,不作过多的介绍了。

报错处理:

https://blog.csdn.net/u011809714/article/details/54860979

keytool -list -v -keystore “D:\key.jks”

修改密码

keytool -storepasswd -keystore "D:\key.jks"
keytool -keypasswd -keystore "D:\key.jks" -alias key

Flutter 项目打包 - Android

创建签名

  • 下载并安装JDK,详情问度娘

  • 创建签名

keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key
keytool -genkey -alias android.jks -keyalg RSA -storetype PKCS12 -validity 36500 -keystore android.jks
# 创建一个证书文件,名为 android.jks,别名也为 android.jks,加密算法采用 RSA,有效期为 100年,行业标准格式 PKCS12。
注:



-genkey 生成文件
-alias 别名
-keyalg 加密算法
-validity 有效期
-keystore 文件名
-storetype PKCS12 行业标准格式 PKCS12
123456789
  • 按照指令依次填写要求的内容,最后填写完成输入 y 确认信息

  • 查看证书的具体信息

keytool -list -v -keystore "android.jks"

应用配置签名信息

  • 在应用的android 创建文件 key.properties
=========== 粘贴如下代码 ==================
storePassword=<password from previous step>    //输入上一步创建KEY时输入的 密钥库 密码
keyPassword=<password from previous step>    //输入上一步创建KEY时输入的 密钥 密码
keyAlias=android.jks // 别名
storeFile=   //key.jks的存放路径

=========== 示例 ==================
storePassword=123456
keyPassword=123456
keyAlias=android.jks
storeFile=C:/Users/tingt/Desktop/android.jks
  • 进入项目目录的/android/app/build.gradle文件,在文件顶部加入如下代码
// 寻找签名配置文件
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
    }
}

打包、安装应用

  • 打包
flutter build apk
  • 安装
adb install C:\Users\tingt\Desktop\flutter_app\build\app\outputs\apk\release\app-release.apk
def keystorePropertiesFile = rootProject.file("key.properties")
def keystoreProperties = new 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 }
debug {
    signingConfig signingConfigs.debug }}}