Skip to content

如何打包发布应用

当我们的应用开发完成后,下一步要做的就是对应用进行打包。本文将介绍如何对 RN 项目进行打包,分为两种情况:

React Native CLI 环境项目应用打包#

Android 要求所有应用都有一个数字签名才会被允许安装在用户手机上,所以在把应用发布到应用市场之前,你需要先生成一个签名的 AAB 或 APK 包(Google Play 现在要求 AAB 格式,而国内的应用市场目前仅支持 APK 格式。但无论哪种格式,下面的签名步骤是一样的)。

生成一个签名密钥#

你可以用keytool命令生成一个私有密钥。在 Windows 上keytool命令放在 JDK 的 bin 目录中(比如C:\Program Files\Java\jdkx.x.x_x\bin),你可能需要在命令行中先进入那个目录才能执行此命令。

keytool -genkeypair -v -storetype PKCS12 -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

这条命令会要求你输入密钥库(keystore)和对应密钥的密码,然后设置一些发行相关的信息。最后它会生成一个叫做 my-release-key.keystore 的密钥库文件。

在运行上面这条语句之后,密钥库里应该已经生成了一个单独的密钥,有效期为 10000 天。—alias 参数后面的别名是将来为应用签名时所需要用到的,所以记得记录这个别名。

切换目录到项目根目录下,具体操作如下图所示:

image-20220720134202756

注意:请记得妥善地保管好你的密钥库文件,一般不要上传到版本库或者其它的地方。

设置 gradle 变量#

  1. 把my-release-key.keystore文件放到你工程中的android/app文件夹下。

  2. 编辑~/.gradle/gradle.properties(全局配置,对所有项目有效)或是项目目录/android/gradle.properties(项目配置,只对所在项目有效)。如果没有gradle.properties文件你就自己创建一个,添加如下的代码(注意把其中的****替换为相应密码)

注意:~符号表示用户目录,比如 windows 上可能是C:\Users\用户名,而 mac 上可能是/Users/用户名。

MYAPP_RELEASE_STORE_FILE=my-release-key.keystore
MYAPP_RELEASE_KEY_ALIAS=my-key-alias
MYAPP_RELEASE_STORE_PASSWORD=*****
MYAPP_RELEASE_KEY_PASSWORD=*****

具体操作如下图所示:

image-20220720134220560

其中最后两行的 PASSWORD 要替换为上面在创建 my-release-key.keystore 的密钥库文件时所输入的密码。

把签名配置加入到项目的 gradle 配置中#

编辑你项目目录下的android/app/build.gradle,添加如下的签名配置:

...
android {
...
defaultConfig { ... }
signingConfigs {
release {
if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) {
storeFile file(MYAPP_RELEASE_STORE_FILE)
storePassword MYAPP_RELEASE_STORE_PASSWORD
keyAlias MYAPP_RELEASE_KEY_ALIAS
keyPassword MYAPP_RELEASE_KEY_PASSWORD
}
}
}
buildTypes {
release {
...
signingConfig signingConfigs.release
}
}
}
...

具体操作如下图所示:

image-20220720134237710

生成发行 APK 包#

只需在终端中运行以下命令:

$ cd android
$ ./gradlew assembleRelease

cd android表示进入 android 目录(如果你已经在 android 目录中了那就不用输入了)。

打包成功。

image-20220720134252892

最终,打包好的 apk 文件存放于 项目根目录/android/app/build/outputs/apk/release/

修改 APP 名称与图标#

一般来讲,我们需要替换掉默认的应用图标和名称。方法如下:

<resources>
<string name="app_name">你的应用名称</string>
</resources>
image-20220720134309505

替换之后重新打包项目即可。

Expo 环境应用打包#

expo 中要打包项目非常简单。启动项目后,在浏览器端的控制台页面,选择“Publish or republish project”选项。

image-20220720134335005

在右边的面板中,填写对应的信息,如下图:

image-20220720134431493

之后点击【Publish project】按钮进行打包。打包完成后,会在控制台提示我们打包已经完成。

image-20220720134455712

当出现该提示时,说明打包的应用已被放到 expo 官网了。访问这个链接,可以看到我们发布的项目。

image-20220720134511653

点击【Builds】,可以看到打包后的应用的详细信息,在【Status】那一栏提供了下载链接,我们可以下载打包好的 apk 文件,来进行发布。

image-20220720134525640

当然,我们也可以通过命令的形式来进行打包,在 app.json 文件中,可以进行更加详细的配置:

{
"expo": {
"name": "expo_app",
"slug": "expo_app",
"version": "1.0.0",
"orientation": "portrait",
"icon": "./assets/icon.png",
"splash": {
"image": "./assets/splash.png",
"resizeMode": "contain",
"backgroundColor": "#ffffff"
},
"sdkVersion": "38.0.0",
"updates": {
"fallbackToCacheTimeout": 0
},
"assetBundlePatterns": [
"**/*"
],
"ios": {
"supportsTablet": true
},
"web": {
"favicon": "./assets/favicon.png"
},
"android": {
"package": "com.test.expo_app"
},
"description": ""
}
}

在该配置文件中,主要就是配置了应用的图标、版本等信息。

详细的配置选项,可以参阅:https://docs.expo.io/versions/latest/config/app/

接下来通过 expo start 启动应用,然后新开一个窗口,通过 exp build:android 来进行打包。

注:所以在上面的 app.json 中,一定要有 android 这个配置项。

具体操作如下图所示:

image-20220720134546250

整个打包过程会比较长,因为应用也会先被存储到 expo 官网。

打包完成后,expo 会给我们一个链接,通过该链接可以下载打包的 apk 文件,然后就可以进行发布了。