Files
kiosk/app/build.gradle.kts
T
2026-09-14 13:36:06 +08:00

353 lines
11 KiB
Kotlin

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<File> {
return listOf(Amap.getCombinedJar(projectDir))
}
/**
* 获取所有打印机依赖
*/
fun getPrinterDependencies(projectDir: File): List<File> {
return listOf(
Printer.getDnpext(projectDir),
Printer.getColorcnv(projectDir),
Printer.getPhotoprintlib(projectDir)
)
}
/**
* 获取语音合成依赖
*/
fun getNui(projectDir: File): List<File> {
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 = 24
versionName = "1.1.4"
//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\""
)
}
create("releaseDebug") {
initWith(getByName("release"))
isDebuggable = true
signingConfig = signingConfigs.getByName("debug")
matchingFallbacks += listOf("release", "debug")
}
}
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))
}
}