转载请注明出处

Flutter 打包安卓项目

为什么要生成签名文件

  1. 应用程序升级:只有用同一个证书进行签名,安卓系统才会允许安装升级的应用程序。如果采用了不同的证书签名,那么安卓系统会要求你的应用程序采用不同的包名称,这样就相当于安装了一个全新的应用。如果想要升级应用包名和证书签名都必须完全一致。
  2. 应用程序模块化:Android系统可以允许同一个证书签名的多个应用程序在一个进程里运行,系统实际把他们作为一个单个的应用程序,此时就可以把我们的应用程序以模块的方式进行部署,而用户可以独立的升级其中的一个模块
  3. 代码或者数据共享:Android提供了基于签名的权限机制,那么一个应用程序就可以为另一个以相同证书签名的应用程序公开自己的功能。以同一个证书对多个应用程序进行签名,利用基于签名的权限检查,你就可以在应用程序间以安全的方式共享代码和数据了。不同的应用程序之间,想共享数据,或者共享代码,那么要让他们运行在同一个进程中,而且要让他们用相同的证书签名。

生成签名文件

做前端开发的朋友电脑上一般都没有安装过 JavaJDK 在生成签名文件前先进行安装 JavaJDK,因为生成工具是 JavaJDK 提供的。

官网下载: https://www.oracle.com/java/technologies/javase-jdk13-downloads.html

华为镜像站(推荐): https://repo.huaweicloud.com/java/jdk/

通过命令行生成keystore文件

在命令行输入 java -version 检测是否配置过环境变量

1
2
3
4
# 如果没有配置,自行配置下
Windows 路径一般是在 C:\Program Files\Java\jdkx.x.x.\bin

MacOS 按照好就自动配置好了

输入keytool命令生成

1
keytool -genkey -alias android.keystore -keyalg RSA -validity 20000 -keystore android.keystore
  1. keystore 参数后的值:android.keystore, 表示一会儿要生成的那个 签名文件的名称;请先保存好这个名称,因为后面发布项目期间会用到它。
  2. alias 参数后面的值:android.keystore,后续发布项目期间也会用到,因此也需要保存好这个参数值;注意:这个参数的值可以根据自己的需要进行自定制。
  3. 一定要记住相关口令密码
  4. Windows 生成好后的文件一般在 C:\Users\用户名\android.keystore
  5. MacOs 生成后的文件一般在 Users/用户名/key.jksUsers/taotao/key.jks
  6. (小声哔哔,生成后会提示文件路径)

生成提示

配置项目

引用 keystore

在项目目录下创建 /android/key.properties 文件,内容如下

1
2
3
4
storePassword=密码
keyPassword=密码
keyAlias=android.keystore
storeFile=key目录/android.keystore

上面的中文部分都需要替换

配置 build.gradle

编辑文件 <project dir>android/app/build.gradle

1
2
3
4
5
6
7
// 以下是改动的文件
def keystorePropertiesFile = rootProject.file("key.properties")
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))

// 在这行的上面进行复制
// android {
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// 替换
buildTypes {
release {
// TODO: Add your own signing config for the release build.
// Signing with the debug keys for now, so `flutter run --release` works.
signingConfig signingConfigs.debug
}
}

// 替换为
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}

构建发布版(relase)APK

1
2
3
cd <project dir>

flutter build apk

构建时会遇到的一些问题

如果构建时长时间未响应,可能是我们的长城给拦住了包下载请求,这时就需要我们替换到阿里的镜像文件。

编辑 build.gradle

编辑文件:<project dir>android/build.gradle
注意看文件路径和上面配置的那个文件不是一个文件哦
找到 buildscriptallprojects 进行修改如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
buildscript {
ext.kotlin_version = '1.3.50'
repositories {
// 这里做了修改,使用国内阿里的代理
// google()
// jcenter()
maven{ url 'https://maven.aliyun.com/repository/google' }
maven{ url 'https://maven.aliyun.com/repository/jcenter' }
maven{url 'http://maven.aliyun.com/nexus/content/groups/public'}
}
}

allprojects {
repositories {
// 这里做了修改,使用国内阿里的代理
// google()
// jcenter()
maven{ url 'https://maven.aliyun.com/repository/google' }
maven{ url 'https://maven.aliyun.com/repository/jcenter' }
maven{url 'http://maven.aliyun.com/nexus/content/groups/public'}
}
}

编辑 flutter.gardle 文件

这个文件是Flutter的,要看安装Flutter的时候这个文件安装在哪的了
我的路径如下 /Users/用户名/dev/flutter/packages/flutter_tools/gradle/flutter.gradle

1
2
3
4
5
6
7
8
9
10
11
12
13
buildscript {
repositories {
// 这里做了修改,使用国内阿里的代理
// google()
// jcenter()
maven{ url 'https://maven.aliyun.com/repository/google' }
maven{ url 'https://maven.aliyun.com/repository/jcenter' }
maven{url 'http://maven.aliyun.com/nexus/content/groups/public'}\
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.0'
}
}

现在基本配置完毕,并使用阿里的镜像文件地址
如果还有问题可以通过下方联系我

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×