2025-07-23 01:55:25 +00:00
2024-05-18 09:37:50 +08:00
2025-06-05 14:31:39 +08:00
2025-05-08 11:03:25 +08:00
2025-07-03 15:22:12 +08:00
2024-06-05 18:38:03 +08:00
2025-01-10 15:02:50 +08:00
2024-05-30 10:10:22 +08:00
2024-05-18 09:37:50 +08:00
2024-05-18 09:37:50 +08:00

星锁APP

测试ci 星云项目组旗下的智能锁应用,其中锁相关数据接入星云平台,业务数据接入星锁自有后台。

基于Flutter技术架构支持Android和iOS平台。

开发步骤

安装Flutter

参阅 安装 - Flutter

然后 flutter doctor 检查环境

禁用不需要的平台

flutter config --no-enable-macos-desktop --no-enable-windows-desktop --no-enable-linux-desktop --no-enable-web

安装依赖

flutter pub get

运行


# 运行sky渠道
flutter run --flavor sky -t lib/main_sky_full.dart

配置签名

参阅 构建和发布 Android 应用 - 创建上载密钥库 - Flutter

为发布渠道创建JAVA密钥储存(密钥库)文件 .jks,或者 .keystore 文件。

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

keytool -list -v -keystore android/app/sky.jks

输入密码在android/app/build.gradle:38可以看到

一般需要的是:证书指纹-SHA1 看起来像 95:6B:***********共59个字符

编译

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”为版本代码

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?

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中没有主清单属性
  2. 生成密钥
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
  1. 上传密钥 上传android/google/google_pek.zip文件到谷歌Play管理中心
  2. 编译和上传 app bundle
flutter build appbundle --release --flavor sky -t lib/main_sky.dart

编译后的包:build/app/outputs/bundle/skyRelease/app-sky-release.aab 注意修改“VersionCode”为版本代码

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. 生成密钥
java -jar android/huawei/pepk.jar --keystore=android/app/sky.jks --alias=upload --output=android/huawei/huawei_pek.zip --encryptionkey=034200041E224EE22B45D19B23DB91BA9F52DE0A06513E03A5821409B34976FDEED6E0A47DBA48CC249DD93734A6C5D9A0F43461F9E140F278A5D2860846C2CF5D2C3C02 --include-cert
  1. 上传密钥
  2. 编译和上传 app bundle和谷歌的一样编译出aab文件即可

用于app store

下载flavor模板文件这会创建.tmp文件夹只需要执行一次如果有.tmp文件夹就不用执行这一步了

dart run flutter_flavorizr -p assets:download
dart run flutter_flavorizr -p assets:extract

重新生成Generated.xcconfig以更新购建物版本号等信息

flutter build ios --config-only --flavor sky

构建/编译

在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忽略每个机器需要自行下载)

wget -o android/bundletool.jar https://github.com/google/bundletool/releases/download/1.15.6/bundletool-all-1.15.6.jar

将aab转为apk

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文件到手机

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

Description
锁通通APP
Readme 134 MiB
Languages
Dart 94.2%
Objective-C 3.3%
C 0.8%
Python 0.4%
Shell 0.4%
Other 0.7%