From c881790eb59bf1f0a0c59f466d3dc94dbd100862 Mon Sep 17 00:00:00 2001 From: GeJiaXiang <353358601@qq.com> Date: Mon, 29 Jan 2024 16:26:02 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=A3=E5=91=B3=F0=9F=98=8B:=20=E4=B8=8D?= =?UTF-8?q?=E5=90=8C=E5=8F=A3=E5=91=B3=E4=BD=BF=E7=94=A8=E5=90=84=E8=87=AA?= =?UTF-8?q?=E7=9A=84Android=E5=AF=86=E9=92=A5=E5=BA=93=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E8=BF=9B=E8=A1=8C=E6=89=93=E5=8C=85=E7=AD=BE=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- star_lock/README.md | 37 +++++++++--- star_lock/android/.gitignore | 8 ++- star_lock/android/app/build.gradle | 72 +++++++++++++++--------- star_lock/android/app/sky.jks | Bin 0 -> 2744 bytes star_lock/android/app/starlock.keystore | Bin 0 -> 2700 bytes star_lock/android/app/xhj.jks | Bin 0 -> 2744 bytes star_lock/flavorizr.yaml | 5 ++ 7 files changed, 85 insertions(+), 37 deletions(-) create mode 100644 star_lock/android/app/sky.jks create mode 100644 star_lock/android/app/starlock.keystore create mode 100644 star_lock/android/app/xhj.jks diff --git a/star_lock/README.md b/star_lock/README.md index debff993..602ec153 100644 --- a/star_lock/README.md +++ b/star_lock/README.md @@ -2,15 +2,36 @@ A new Flutter project. -## Getting Started +## 配置签名 +为发布渠道创建JAVA密钥储存(密钥库)文件 `.jks`,或者 `.keystore` 文件。 -This project is a starting point for a Flutter application. +```bash +keytool -genkey -v -keystore android/app/sky.jks -keyalg RSA -keysize 2048 -validity 10000 -alias upload +``` -A few resources to get you started if this is your first Flutter project: +请记住你输入的主密码和键密码 -- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab) -- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook) +因为本项目将会发布2个以上的渠道,所以密钥库也会有2个以上,请注意区分 同一个发布渠道必须使用同一个密钥库,不要生成多个。 -For help getting started with Flutter development, view the -[online documentation](https://docs.flutter.dev/), which offers tutorials, -samples, guidance on mobile development, and a full API reference. +为了编译管理方便,我们将密钥库文件放在了项目代码内。 + +`key.properties` 文件用于存放密钥库的相关信息,但是我们不用这个文件,而是直接在 `build.gradle` 中写入密钥库的相关信息。 +因为我们将密钥库文件本身都已经储存在git中了,也就没必要再单独存放密钥信息了。 + +## 编译 +```bash +flutter build apk --split-per-abi --release --flavor dev -t lib/main_dev.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 +``` diff --git a/star_lock/android/.gitignore b/star_lock/android/.gitignore index 6f568019..b0d3c96a 100644 --- a/star_lock/android/.gitignore +++ b/star_lock/android/.gitignore @@ -8,6 +8,8 @@ GeneratedPluginRegistrant.java # Remember to never publicly share your keystore. # See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app -key.properties -**/*.keystore -**/*.jks +# 因为我们要管理多个项目,所以这里不要忽略keystore +# 而且我们的代码库是私有的,不存在泄露问题 +#key.properties +#**/*.keystore +#**/*.jks diff --git a/star_lock/android/app/build.gradle b/star_lock/android/app/build.gradle index 4b2998cc..9cb9cf97 100644 --- a/star_lock/android/app/build.gradle +++ b/star_lock/android/app/build.gradle @@ -28,7 +28,27 @@ apply plugin: 'kotlin-android' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { - + signingConfigs { + pre { + storeFile file("starlock.keystore") + storePassword '123456' + keyAlias = 'starlock' + keyPassword '123456' + } + sky { + // CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown + storeFile file("sky.jks") + storePassword 'sky2028' + keyAlias = 'upload' + keyPassword 'sky0s9x' + } + xhj { + storeFile file("xhj.jks") + storePassword 'xhj8872' + keyAlias = 'upload' + keyPassword 'xhj3md9' + } + } // ----- BEGIN flavorDimensions (autogenerated by flutter_flavorizr) ----- flavorDimensions "flavor-type" @@ -46,18 +66,21 @@ android { sky { dimension "flavor-type" applicationId "com.skychip.lock" + signingConfig signingConfigs.sky resValue "string", "app_name", "锁通通" } xhj { dimension "flavor-type" applicationId "com.xhjcn.lock" + signingConfig signingConfigs.xhj resValue "string", "app_name", "鑫锁" } } // ----- END flavorDimensions (autogenerated by flutter_flavorizr) ----- - compileSdkVersion flutter.compileSdkVersion + + compileSdkVersion flutter.compileSdkVersion ndkVersion flutter.ndkVersion lintOptions{ @@ -81,7 +104,6 @@ android { defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "cn.starlock.lock" // You can update the following values to match your application needs. // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration. @@ -92,37 +114,35 @@ android { versionCode flutterVersionCode.toInteger() versionName flutterVersionName + signingConfig signingConfigs.pre +// 为减少体积,使用不同架构分包发布编译选项 flutter build apk --split-per-abi +// 所以需要禁用ndk在同一个个包中包含多个架构 ndk { //设置支持的SO库架构(开发者可以根据需要,选择一个或多个平台的so) - abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86","x86_64" +// abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86","x86_64" + } + // armeabi 是 32位的,armeabi-v7a 是 32位的,arm64-v8a 是 64位的 +// armeabi: 第5代、第6代的ARM处理器,早期的手机用的比较多。 +// armeabi-v7a: 第7代及以上的 ARM 处理器。 +// arm64-v8a: 第8代、64位ARM处理器,2016年之后中高端的手机,比如骁龙8系列,麒麟9系列,联发科1000+等。 +// x86: 平板、模拟器用得比较多。 +// x86_64: 64位的平板。 +// 2011年以后生产的机子基本上都是armeabi-v7a 及以上了 + splits { + abi { + enable true + reset() + include 'armeabi-v7a', 'arm64-v8a' + universalApk false + } } } - - signingConfigs { - release { - storeFile file("starlock.keystore") - storePassword '123456' - keyAlias = 'starlock' - keyPassword '123456' - } - debug { - storeFile file("starlock.keystore") - storePassword '123456' - keyAlias = 'starlock' - keyPassword '123456' - } - } - buildTypes { release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig signingConfigs.release + productFlavors.sky.signingConfig signingConfigs.sky + productFlavors.xhj.signingConfig signingConfigs.xhj } debug { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --debug` works. - signingConfig signingConfigs.debug } } } diff --git a/star_lock/android/app/sky.jks b/star_lock/android/app/sky.jks new file mode 100644 index 0000000000000000000000000000000000000000..e0c4d26d154ae120f2b6a6e3a1ab9ac4f79fe8bf GIT binary patch literal 2744 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 U((`$e4qOyCHA_YI|0{z22@L@NPXGV_ literal 0 HcmV?d00001 diff --git a/star_lock/android/app/starlock.keystore b/star_lock/android/app/starlock.keystore new file mode 100644 index 0000000000000000000000000000000000000000..3068140601386eb67d2b9246d6cb78a057dc0198 GIT binary patch literal 2700 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 h3KeVtM(*!a2f3qWQG3_okg*n=fBEu{-1x zOtz*hGqx8g4B1A)+kNhRdY}90-Vf(F&-wk&|9t#E2Ze{!1KHS7c*tE&@Y!fg^bU-T zi>(k3F#_Qs`oFLq3eQpXUlPX?5S}CN7tZ=sX`DR&aX}$$z(PES)-Q-gIsbNWz)-hP z>i>*Tlq?7yb&xf1v_X3PzRoPJ@tlw_mG7{Njp<$6yRZiqj*0LtJN9hnB!!VAM~*iS)|8{Z z8x#1ZVJCpkQ=?bo)-S%WPPUE?ioZ+B9WqE#ow7Jqd;8O!4mZ}--j z*<%-I>*MYV{Fp;Irs=^enj_C<0GaBk1PFoCTaQ})4WC* zll~T&iw;+rX#4~Hah~$=>nBNPpf)4t!&vh+AJUXrR;<86Q*RtTp}bf>8zTWQ@|lLlO1@_(;fEsBEb3n&^_u`{Uli-Y8dHGKzjhyRwmCL6cPDGNhd z;Y^dNdB~4XM9+g2Ucw~z?rV`IV_4w?@s334h8qxRI&Zuwnz5@|z&N|gU$tGauZ7;s z#7qh6>ye_dar(syZ6b2i{;BPzf*W&6Dy9c6Sd}anzKgOL^N=+55$z0(hxHSzsc+86 zZA%_R5^r}zpX=$%n__sk7#cd*Yr0#0@9Y%O!XQ%Kpy4NxSN#gBunAr}-aRzOOKR+!-CzMAu z%zuax`}6xfS3lbr+_cHn1`{l6(Y^mwxkIC6Huradq2Z{q_?nW9oUjBO7wmwhvX)-U zXJ`nG4DefU-JvIzm8Qn-NF+68aE%)RLq}6GGe0uSOGTVWSy=&fgD@ZU0hlk=Q;WK- z*I6(Z6KJTYg+ly}OE6sV$Z;sZAK(RW2jBp907ulxe?&n=IOq>ER}Uv~MK#npRYher zB~^8G4HO=f@_UJkvk(u$|3deHY=B=a@E?Wkf5mk4b30wSw-FCeB`{f$wZW@j%uN1& zVwyj4{{vUZT|bX_Q&yPAyjCP01h`C2R>)_(3+KIy40f{1@*tYBd$ohi$v=AUU$RZf zX)R?BS~|cxRni`_hbQt&A6mVaEA35Su)0qj8>AD)7vC-1qB}S$#ggZ>Ifp3EU>+2z z<7DeLC-Rz90}soJ{Gl`8Rj6jY@u-fM1Ww1p!|v3%g^A9kXsnznQ9$gr1&W;?D_1IyMI)MR;|?8TF9->iggqu<{L zJ4fg}#t*s}U4)2$v7mM^C3 zTcq%(Xm3Y~?jbLK60=j~bCi!2!9(F2Xy6b$yZtV%U3$|6=6bc{1>G0ETA`rk*4=W{ z$-1*PqNJ@~eEK~6#)OtI4iNA0j!Ba>rKI^~@tX;QsgK z2-9@S8qG2Gct>M22^{84mbB_24&BO;5q`Bj?$Z0UMU9)I8Zw<6V%dtc0&kv6o+Qu9X$pjj%QTPOmJv{}xCQ%$m^AI|KMsGl`( zUt0T$rb&C%qf*kkQMn?=mhaS!q1?jb+PbizVk#-{&j@=vhh@**ZHKnH93`z2FoCku za#YH`_`RahS>D%)p_^Ryk5B{;za_KEp*jrth*7sL9g!2@Ld#p?9b%O6k z3x>XBqpqVAQLx|N9FUCz01~$|AMWdtEA7vy!=cA)l;D7SYdVhF5M2xHpnEnRc6UJV b24FS0W7z3UT;bStB6E61EdLYrUlH^-q8$%{ literal 0 HcmV?d00001 diff --git a/star_lock/flavorizr.yaml b/star_lock/flavorizr.yaml index 9484655e..4028afd7 100644 --- a/star_lock/flavorizr.yaml +++ b/star_lock/flavorizr.yaml @@ -33,6 +33,7 @@ flavors: icon: "assets/icon/dev.png" android: applicationId: "com.starlock.lock.dev" + pre: app: name: "星锁" @@ -45,10 +46,14 @@ flavors: icon: "assets/icon/sky.png" android: applicationId: "com.skychip.lock" + customConfig: + signingConfig: signingConfigs.sky xhj: app: name: "鑫锁" icon: "assets/icon/xhj.png" android: applicationId: "com.xhjcn.lock" + customConfig: + signingConfig: signingConfigs.xhj ide: idea