import com.android.build.gradle.internal.api.BaseVariantOutputImpl import java.io.File import java.text.SimpleDateFormat import java.util.Date /** * 本地库依赖管理 * 统一管理打印机和高德地图等本地库文件 */ object LocalLibraries { private const val LIBS_DIR = "libs" /** * 高德地图库 */ object Amap { const val VERSION = "10.1.600_AMapSearch_9.7.4_AMapLocation_6.5.1_20251020" fun getCombinedJar(projectDir: File): File { return File(projectDir, "$LIBS_DIR/AMap3DMap_${VERSION}.jar") } } object Nuisdk{ fun getNui(projectDir: File): File = File(projectDir, "$LIBS_DIR/nuisdk-release.aar") fun getFastjson(projectDir: File): File = File(projectDir, "$LIBS_DIR/fastjson-1.1.46.android.jar") } /** * 打印机库 */ object Printer { const val DNPEXT_VERSION = "1.0" const val COLORCNV_VERSION = "1.2" const val PHOTOPRINTLIB_VERSION = "1.2" fun getDnpext(projectDir: File): File = File(projectDir, "$LIBS_DIR/dnpext.aar") fun getColorcnv(projectDir: File): File = File(projectDir, "$LIBS_DIR/dnpphotocolorcnv-${COLORCNV_VERSION}.aar") fun getPhotoprintlib(projectDir: File): File = File(projectDir, "$LIBS_DIR/dnpphotoprintlib-${PHOTOPRINTLIB_VERSION}.aar") } /** * 获取所有高德地图依赖 */ fun getAmapDependencies(projectDir: File): List { return listOf(Amap.getCombinedJar(projectDir)) } /** * 获取所有打印机依赖 */ fun getPrinterDependencies(projectDir: File): List { return listOf( Printer.getDnpext(projectDir), Printer.getColorcnv(projectDir), Printer.getPhotoprintlib(projectDir) ) } /** * 获取语音合成依赖 */ fun getNui(projectDir: File): List { return listOf( Nuisdk.getNui(projectDir), Nuisdk.getFastjson(projectDir), ) } } plugins { alias(libs.plugins.android.application) alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.compose) alias(libs.plugins.hilt) alias(libs.plugins.ksp) } android { namespace = "com.yzx.kiosk" compileSdk = 36 defaultConfig { applicationId = "com.yzx.kiosk" minSdk = 26 targetSdk = 36 versionCode = 21 versionName = "1.1.1" //multiDexEnabled = true testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" ndk { abiFilters.addAll( listOf( "armeabi", "armeabi-v7a", "arm64-v8a", "x86", "x86_64", ) ) } } signingConfigs { getByName("debug") { storeFile = file("keystore.jks") keyAlias = "zczx" keyPassword = "9sgcXfpi4N0vTY6F9tEJ" storePassword = "9sgcXfpi4N0vTY6F9tEJ" } create("release") { storeFile = file("yzxkey.jks") keyAlias = "yzx" keyPassword = "yzx@6688@YZ" storePassword = "yzx@6688@YZ" } } buildTypes { debug { isDebuggable = true isMinifyEnabled = false isShrinkResources = false signingConfig = signingConfigs.getByName("debug") proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" ) buildConfigField("String", "BASE_URL", "\"https://api-test.zhifly.cn\"") buildConfigField("String", "WSS", "\"wss://api-test.zhifly.cn/wss\"") buildConfigField( "String", "CLOUD_OSS_URL", "\"https://facebox.oss-cn-shanghai.aliyuncs.com\"" ) } release { isDebuggable = false isMinifyEnabled = false isShrinkResources = false signingConfig = signingConfigs.getByName("debug") proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" ) buildConfigField("String", "BASE_URL", "\"https://api.zhifly.cn\"") buildConfigField("String", "WSS", "\"wss://api.zhifly.cn/wss\"") buildConfigField( "String", "CLOUD_OSS_URL", "\"https://vipsky.oss-cn-shanghai.aliyuncs.com/cloud_driver\"" ) } } compileOptions { sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 } kotlinOptions { jvmTarget = "11" languageVersion = "2.0" } buildFeatures { compose = true buildConfig = true viewBinding = true } packaging { resources { // 排除 META-INF/INDEX.LIST 文件,解决多个 netty 库的冲突 excludes += "/META-INF/INDEX.LIST" // 排除 netty 版本属性文件,解决多个 netty 库的冲突 excludes += "/META-INF/io.netty.versions.properties" // 排除其他可能冲突的 META-INF 文件 excludes += "/META-INF/*.SF" excludes += "/META-INF/*.DSA" excludes += "/META-INF/*.RSA" } } android.applicationVariants.all { val variant = this variant.outputs.all { val outputImpl = this as BaseVariantOutputImpl val appName = "照片打印机" val versionName = variant.versionName val versionCode = variant.versionCode val buildType = variant.buildType.name val time = SimpleDateFormat("yyyyMMdd_HHmm").format(Date()) val apkName = "${appName}_${versionName}_${versionCode}_${buildType}_${time}.apk" outputImpl.outputFileName = apkName } } sourceSets { named("main") { jniLibs.srcDirs("libs") } } } // 全局排除 fastjson 1.2.41,统一使用本地 fastjson-1.1.46.android.jar configurations.all { exclude(group = "com.alibaba", module = "fastjson") } dependencies { implementation(libs.androidx.compose.foundation) implementation(libs.firebase.crashlytics.buildtools) compileOnly(libs.ksp.gradlePlugin) implementation(libs.androidx.core.ktx) implementation(libs.androidx.appcompat) testImplementation(libs.junit) androidTestImplementation(libs.androidx.junit) androidTestImplementation(libs.androidx.espresso.core) implementation(libs.constraintlayout.compose) implementation(platform(libs.androidx.compose.bom)) implementation(libs.androidx.ui) implementation(libs.androidx.ui.tooling.preview) implementation(libs.androidx.material3) implementation(libs.material.icon) implementation(libs.material.icon.extended) androidTestImplementation(platform(libs.androidx.compose.bom)) androidTestImplementation(libs.androidx.ui.test.junit4) debugImplementation(libs.androidx.ui.tooling) debugImplementation(libs.androidx.ui.test.manifest) ksp(libs.hilt.android.compiler) kspAndroidTest(libs.hilt.android.compiler) androidTestImplementation(libs.hilt.android.testing) implementation(libs.hilt.android) implementation(libs.hilt.navigation.compose) //debugImplementation(libs.leakcanary.android) 20250707 implementation(libs.navigation.compose) implementation(libs.okhttp) implementation(libs.retrofit) implementation(libs.retrofit.converter.gson) implementation(libs.logging.interceptor) implementation(libs.gson) implementation(libs.toaster) implementation(libs.mmkv) implementation(libs.coil.compose) implementation(libs.accompanist.permissions) implementation(libs.accompanist.systemuicontroller) implementation(libs.lottie.compose) implementation(libs.google.zxing) implementation(libs.ucrop) implementation(libs.wheelPicker.compose) implementation(libs.androidx.material3) implementation(libs.androidx.media3.exoplayer) implementation(libs.androidx.media3.datasource.rtmp) implementation(libs.androidx.media3.ui) implementation(libs.barcode.scanning) implementation(libs.camerax.camera2) implementation(libs.camerax.lifecycle) implementation(libs.camerax.view) // 排除传递依赖中的 fastjson,使用本地 fastjson-1.1.46.android.jar implementation(libs.aliyun) { exclude(group = "com.alibaba", module = "fastjson") } implementation(libs.aliyuntts) { exclude(group = "com.alibaba", module = "fastjson") } // JAXB for Android (解决 javax.xml.bind.DatatypeConverter 不可用问题) // 阿里云 SDK 使用了 javax.xml.bind.DatatypeConverter,在 Android 上需要添加这些依赖 implementation(libs.jaxb.api) implementation(libs.jaxb.runtime) // Apache Xerces 提供 XML 处理实现(解决 DatatypeFactoryImpl 不可用问题) implementation(libs.xerces) implementation(libs.room.runtime) implementation(libs.room.ktx) ksp(libs.room.compiler.ksp) implementation(libs.lucksiege.pictureselector) // implementation(libs.lucksiege.compress) //implementation(libs.lucksiege.ucrop) implementation(libs.lucksiege.camerax) implementation(libs.glide) ksp(libs.glide.compiler) implementation(libs.lifecycle.viewmodel.ktx) implementation(libs.lifecycle.viewmodel.compose) implementation(libs.androidx.activityCompose) implementation(libs.androidx.localbroadcastmanager) implementation(libs.paging.runtime) implementation(libs.paging.compose) // ========== 本地库依赖管理 ========== // 高德地图库 LocalLibraries.getAmapDependencies(projectDir).forEach { file -> implementation(files(file)) } // 打印机库 LocalLibraries.getPrinterDependencies(projectDir).forEach { file -> implementation(files(file)) } // 阿里云语音合成 LocalLibraries.getNui(projectDir).forEach { file -> implementation(files(file)) } }