From fa53a69d2b1f70c1d3db6ba4a68ed1a9a38bafba Mon Sep 17 00:00:00 2001 From: BBIT-Kai <2911862937@qq.com> Date: Thu, 28 May 2026 11:37:05 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E5=8D=87=E6=89=80=E6=9C=89=E5=BA=93?= =?UTF-8?q?=E7=9A=84=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle.kts | 202 +++++++----------- app/src/main/java/com/bbitcn/f8/pad/MyApp.kt | 4 +- .../java/com/bbitcn/f8/pad/base/BaseList.kt | 1 - .../bbitcn/f8/pad/ui/MainActivityViewModel.kt | 65 +++--- .../view/drawer/TicketForDryStoreCocoon.kt | 3 +- .../manager/bluetooth/MyBlueTooth.kt | 3 +- build.gradle.kts | 12 +- gradle/libs.versions.toml | 52 ----- gradle/wrapper/gradle-wrapper.properties | 3 +- 9 files changed, 117 insertions(+), 228 deletions(-) delete mode 100644 gradle/libs.versions.toml diff --git a/app/build.gradle.kts b/app/build.gradle.kts index a359457..7f6dab4 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -1,17 +1,13 @@ -import com.android.build.api.dsl.Packaging - plugins { - alias(libs.plugins.android.application) - alias(libs.plugins.jetbrains.kotlin.android) - alias(libs.plugins.compose.compiler) + id("com.android.application") + id("org.jetbrains.kotlin.plugin.compose") id("com.google.devtools.ksp") id("com.google.dagger.hilt.android") - id("kotlin-kapt") } android { namespace = "com.bbitcn.f8.pad" - compileSdk = 35 + compileSdk = 36 defaultConfig { applicationId = "com.bbitcn.f8.pad" @@ -30,12 +26,6 @@ android { } signingConfigs { -// create("config") { -// keyAlias = "key0" -// keyPassword = "123456" -// storeFile = file("../key/key.jks") -// storePassword = "123456" -// } getByName("debug") { keyAlias = "key0" keyPassword = "123456" @@ -44,9 +34,9 @@ android { storePassword = "123456" } } + buildTypes { release { -// signingConfig = signingConfigs.getByName("config") isMinifyEnabled = false proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), @@ -55,144 +45,106 @@ android { } } -// composeCompiler { - // 强力跳过模式 -// enableStrongSkippingMode = true -// } compileOptions { sourceCompatibility = JavaVersion.VERSION_21 targetCompatibility = JavaVersion.VERSION_21 } - kotlinOptions { - jvmTarget = "21" - } + buildFeatures { compose = true } - composeOptions { - kotlinCompilerExtensionVersion = "1.5.1" - } + packaging { resources { - excludes += "/META-INF/{AL2.0,LGPL2.1}" + excludes += setOf( + "/META-INF/{AL2.0,LGPL2.1}", + "META-INF/DEPENDENCIES", + "common.properties" + ) } } + sourceSets { getByName("main") { jniLibs.srcDirs("libs") } } - fun Packaging.() { - resources { - excludes += setOf("META-INF/DEPENDENCIES", "common.properties") - } +} + +kotlin { + compilerOptions { + jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_21 } } + dependencies { - // 打印机驱动CPCL_SDK_V1 - // 身份证驱动zkandroidcore implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar", "*.aar")))) - // NFC需要 -// implementation("com.google.guava:guava:14.0") - implementation("com.google.guava:guava:30.1-jre") - implementation(libs.androidx.core.ktx) - implementation(libs.androidx.lifecycle.runtime.ktx) - implementation(libs.androidx.activity.compose) - implementation(platform(libs.androidx.compose.bom)) - implementation(libs.androidx.ui) - implementation(libs.androidx.ui.graphics) - implementation(libs.androidx.ui.tooling.preview) - testImplementation(libs.junit) - androidTestImplementation(libs.androidx.junit) - androidTestImplementation(libs.androidx.espresso.core) - androidTestImplementation(platform(libs.androidx.compose.bom)) - androidTestImplementation(libs.androidx.ui.test.junit4) - debugImplementation(libs.androidx.ui.tooling) - debugImplementation(libs.androidx.ui.test.manifest) - implementation(libs.androidx.core.splashscreen) - //lifecycle-viewmodel-compose - implementation(libs.androidx.lifecycle.viewmodel.compose) - implementation(libs.androidx.material.icons.extended) - //MMKV - implementation(libs.mmkv) - //util - implementation(libs.com.blankj.utilcodex2) - //GSON - implementation(libs.com.google.code.gson.gson2) - //权限库 - implementation(libs.com.github.getactivity.xxpermissions) - //日志库 - implementation(libs.timber) - implementation(libs.androidx.legacy.legacy.support.v43) - implementation(libs.androidx.navigation.compose) - //日期下拉框 - implementation(libs.android.pickerview) - implementation("io.github.ltttttttttttt:ComposeViews:1.6.0.1") + implementation("com.google.guava:guava:33.6.0-jre") + + implementation("androidx.core:core-ktx:1.18.0") + implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.10.0") + implementation("androidx.activity:activity-compose:1.13.0") + implementation(platform("androidx.compose:compose-bom:2026.05.01")) + implementation("androidx.compose.ui:ui") + implementation("androidx.compose.ui:ui-graphics") + implementation("androidx.compose.ui:ui-tooling-preview") + implementation("androidx.compose.material:material-icons-extended") + implementation("androidx.compose.material3:material3") + implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.10.0") + implementation("androidx.core:core-splashscreen:1.2.0") + implementation("androidx.legacy:legacy-support-v4:1.0.0") + implementation("androidx.navigation:navigation-compose:2.9.8") + implementation("androidx.hilt:hilt-navigation-compose:1.3.0") + + implementation("com.tencent:mmkv:2.4.0") + implementation("com.blankj:utilcodex:1.31.1") + implementation("com.google.code.gson:gson:2.14.0") + implementation("com.github.getActivity:XXPermissions:28.2") + implementation("com.jakewharton.timber:timber:5.0.1") + implementation("com.contrarywind:Android-PickerView:4.1.9") + implementation("io.github.ltttttttttttt:ComposeViews:1.10.0.2") implementation("com.inuker.bluetooth:library:1.4.0") - //RxJava -// implementation("io.reactivex.rxjava2:rxjava:2.2.20") -// implementation("io.reactivex.rxjava2:rxandroid:2.1.1") -// implementation("com.jakewharton.rxbinding2:rxbinding:2.2.0") -// implementation("com.github.xuexiangjys:RxUtil2:1.2.1") - // MD3 - implementation("androidx.compose.material3:material3:1.4.0-alpha12") - // - implementation("com.squareup.okhttp3:logging-interceptor:5.0.0-alpha.5") - //gson - implementation("com.google.code.gson:gson:2.9.0") - implementation("com.squareup.retrofit2:retrofit:2.11.0") - implementation("com.squareup.retrofit2:converter-gson:2.11.0") - implementation("com.google.dagger:hilt-android:2.52") - kapt("com.google.dagger:hilt-compiler:2.52") - implementation("androidx.hilt:hilt-navigation-compose:1.0.0") - implementation("com.github.devnied.emvnfccard:library:3.0.1") - // 日历 + + implementation("com.squareup.okhttp3:logging-interceptor:5.3.2") + implementation("com.squareup.retrofit2:retrofit:3.0.0") + implementation("com.squareup.retrofit2:converter-gson:3.0.0") + implementation("com.google.dagger:hilt-android:2.59.2") + ksp("com.google.dagger:hilt-android-compiler:2.59.2") + implementation("com.github.devnied.emvnfccard:library:3.1.0") implementation("com.xhinliang:LunarCalendar:4.0.7") - // 网络图片加载 - implementation("io.coil-kt.coil3:coil-compose:3.0.4") - implementation("io.coil-kt.coil3:coil-network-okhttp:3.0.4") - // Paging3 - val paging_version = "3.3.2" - implementation("androidx.paging:paging-runtime:$paging_version") - // optional - Jetpack Compose integration - implementation("androidx.paging:paging-compose:$paging_version") - // 阿里云接口 - implementation("com.aliyun:ocr_api20210707:3.1.2") - // CameraX core library using the camera2 implementation - val camerax_version = "1.5.0-alpha04" - // The following line is optional, as the core library is included indirectly by camera-camera2 - implementation("androidx.camera:camera-core:${camerax_version}") - implementation("androidx.camera:camera-compose:${camerax_version}") - implementation("androidx.camera:camera-camera2:${camerax_version}") - // If you want to additionally use the CameraX Lifecycle library - implementation("androidx.camera:camera-lifecycle:${camerax_version}") - // If you want to additionally use the CameraX VideoCapture library - implementation("androidx.camera:camera-video:${camerax_version}") - // If you want to additionally use the CameraX View class - implementation("androidx.camera:camera-view:${camerax_version}") - // If you want to additionally add CameraX ML Kit Vision Integration - implementation("androidx.camera:camera-mlkit-vision:${camerax_version}") - // If you want to additionally use the CameraX Extensions library - implementation("androidx.camera:camera-extensions:${camerax_version}") -// implementation("androidx.camera.viewfinder:viewfinder-compose:${camerax_version}") -// implementation("androidx.camera:camera-viewfinder-compose:1.0.0-alpha02") + implementation("io.coil-kt.coil3:coil-compose:3.4.0") + implementation("io.coil-kt.coil3:coil-network-okhttp:3.4.0") - // 串口-超高频读卡器 - api("com.licheedev:android-serialport:2.1.3") - // 条形码 - implementation("com.google.zxing:core:3.5.3") - // 人脸识别 7M + val pagingVersion = "3.5.0" + implementation("androidx.paging:paging-runtime:$pagingVersion") + implementation("androidx.paging:paging-compose:$pagingVersion") + + val cameraXVersion = "1.6.1" + implementation("androidx.camera:camera-core:$cameraXVersion") + implementation("androidx.camera:camera-compose:$cameraXVersion") + implementation("androidx.camera:camera-camera2:$cameraXVersion") + implementation("androidx.camera:camera-lifecycle:$cameraXVersion") + implementation("androidx.camera:camera-video:$cameraXVersion") + implementation("androidx.camera:camera-view:$cameraXVersion") + implementation("androidx.camera:camera-mlkit-vision:$cameraXVersion") + implementation("androidx.camera:camera-extensions:$cameraXVersion") + + api("com.licheedev:android-serialport:2.1.5") + implementation("com.google.zxing:core:3.5.4") implementation("com.google.mlkit:face-detection:16.1.7") - // 阿里云OSS -// implementation("com.aliyun.oss:aliyun-sdk-oss:3.18.1") implementation("com.aliyun.dpa:oss-android-sdk:2.9.21") - // USB驱动 + implementation("com.aliyun:ocr_api20210707:3.1.3") implementation("com.github.mik3y:usb-serial-for-android:3.8.1") - // 日期时间选择器 implementation("com.github.commandiron:WheelPickerCompose:1.1.11") - // 图表组件 - implementation("io.github.ehsannarmani:compose-charts:0.1.2") + implementation("io.github.ehsannarmani:compose-charts:0.2.5") -} \ No newline at end of file + testImplementation("junit:junit:4.13.2") + androidTestImplementation("androidx.test.ext:junit:1.1.5") + androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") + androidTestImplementation(platform("androidx.compose:compose-bom:2026.05.01")) + androidTestImplementation("androidx.compose.ui:ui-test-junit4") + debugImplementation("androidx.compose.ui:ui-tooling") + debugImplementation("androidx.compose.ui:ui-test-manifest") +} diff --git a/app/src/main/java/com/bbitcn/f8/pad/MyApp.kt b/app/src/main/java/com/bbitcn/f8/pad/MyApp.kt index c11aaeb..8119da5 100644 --- a/app/src/main/java/com/bbitcn/f8/pad/MyApp.kt +++ b/app/src/main/java/com/bbitcn/f8/pad/MyApp.kt @@ -25,14 +25,14 @@ import timber.log.Timber * @Author DuanKaiji * @CreateTime 2024年03月27日 13:43 */ -val M = Modifier +val MD = Modifier .animateContentSize( animationSpec = spring( dampingRatio = Spring.DampingRatioLowBouncy, stiffness = Spring.StiffnessLow ) ) -val MD = Modifier +val M = Modifier val IS_DEBUG_DRYCOCOON = false // 是否是调试状态 diff --git a/app/src/main/java/com/bbitcn/f8/pad/base/BaseList.kt b/app/src/main/java/com/bbitcn/f8/pad/base/BaseList.kt index e8ff9fc..05632fd 100644 --- a/app/src/main/java/com/bbitcn/f8/pad/base/BaseList.kt +++ b/app/src/main/java/com/bbitcn/f8/pad/base/BaseList.kt @@ -79,7 +79,6 @@ import com.cyberecho.ui.view.JumpToBottom import com.cyberecho.ui.view.JumpToTop import com.google.common.collect.Multimaps.index import kotlinx.coroutines.launch -import org.slf4j.helpers.Reporter.info import kotlin.collections.map @Composable diff --git a/app/src/main/java/com/bbitcn/f8/pad/ui/MainActivityViewModel.kt b/app/src/main/java/com/bbitcn/f8/pad/ui/MainActivityViewModel.kt index 2de5342..b046e48 100644 --- a/app/src/main/java/com/bbitcn/f8/pad/ui/MainActivityViewModel.kt +++ b/app/src/main/java/com/bbitcn/f8/pad/ui/MainActivityViewModel.kt @@ -4,18 +4,15 @@ import com.bbitcn.f8.pad.base.BaseViewModel import com.bbitcn.f8.pad.utils.log.MyLog import com.blankj.utilcode.util.ActivityUtils import com.hjq.permissions.OnPermissionCallback -import com.hjq.permissions.Permission import com.hjq.permissions.XXPermissions +import com.hjq.permissions.permission.PermissionLists +import com.hjq.permissions.permission.base.IPermission -class MainActivityViewModel :BaseViewModel() { +class MainActivityViewModel : BaseViewModel() { init { doInIoThreadNoDialog { checkPermission() - // 初始化NfcAdapter -// Printer.init() -// WaterCutMeter.init() -// Balance.init() } } @@ -24,41 +21,39 @@ class MainActivityViewModel :BaseViewModel() { */ fun checkPermission() { XXPermissions.with(ActivityUtils.getTopActivity()) - .permission(Permission.WRITE_EXTERNAL_STORAGE) - .permission(Permission.READ_PHONE_STATE) - // 定位 - .permission(Permission.ACCESS_FINE_LOCATION) - .permission(Permission.ACCESS_COARSE_LOCATION) - // 蓝牙 - .permission(Permission.BLUETOOTH_SCAN) - .permission(Permission.BLUETOOTH_CONNECT) - .permission(Permission.BLUETOOTH_ADVERTISE) - // 录音 - .permission(Permission.RECORD_AUDIO) - // 安装应用 - .permission(Permission.REQUEST_INSTALL_PACKAGES) - // 相机 - .permission(Permission.CAMERA) + .permission(PermissionLists.getWriteExternalStoragePermission()) + .permission(PermissionLists.getReadPhoneStatePermission()) + .permission(PermissionLists.getAccessFineLocationPermission()) + .permission(PermissionLists.getAccessCoarseLocationPermission()) + .permission(PermissionLists.getBluetoothScanPermission()) + .permission(PermissionLists.getBluetoothConnectPermission()) + .permission(PermissionLists.getBluetoothAdvertisePermission()) + .permission(PermissionLists.getRecordAudioPermission()) + .permission(PermissionLists.getRequestInstallPackagesPermission()) + .permission(PermissionLists.getCameraPermission()) .request(object : OnPermissionCallback { - override fun onGranted(permissions: List, allGranted: Boolean) { - if (!allGranted) { - MyLog.appError("获取部分权限成功,以下权限未获得") - for (permission in permissions) { - MyLog.appError(permission) - } -// XXPermissions.startPermissionActivity(context, permissions) //todo + override fun onResult( + grantedPermissions: MutableList, + deniedPermissions: MutableList + ) { + if (deniedPermissions.isEmpty()) { + return } - } - override fun onDenied(permissions: List, doNotAskAgain: Boolean) { - if (doNotAskAgain) { - MyLog.app("被永久拒绝授权,需手动授予权限") - // 如果是被永久拒绝就跳转到应用权限系统设置页面 -// XXPermissions.startPermissionActivity(context, permissions) + MyLog.appError("获取部分权限成功,以下权限未获得") + for (permission in deniedPermissions) { + MyLog.appError(permission.permissionName) + } + + val activity = ActivityUtils.getTopActivity() + if (activity != null && + XXPermissions.isDoNotAskAgainPermissions(activity, deniedPermissions) + ) { + MyLog.app("被永久拒绝授权,需要手动授予权限") } else { MyLog.appError("权限请求失败") } } }) } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/bbitcn/f8/pad/ui/screen/view/drawer/TicketForDryStoreCocoon.kt b/app/src/main/java/com/bbitcn/f8/pad/ui/screen/view/drawer/TicketForDryStoreCocoon.kt index cd37176..2a9e0c2 100644 --- a/app/src/main/java/com/bbitcn/f8/pad/ui/screen/view/drawer/TicketForDryStoreCocoon.kt +++ b/app/src/main/java/com/bbitcn/f8/pad/ui/screen/view/drawer/TicketForDryStoreCocoon.kt @@ -51,7 +51,6 @@ import com.bbitcn.f8.pad.ui.screen.view.common.CombinedDropdownMenu import com.bbitcn.f8.pad.ui.theme.MyColors import com.bbitcn.f8.pad.utils.MyUtil import kotlinx.coroutines.launch -import org.slf4j.helpers.Reporter.info @Preview(showBackground = true) @Composable @@ -297,4 +296,4 @@ fun TicketForDryStoreCocoon( } } } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/bbitcn/f8/pad/utils/externalModules/manager/bluetooth/MyBlueTooth.kt b/app/src/main/java/com/bbitcn/f8/pad/utils/externalModules/manager/bluetooth/MyBlueTooth.kt index 0ebad47..62fddf3 100644 --- a/app/src/main/java/com/bbitcn/f8/pad/utils/externalModules/manager/bluetooth/MyBlueTooth.kt +++ b/app/src/main/java/com/bbitcn/f8/pad/utils/externalModules/manager/bluetooth/MyBlueTooth.kt @@ -20,7 +20,6 @@ import com.inuker.bluetooth.library.search.response.SearchResponse import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow -import org.bouncycastle.crypto.params.Blake3Parameters.context import java.io.UnsupportedEncodingException import java.nio.charset.Charset import kotlin.getValue @@ -198,4 +197,4 @@ abstract class MyBlueTooth : BluetoothDeviceConnector() { fun setHistory(mac: String) { MMKVUtil.put(getDeviceName() + "_CONNECT_HISTORY" , mac) } -} \ No newline at end of file +} diff --git a/build.gradle.kts b/build.gradle.kts index c74ce3e..e4a6e88 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,8 +1,6 @@ -// Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { - alias(libs.plugins.android.application) apply false - alias(libs.plugins.jetbrains.kotlin.android) apply false - id("com.google.devtools.ksp") version "2.0.0-1.0.24" apply false - id("com.google.dagger.hilt.android") version "2.52" apply false - alias(libs.plugins.compose.compiler) apply false -} \ No newline at end of file + id("com.android.application") version "9.2.1" apply false + id("org.jetbrains.kotlin.plugin.compose") version "2.3.21" apply false + id("com.google.devtools.ksp") version "2.3.9" apply false + id("com.google.dagger.hilt.android") version "2.59.2" apply false +} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml deleted file mode 100644 index 81998f5..0000000 --- a/gradle/libs.versions.toml +++ /dev/null @@ -1,52 +0,0 @@ -[versions] -agp = "8.10.1" -kotlin = "2.1.0" -coreKtx = "1.10.1" -junit = "4.13.2" -junitVersion = "1.1.5" -espressoCore = "3.5.1" -lifecycleRuntimeKtx = "2.6.1" -activityCompose = "1.8.0-alpha07" -composeBom = "2024.05.00" -androidPickerview = "4.1.9" -androidxLegacyLegacySupportV4 = "1.0.0" -blankjUtilcodexVersion = "1.31.1" -googleGsonVersion = "2.10.1" -githubXxpermissionsVersion = "18.5" -mmkv = "1.2.13" -timber = "5.0.1" -navigationCompose = "2.7.7" -coreSplashscreen = "1.0.1" - -[libraries] -androidx-compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "composeBom" } -androidx-ui = { group = "androidx.compose.ui", name = "ui" } -androidx-ui-graphics = { group = "androidx.compose.ui", name = "ui-graphics" } -androidx-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling" } -androidx-ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview" } -androidx-ui-test-manifest = { group = "androidx.compose.ui", name = "ui-test-manifest" } -androidx-ui-test-junit4 = { group = "androidx.compose.ui", name = "ui-test-junit4" } - -androidx-lifecycle-viewmodel-compose = { module = "androidx.lifecycle:lifecycle-viewmodel-compose", version.ref = "lifecycleRuntimeKtx" } -androidx-navigation-compose = { module = "androidx.navigation:navigation-compose", version.ref = "navigationCompose" } -com-github-getactivity-xxpermissions = { module = "com.github.getActivity:XXPermissions", version.ref = "githubXxpermissionsVersion" } -com-google-code-gson-gson2 = { module = "com.google.code.gson:gson", version.ref = "googleGsonVersion" } -com-blankj-utilcodex2 = { module = "com.blankj:utilcodex", version.ref = "blankjUtilcodexVersion" } -android-pickerview = { module = "com.contrarywind:Android-PickerView", version.ref = "androidPickerview" } -androidx-legacy-legacy-support-v43 = { module = "androidx.legacy:legacy-support-v4", version.ref = "androidxLegacyLegacySupportV4" } -androidx-material-icons-extended = { module = "androidx.compose.material:material-icons-extended" } -mmkv = { module = "com.tencent:mmkv", version.ref = "mmkv" } -timber = { module = "com.jakewharton.timber:timber", version.ref = "timber" } -androidx-core-splashscreen = { group = "androidx.core", name = "core-splashscreen", version.ref = "coreSplashscreen" } -androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } -junit = { group = "junit", name = "junit", version.ref = "junit" } -androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" } -androidx-espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" } -androidx-lifecycle-runtime-ktx = { group = "androidx.lifecycle", name = "lifecycle-runtime-ktx", version.ref = "lifecycleRuntimeKtx" } -androidx-activity-compose = { group = "androidx.activity", name = "activity-compose", version.ref = "activityCompose" } - -[plugins] -android-application = { id = "com.android.application", version.ref = "agp" } -jetbrains-kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } -compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } - diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index a1c99dc..000b3e9 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -#distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip -distributionUrl=https\://mirrors.cloud.tencent.com/gradle/gradle-8.11.1-bin.zip +distributionUrl=https\://mirrors.cloud.tencent.com/gradle/gradle-9.5.1-bin.zip zipStorePath=wrapper/dists