app-starlock/README.md
2025-09-22 17:17:00 +08:00

184 lines
7.3 KiB
Markdown
Executable File
Raw Permalink 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
测试ci
星云项目组旗下的智能锁应用,其中锁相关数据接入星云平台,业务数据接入星锁自有后台。
基于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_full.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可以看到
测试ci
一般需要的是:证书指纹-SHA1 看起来像 95:6B:***********共59个字符
## 编译
```bash
flutter build apk --release --flavor sky -t lib/main_sky_full.dart
```
编译后的包:
通用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
注意修改“VersionCode”为版本代码
```bash
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
cp build/app/outputs/apk/sky/release/app-sky-universal-release.apk /d/www/SkyReleases/app-sky-universal-release-VersionCode.apk
```
## 获取编译包的签名
用于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`
注意修改“VersionCode”为版本代码
```bash
cp build/app/outputs/bundle/skyRelease/app-sky-release.aab /d/www/SkyReleases/app-sky-release-VersionCode.aab
```
- 注意这里的sky.jks和google_pek.zip和encryption_public_key.pem都是sky渠道的和谷歌账号对应。如果需要使用其他谷歌账号需要更换这两个文件。
## 用于华为商店
1. 复制谷歌的 (PEPK) 工具
2. 生成密钥
```bash
java -jar android/huawei/pepk.jar --keystore=android/app/sky.jks --alias=upload --output=android/huawei/huawei_pek.zip --encryptionkey=034200041E224EE22B45D19B23DB91BA9F52DE0A06513E03A5821409B34976FDEED6E0A47DBA48CC249DD93734A6C5D9A0F43461F9E140F278A5D2860846C2CF5D2C3C02 --include-cert
```
3. 上传密钥
4. 编译和上传 app bundle和谷歌的一样编译出aab文件即可
## 用于app store
下载flavor模板文件这会创建.tmp文件夹只需要执行一次如果有.tmp文件夹就不用执行这一步了
```bash
dart run flutter_flavorizr -p assets:download
dart run flutter_flavorizr -p assets:extract
```
重新生成Generated.xcconfig以更新购建物版本号等信息
```bash
flutter build ios --config-only --flavor sky
```
构建/编译
```bash
在Xcode中选择菜单 Product->archive
```
准备截图
因为模拟器只能运行debug而不能运行release和profile所以要修改以下运行配置
Xcode顶部中间设备选择器左边Runner选择下拉选择Edit Scheme左侧选择Run右侧的Build Configuration选择Debug-sky
选择Runnersky-debug 运行于模拟器
6.5寸1242 x 2688px截图选择机型iphone 11 Pro Maxios17
5.5寸1242 x 2208px截图选择机型iphone 8 Plusios15 (此项目在这个机型会崩溃,无法运行)
截图完成记得将Runner改回去不然编译出来的sky是debug版的。
最后还是随便截图的然后用PS裁剪成要求的分辨率上传了
## 用于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
```
## Jpush相关
极光推送目前app这边只依赖极光的透传能力推送能力通过截取极光拿到的各个厂商的推送token然后将推送token上报到自己业务服务器直接调用各个厂商推送通道进行消息推送所以对极光的flutter sdk进行了私有化定制改造改造点如下
* AndroidiOS平台原生代码中截取jpush获取到的厂商推送token将token回传到flutter业务应用层
* Android通过Jpush统一集成的各个厂商推送sdk统一获取到token
* iOS通过原生token回调接口获取到token
* flutter端将获取到的厂商token厂商标识上报到业务服务器
定制jpush_flutterhttp://code-internal.star-lock.cn/StarlockTeam/jpush_flutter