2024-03-05 11:17:58 +08:00

108 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 星锁APP
星云项目组旗下的智能锁应用,其中锁相关数据接入星云平台,业务数据接入星锁自有后台。
基于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渠道
flutter run --flavor sky -t lib/main_sky.dart
```
## 配置签名
参阅 [构建和发布 Android 应用 - 创建上载密钥库 - Flutter](https://docs.flutter.dev/deployment/android#create-an-upload-keystore)
为发布渠道创建JAVA密钥储存(密钥库)文件 `.jks`,或者 `.keystore` 文件。
```bash
keytool -genkey -v -keystore android/app/sky.jks -keyalg RSA -keysize 2048 -validity 10000 -alias upload
```
请记住你输入的主密码和键密码
因为本项目将会发布2个以上的渠道所以密钥库也会有2个以上请注意区分 同一个发布渠道必须使用同一个密钥库,不要生成多个。
为了编译管理方便,我们将密钥库文件放在了项目代码内。
`key.properties` 文件用于存放密钥库的相关信息,但是我们不用这个文件,而是直接在 `build.gradle` 中写入密钥库的相关信息。
因为我们将密钥库文件本身都已经储存在git中了也就没必要再单独存放密钥信息了。
## 获取密钥库证书指纹
一般用于SDK的应用创建里面填写的资料例如高德SDK
```bash
keytool -list -v -keystore android/app/sky.jks
```
输入密码在android/app/build.gradle:38可以看到
一般需要的是:证书指纹-SHA1 看起来像 95:6B:***********共59个字符
## 编译
```bash
flutter build apk --split-per-abi --release --flavor sky -t lib/main_sky.dart
```
## 获取编译包的签名
用于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
```
## 用于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
```
然后文件在:`build/app/outputs/bundle/skyRelease/app-sky-release.aab`
- 注意这里的sky.jks和google_pek.zip和encryption_public_key.pem都是sky渠道的和谷歌账号对应。如果需要使用其他谷歌账号需要更换这两个文件。
## 用于华为商店
```bash
java -jar android/huawei/pepk.jar --keystore=android/app/sky.jks --alias=upload --output=android/huawei/huawei_pek.zip --encryptionkey=034200041E224EE22B45D19B23DB91BA9F52DE0A06513E03A5821409B34976FDEED6E0A47DBA48CC249DD93734A6C5D9A0F43461F9E140F278A5D2860846C2CF5D2C3C02 --include-cert
```