plugins { id 'com.android.application' id 'com.google.protobuf' id 'org.jetbrains.kotlin.android' id 'org.jetbrains.kotlin.kapt' } def releaseTime() { return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC")) } def appName() { return "WebRTCController" } android { namespace 'com.ttstd.controller' compileSdk 34 defaultConfig { applicationId "com.ttstd.controller" minSdk 24 targetSdk 34 versionCode 1 versionName "1.0" // 服务端地址(信令 wss 与 HTTP api 同源)。部署时通过 flavor / CI 注入真实值。 buildConfigField "String", "API_BASE", "\"http://192.168.5.224:8080\"" buildConfigField "String", "WS_URL", "\"ws://192.168.5.224:8080/ws/signal\"" } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = '1.8' } buildFeatures { dataBinding true buildConfig true aidl true } signingConfigs { keypub { storeFile file(rootProject.ext.signingConfigs.keypub.storeFile) storePassword rootProject.ext.signingConfigs.keypub.storePassword keyAlias rootProject.ext.signingConfigs.keypub.keyAlias keyPassword rootProject.ext.signingConfigs.keypub.keyPassword } crosshatch { storeFile file(rootProject.ext.signingConfigs.crosshatch.storeFile) storePassword rootProject.ext.signingConfigs.crosshatch.storePassword keyAlias rootProject.ext.signingConfigs.crosshatch.keyAlias keyPassword rootProject.ext.signingConfigs.crosshatch.keyPassword } zhanxun { storeFile file(rootProject.ext.signingConfigs.zhanxun.storeFile) storePassword rootProject.ext.signingConfigs.zhanxun.storePassword keyAlias rootProject.ext.signingConfigs.zhanxun.keyAlias keyPassword rootProject.ext.signingConfigs.zhanxun.keyPassword } } buildTypes { zhanRuiDebug.initWith(debug) zhanRuiDebug { debuggable true signingConfig signingConfigs.zhanxun } zhanRuiRelease.initWith(release) zhanRuiRelease { signingConfig signingConfigs.zhanxun } CrosshatchDebug.initWith(debug) CrosshatchDebug { debuggable true signingConfig signingConfigs.crosshatch } CrosshatchRelease.initWith(release) CrosshatchRelease { signingConfig signingConfigs.crosshatch } debug { versionNameSuffix "_debug" debuggable true minifyEnabled false //Zipalign优化 zipAlignEnabled true signingConfig signingConfigs.keypub } release { minifyEnabled false //Zipalign优化 zipAlignEnabled true //前一部分代表系统默认的android程序的混淆文件,该文件已经包含了基本的混淆声明,后一个文件是自己的定义混淆文件 proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' //签名 signingConfig signingConfigs.keypub } } // Add application variant configuration here instead applicationVariants.all { variant -> variant.outputs.each { output -> def buildType = variant.buildType.name if (buildType.contains("debug")) { output.outputFileName = "${appName()}_V${defaultConfig.versionName}_${releaseTime()}.apk" } else { output.outputFileName = "${appName()}_${variant.versionCode}_V${variant.versionName}_${releaseTime()}_${buildType}.apk" } } } } protobuf { protoc { artifact = 'com.google.protobuf:protoc:3.25.1' } generateProtoTasks { all().each { task -> task.builtins { java {} } } } } dependencies { implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'com.google.android.material:material:1.11.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.4' implementation "androidx.multidex:multidex:2.0.1" implementation "androidx.recyclerview:recyclerview:1.1.0" // Room依赖 implementation "androidx.room:room-runtime:2.8.4" implementation "androidx.room:room-rxjava3:2.8.4" kapt "androidx.room:room-compiler:2.8.4" // ViewModel和LiveData implementation "androidx.lifecycle:lifecycle-viewmodel:2.10.0" implementation "androidx.lifecycle:lifecycle-livedata:2.10.0" implementation "androidx.lifecycle:lifecycle-runtime:2.10.0" kapt "androidx.lifecycle:lifecycle-compiler:2.10.0" // LifecycleService 核心库 implementation "androidx.lifecycle:lifecycle-service:2.10.0" // 安全存储:加密 SharedPreferences(保存激活得到的 deviceSecret / deviceUid / accessToken) implementation 'androidx.security:security-crypto:1.1.0' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.3' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' //RxJava implementation 'io.reactivex.rxjava3:rxjava:3.1.12' implementation 'io.reactivex.rxjava3:rxandroid:3.0.2' implementation 'com.squareup.moshi:moshi:1.15.2' implementation 'com.squareup.okhttp3:okhttp:5.3.2' 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.squareup.retrofit2:adapter-rxjava2:3.0.0' implementation "com.squareup.retrofit2:adapter-rxjava3:3.0.0" // Gson for JSON(信令消息仍使用 JSON) implementation 'com.google.code.gson:gson:2.14.0' // Protobuf(DataChannel 控制指令二进制) implementation 'com.google.protobuf:protobuf-java:3.25.1' // WebRTC implementation 'io.github.webrtc-sdk:android:144.7559.09' // implementation 'org.webrtc:google-webrtc:1.0.32006' //生命周期管理 implementation 'com.trello.rxlifecycle4:rxlifecycle:4.0.2' implementation 'com.trello.rxlifecycle4:rxlifecycle-android:4.0.2' implementation 'com.trello.rxlifecycle4:rxlifecycle-components:4.0.2' implementation 'com.trello.rxlifecycle4:rxlifecycle-components-preference:4.0.2' implementation 'com.trello.rxlifecycle4:rxlifecycle-android-lifecycle:4.0.2' //glide implementation 'com.github.bumptech.glide:glide:4.15.1' kapt 'com.github.bumptech.glide:compiler:4.15.1' implementation 'com.tencent:mmkv-static:2.4.0' }