2024-01-29 17:48:49 +08:00
|
|
|
|
# 星锁APP
|
2025-05-30 18:15:53 +08:00
|
|
|
|
测试ci
|
2024-01-29 17:48:49 +08:00
|
|
|
|
星云项目组旗下的智能锁应用,其中锁相关数据接入星云平台,业务数据接入星锁自有后台。
|
|
|
|
|
|
|
|
|
|
|
|
基于Flutter技术架构,支持Android和iOS平台。
|
|
|
|
|
|
|
|
|
|
|
|
## 开发步骤
|
|
|
|
|
|
|
|
|
|
|
|
### 安装Flutter
|
|
|
|
|
|
|
|
|
|
|
|
参阅 [安装 - Flutter](https://docs.flutter.dev/get-started/install)
|
|
|
|
|
|
|
|
|
|
|
|
然后 `flutter doctor` 检查环境
|
|
|
|
|
|
|
|
|
|
|
|
### 禁用不需要的平台
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
flutter config --no-enable-macos-desktop --no-enable-windows-desktop --no-enable-linux-desktop --no-enable-web
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 安装依赖
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
flutter pub get
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 运行
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
|
|
|
|
|
|
# 运行sky渠道
|
2024-04-12 15:24:53 +08:00
|
|
|
|
flutter run --flavor sky -t lib/main_sky_full.dart
|
2024-01-29 17:48:49 +08:00
|
|
|
|
|
|
|
|
|
|
```
|
2023-07-10 17:50:31 +08:00
|
|
|
|
|
2024-01-29 16:26:02 +08:00
|
|
|
|
## 配置签名
|
2024-01-29 17:48:49 +08:00
|
|
|
|
|
|
|
|
|
|
参阅 [构建和发布 Android 应用 - 创建上载密钥库 - Flutter](https://docs.flutter.dev/deployment/android#create-an-upload-keystore)
|
|
|
|
|
|
|
2024-01-29 16:26:02 +08:00
|
|
|
|
为发布渠道创建JAVA密钥储存(密钥库)文件 `.jks`,或者 `.keystore` 文件。
|
2023-07-10 17:50:31 +08:00
|
|
|
|
|
2024-01-29 16:26:02 +08:00
|
|
|
|
```bash
|
|
|
|
|
|
keytool -genkey -v -keystore android/app/sky.jks -keyalg RSA -keysize 2048 -validity 10000 -alias upload
|
|
|
|
|
|
```
|
2023-07-10 17:50:31 +08:00
|
|
|
|
|
2024-01-29 16:26:02 +08:00
|
|
|
|
请记住你输入的主密码和键密码
|
2023-07-10 17:50:31 +08:00
|
|
|
|
|
2024-01-29 16:26:02 +08:00
|
|
|
|
因为本项目将会发布2个以上的渠道,所以密钥库也会有2个以上,请注意区分 同一个发布渠道必须使用同一个密钥库,不要生成多个。
|
2023-07-10 17:50:31 +08:00
|
|
|
|
|
2024-01-29 16:26:02 +08:00
|
|
|
|
为了编译管理方便,我们将密钥库文件放在了项目代码内。
|
|
|
|
|
|
|
|
|
|
|
|
`key.properties` 文件用于存放密钥库的相关信息,但是我们不用这个文件,而是直接在 `build.gradle` 中写入密钥库的相关信息。
|
|
|
|
|
|
因为我们将密钥库文件本身都已经储存在git中了,也就没必要再单独存放密钥信息了。
|
|
|
|
|
|
|
2024-03-05 11:17:58 +08:00
|
|
|
|
## 获取密钥库证书指纹
|
|
|
|
|
|
一般用于SDK的应用创建里面填写的资料,例如高德SDK
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
keytool -list -v -keystore android/app/sky.jks
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
输入密码(在android/app/build.gradle:38可以看到)
|
2025-09-22 17:17:00 +08:00
|
|
|
|
测试ci
|
2024-03-05 11:17:58 +08:00
|
|
|
|
一般需要的是:证书指纹-SHA1 看起来像 95:6B:***********(共59个字符)
|
|
|
|
|
|
|
2024-01-29 16:26:02 +08:00
|
|
|
|
## 编译
|
|
|
|
|
|
```bash
|
2024-04-08 13:32:47 +08:00
|
|
|
|
flutter build apk --release --flavor sky -t lib/main_sky_full.dart
|
2024-01-29 16:26:02 +08:00
|
|
|
|
```
|
2024-03-11 15:47:27 +08:00
|
|
|
|
编译后的包:
|
|
|
|
|
|
通用:build/app/outputs/apk/sky/release/app-sky-universal-release.apk
|
|
|
|
|
|
32位:build/app/outputs/apk/sky/release/app-sky-armeabi-v7a-release.apk
|
|
|
|
|
|
64位:build/app/outputs/apk/sky/release/app-sky-arm64-v8a-release.apk
|
2024-03-21 16:55:45 +08:00
|
|
|
|
|
|
|
|
|
|
注意修改“VersionCode”为版本代码
|
2024-03-11 15:47:27 +08:00
|
|
|
|
```bash
|
2024-03-22 15:27:19 +08:00
|
|
|
|
cp build/app/outputs/apk/sky/release/app-sky-armeabi-v7a-release.apk /d/www/SkyReleases/app-sky-32-release-VersionCode.apk
|
|
|
|
|
|
cp build/app/outputs/apk/sky/release/app-sky-arm64-v8a-release.apk /d/www/SkyReleases/app-sky-64-release-VersionCode.apk
|
2024-03-21 16:55:45 +08:00
|
|
|
|
cp build/app/outputs/apk/sky/release/app-sky-universal-release.apk /d/www/SkyReleases/app-sky-universal-release-VersionCode.apk
|
2024-03-11 15:47:27 +08:00
|
|
|
|
```
|
2024-01-29 16:26:02 +08:00
|
|
|
|
## 获取编译包的签名
|
|
|
|
|
|
用于APP备案,国内商店上架等
|
|
|
|
|
|
|
|
|
|
|
|
需要使用到`apksigner`工具,对于Windows来说,它在:`C:\Users\myUser\AppData\Local\Android\Sdk\build-tools\34.0.0\lib`
|
|
|
|
|
|
|
|
|
|
|
|
在 `git bash` 中我需要使用 `apksigner.bat` 来使用它;在其它系统中应该可以直接使用 `apksigner` 命令即可。
|
|
|
|
|
|
|
|
|
|
|
|
参阅:[How to find signature of apk file?](https://stackoverflow.com/questions/38558623/how-to-find-signature-of-apk-file)
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
apksigner verify --print-certs -v build/app/outputs/flutter-apk/app-sky-release.apk
|
|
|
|
|
|
```
|
2024-02-28 15:04:08 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 用于Google Play发布的指南
|
|
|
|
|
|
https://www.gstatic.com/play-apps-publisher-rapid/signing-tool/prod/pepk-src.jar
|
|
|
|
|
|
1. 下载 Play Encrypt Private Key (PEPK) 工具,请注意 [pepk-src.jar中没有主清单属性](https://stackoverflow.com/questions/44719351/googles-pepk-src-not-working)
|
|
|
|
|
|
2. 生成密钥
|
|
|
|
|
|
```bash
|
|
|
|
|
|
java -jar android/google/pepk.jar --keystore=android/app/sky.jks --alias=upload --output=android/google/google_pek.zip --include-cert --rsa-aes-encryption --encryption-key-path=android/google/encryption_public_key.pem
|
|
|
|
|
|
```
|
|
|
|
|
|
3. 上传密钥
|
|
|
|
|
|
上传android/google/google_pek.zip文件到谷歌Play管理中心
|
|
|
|
|
|
4. 编译和上传 app bundle
|
|
|
|
|
|
```bash
|
|
|
|
|
|
flutter build appbundle --release --flavor sky -t lib/main_sky.dart
|
|
|
|
|
|
```
|
2024-03-21 16:55:45 +08:00
|
|
|
|
编译后的包:`build/app/outputs/bundle/skyRelease/app-sky-release.aab`
|
|
|
|
|
|
注意修改“VersionCode”为版本代码
|
2024-03-15 10:44:50 +08:00
|
|
|
|
```bash
|
2024-03-21 16:55:45 +08:00
|
|
|
|
cp build/app/outputs/bundle/skyRelease/app-sky-release.aab /d/www/SkyReleases/app-sky-release-VersionCode.aab
|
2024-03-15 10:44:50 +08:00
|
|
|
|
```
|
2024-02-28 15:04:08 +08:00
|
|
|
|
- 注意,这里的sky.jks和google_pek.zip和encryption_public_key.pem都是sky渠道的,和谷歌账号对应。如果需要使用其他谷歌账号,需要更换这两个文件。
|
2024-03-05 09:45:38 +08:00
|
|
|
|
|
|
|
|
|
|
## 用于华为商店
|
2024-03-08 10:55:13 +08:00
|
|
|
|
1. 复制谷歌的 (PEPK) 工具
|
|
|
|
|
|
2. 生成密钥
|
2024-03-05 09:45:38 +08:00
|
|
|
|
```bash
|
|
|
|
|
|
java -jar android/huawei/pepk.jar --keystore=android/app/sky.jks --alias=upload --output=android/huawei/huawei_pek.zip --encryptionkey=034200041E224EE22B45D19B23DB91BA9F52DE0A06513E03A5821409B34976FDEED6E0A47DBA48CC249DD93734A6C5D9A0F43461F9E140F278A5D2860846C2CF5D2C3C02 --include-cert
|
|
|
|
|
|
```
|
2024-03-08 10:55:13 +08:00
|
|
|
|
3. 上传密钥
|
|
|
|
|
|
4. 编译和上传 app bundle,和谷歌的一样编译出aab文件即可
|
2024-03-11 15:47:27 +08:00
|
|
|
|
|
|
|
|
|
|
## 用于app store
|
|
|
|
|
|
|
|
|
|
|
|
下载flavor模板文件,这会创建.tmp文件夹,只需要执行一次,如果有.tmp文件夹,就不用执行这一步了
|
|
|
|
|
|
```bash
|
|
|
|
|
|
dart run flutter_flavorizr -p assets:download
|
|
|
|
|
|
dart run flutter_flavorizr -p assets:extract
|
|
|
|
|
|
```
|
|
|
|
|
|
重新生成Generated.xcconfig以更新购建物版本号等信息
|
|
|
|
|
|
```bash
|
2024-03-14 17:06:32 +08:00
|
|
|
|
flutter build ios --config-only --flavor sky
|
2024-03-11 15:47:27 +08:00
|
|
|
|
```
|
|
|
|
|
|
构建/编译
|
|
|
|
|
|
```bash
|
|
|
|
|
|
在Xcode中选择菜单 Product->archive
|
|
|
|
|
|
```
|
|
|
|
|
|
准备截图
|
|
|
|
|
|
因为模拟器只能运行debug,而不能运行release和profile,所以要修改以下运行配置:
|
|
|
|
|
|
Xcode顶部中间设备选择器左边,Runner选择下拉,选择Edit Scheme,左侧选择Run,右侧的Build Configuration选择Debug-sky
|
|
|
|
|
|
选择Runner:sky-debug 运行于模拟器
|
|
|
|
|
|
|
2024-03-12 11:19:06 +08:00
|
|
|
|
6.5寸(1242 x 2688px)截图选择机型:iphone 11 Pro Max(ios17)
|
|
|
|
|
|
5.5寸(1242 x 2208px)截图选择机型:iphone 8 Plus(ios15) (此项目在这个机型会崩溃,无法运行)
|
2024-03-11 15:47:27 +08:00
|
|
|
|
|
|
|
|
|
|
截图完成记得将Runner改回去,不然编译出来的sky是debug版的。
|
2024-03-12 11:19:06 +08:00
|
|
|
|
|
|
|
|
|
|
最后还是随便截图的,然后用PS裁剪成要求的分辨率上传了
|
2024-03-18 10:35:54 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 用于aab文件转apk
|
|
|
|
|
|
|
|
|
|
|
|
安装bundletool.jar(该文件在git忽略,每个机器需要自行下载)
|
|
|
|
|
|
```bash
|
|
|
|
|
|
wget -o android/bundletool.jar https://github.com/google/bundletool/releases/download/1.15.6/bundletool-all-1.15.6.jar
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
将aab转为apk
|
|
|
|
|
|
```bash
|
|
|
|
|
|
java -jar android/bundletool.jar build-apks --bundle=build/app/outputs/bundle/skyRelease/app-sky-release.aab \
|
|
|
|
|
|
--output=build/app/outputs/bundle/skyRelease/app-sky-release.aab.apks \
|
|
|
|
|
|
--ks=android/app/sky.jks \
|
|
|
|
|
|
--ks-pass=pass:sky2028 \
|
|
|
|
|
|
--ks-key-alias=upload \
|
|
|
|
|
|
--key-pass=pass:sky2028
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
安装apks文件到手机
|
|
|
|
|
|
```bash
|
|
|
|
|
|
java -jar android/bundletool.jar install-apks --apks=build/app/outputs/bundle/skyRelease/app-sky-release.aab.apks
|
|
|
|
|
|
```
|
2025-02-22 18:08:52 +08:00
|
|
|
|
|
|
|
|
|
|
## Jpush相关
|
|
|
|
|
|
|
|
|
|
|
|
极光推送,目前app这边只依赖极光的透传能力,推送能力通过截取极光拿到的各个厂商的推送token,然后将推送token上报到自己业务服务器直接调用各个厂商推送通道进行消息推送,所以对极光的flutter sdk进行了私有化定制改造,改造点如下:
|
|
|
|
|
|
|
|
|
|
|
|
* Android,iOS平台原生代码中截取jpush获取到的厂商推送token,将token回传到flutter业务应用层
|
|
|
|
|
|
* Android通过Jpush统一集成的各个厂商推送sdk,统一获取到token
|
|
|
|
|
|
* iOS通过原生token回调接口获取到token
|
|
|
|
|
|
* flutter端,将获取到的厂商token,厂商标识上报到业务服务器
|
|
|
|
|
|
|
|
|
|
|
|
定制jpush_flutter:http://code-internal.star-lock.cn/StarlockTeam/jpush_flutter
|