353 lines
11 KiB
Kotlin
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 = 23
|
|
versionName = "1.1.3"
|
|
//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))
|
|
}
|
|
|
|
|
|
} |