| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518 |
- import java.text.SimpleDateFormat
- plugins {
- id 'com.android.application'
- id 'org.jetbrains.kotlin.android'
- id 'com.google.gms.google-services'
- id 'com.google.firebase.crashlytics'
- id 'org.jetbrains.kotlin.kapt'
- id 'com.tencent.vasdolly'
- id 'kotlin-parcelize'
- id("com.dropbox.dependency-guard") version "0.5.0"
- id("com.google.devtools.ksp") version "1.9.10-1.0.13"//引入ksp插件
- }
- apply plugin: 'com.wenext.bundle.local.test'
- apply plugin: "android.aop"
- def isEnableTrace = project.hasProperty("ENABLE_TRACE") && project.ENABLE_TRACE.toBoolean()
- if (isEnableTrace) {
- apply plugin: "LancerTracePlugin"
- }
- println("isEnableTrace: "+ isEnableTrace)
- def isOfficial = project.OFFICIAL == "true"
- if (!isOfficial) {
- apply from: "proguard-log.gradle"
- }
- println("isOfficial:" + isOfficial)
- println("IS_RELEASE:" + project.IS_RELEASE)
- //apply from: "aab_res_guard.gradle"
- apply from: "zip-audio-to-assets.gradle"
- apply from: "dependencyGuard.gradle"
- def hookConfigByLocalProperties(String localKey, String defaultValue) {
- String config = readLocalProperties(localKey)
- if (config != null) {
- System.out.println("hookConfigByLocalProperties($localKey) ==> $config")
- return config
- }
- return defaultValue
- }
- def readLocalProperties(String key) {
- File file = rootProject.file('local.properties')
- if (file.exists()) {
- //加载资源
- InputStream inputStream = rootProject.file('local.properties').newDataInputStream();
- Properties properties = new Properties()
- properties.load(inputStream)
- if (properties.containsKey(key)) {
- return properties.getProperty(key)
- }
- }
- return null
- }
- android {
- namespace 'com.adealink.weparty'
- compileSdk libs.versions.compileSdk.get().toInteger()
- defaultConfig {
- applicationId "com.partyjoy.yoki"
- minSdk libs.versions.minSdk.get().toInteger()
- targetSdk libs.versions.targetSdk.get().toInteger()
- multiDexEnabled true
- testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
- // resConfigs "zh", "zh_TW", "en", "ar", "hi", "tr", "th", "bn", "vi", "ur", "id", "ms", "tl", "pt", "es", "ru", "kk", "ky", "tk", "tg", "uz"
- resConfigs "zh", "en", "ar"
- ndk {
- abiFilters "armeabi-v7a"
- abiFilters "arm64-v8a"
- debugSymbolLevel 'FULL'
- }
- //指定room.schemaLocation生成的文件路径 处理Room 警告 Schema export Error
- javaCompileOptions {
- annotationProcessorOptions {
- arguments = ["room.schemaLocation": "$projectDir/schemas".toString()]
- }
- }
- def jvc = project.hasProperty('JKS_VERSION_CODE') ? project.JKS_VERSION_CODE : ""
- def jvn = project.hasProperty('JKS_VERSION_NAME') ? project.JKS_VERSION_NAME : ""
- def localVC = hookConfigByLocalProperties("VERSION_CODE", VERSION_CODE)
- def localVN = hookConfigByLocalProperties("VERSION_NAME", VERSION_NAME)
- def vc = jvc != "" ? project.JKS_VERSION_CODE.toInteger() : localVC.toInteger()
- def vn = jvn != "" ? project.JKS_VERSION_NAME : localVN
- println("version_code = " + vc)
- println("version_name = " + vn)
- versionCode vc
- versionName vn
- manifestPlaceholders = [
- fbAppId : "623244786994791",
- fbClientToken : "d4f871dc66d01eb357146318d6b63a09",
- deepLinkScheme : "partyki",
- deepLinkHost : "yoki",
- httpDeepLinkHost: "yoki.chat"
- ]
- proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro', (isOfficial ? 'proguard-log-empty.pro' : 'proguard-log.pro')
- buildConfigField("boolean", "OFFICIAL", project.OFFICIAL)
- buildConfigField("boolean", "IS_RELEASE", hookConfigByLocalProperties("IS_RELEASE", IS_RELEASE))
- buildConfigField("String", "HTTPS_WEB_HOST", '"https://web.yoki.chat"')
- buildConfigField("String", "AUTH_APPLE_PATH", '"/web/yoki-auth/apple"')
- buildConfigField("String", "AGORA_APP_ID", '"a5233b5e42534b77bbabf2ca8ac95215"')
- buildConfigField("String", "QTT_APP_KEY", '"baa9f1307e2e8ee02742d960828b5c50"')
- buildConfigField("String", "HTTP_DEEP_LINK_HOST", '"yoki.chat"')
- buildConfigField("String", "DEEP_LINK_SCHEME", '"partyki"')
- buildConfigField("String", "DEEP_LINK_HOST", '"yoki"')
- buildConfigField("String", "UTM_FACEBOOK_KEY", '"c4ea5534613d8b3cdcd5b80097989f9eb2414138aa8e49ddfbc458cd5e50f1a6"')
- buildConfigField("String", "TIKTOK_CLIENT_KEY", '"aw8fs7e6lnjmfipk"')
- buildConfigField("String", "TIKTOK_REDIRECT_URL", '"https://yoki.chat/applink/login"')
- //trtc
- buildConfigField("Integer", "TRTC_APP_ID", "1721001739")
- buildConfigField("String", "TRTC_SECRET_KEY", '"ea5b233540129b2700b059d4fbb0c55a21d8e8bd69599b1ee9ccc9ed3b9142bb"')
- //trtc debug
- buildConfigField("Integer", "TRTC_APP_ID_DEBUG", "1600073604")
- buildConfigField("String", "TRTC_SECRET_KEY_DEBUG", '"f7c992cc3b8fc0273716da5ad59745cf188594c695c9191806d80532914f2aa1"')
- }
- signingConfigs {
- debug {
- keyAlias "yoki-keystore-debug"
- keyPassword "yoki654321"
- storePassword "yoki654321"
- storeFile file('../keystore/debug/debug.keystore')
- }
- release {
- keyAlias "yoki-keystore"
- keyPassword "yoki654321"
- storePassword "yoki654321"
- storeFile file("../keystore/release/release-sign.keystore")
- }
- }
- buildTypes {
- debug {
- minifyEnabled false
- proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
- signingConfig signingConfigs.debug
- firebaseCrashlytics {
- mappingFileUploadEnabled false
- }
- }
- release {
- debuggable false
- minifyEnabled true
- signingConfig signingConfigs.release
- firebaseCrashlytics {
- mappingFileUploadEnabled !isOfficial
- nativeSymbolUploadEnabled !isOfficial
- // strippedNativeLibsDir 'build/intermediates/stripped_native_libs/release/out/lib'
- // unstrippedNativeLibsDir 'build/intermediates/merged_native_libs/release/out/lib'
- }
- }
- }
- compileOptions {
- sourceCompatibility JavaVersion.VERSION_17
- targetCompatibility JavaVersion.VERSION_17
- coreLibraryDesugaringEnabled true
- }
- compileOptions {
- sourceCompatibility JavaVersion.VERSION_17
- targetCompatibility JavaVersion.VERSION_17
- }
- kotlinOptions {
- jvmTarget = JavaVersion.VERSION_17.majorVersion
- }
- bundle {
- language {
- enableSplit = false
- }
- density {
- enableSplit = false
- }
- abi {
- enableSplit = true
- }
- }
- sourceSets {
- main {
- jniLibs {
- srcDir 'libs'
- }
- }
- }
- packagingOptions {
- exclude '**/*.kotlin_*'
- pickFirst('lib/armeabi-v7a/libc++_shared.so')
- pickFirst('lib/arm64-v8a/libc++_shared.so')
- pickFirst('lib/x86/libc++_shared.so')
- pickFirst('lib/x86_64/libc++_shared.so')
- }
- dynamicFeatures = [':module:account',
- ':module:room',
- ':module:follow',
- ':module:profile',
- ':module:setting',
- ':module:gift',
- ':module:wallet',
- ':module:webview',
- ':module:emotion',
- ':module:message',
- ':module:rank',
- ':module:game',
- ':module:music',
- ':module:theme',
- ':module:level',
- ':module:operation',
- ':module:entereffect',
- ':module:store',
- ':module:headline',
- ':module:search',
- ':module:share',
- ':module:image',
- ':module:call',
- ':module:anchor',
- ':module:party',
- ':module:excel',
- ':module:email',
- ':module:superadmin',
- ':module:backpack',
- ':module:pk',
- ':module:skin',
- ':module:couple',
- ':module:family',
- ':module:attribution',
- ':module:userprotect',
- ':module:medal',
- ':module:micgrab',
- ':module:moment',
- ':module:youtube',
- ':module:visitors',
- ':module:youtube',
- ':module:gamehub:uno',
- ':module:gamehub:carrom',
- ':module:gamehub:domino',
- ':module:gamehub:ludo',
- ':module:certification',
- ]
- buildFeatures {
- viewBinding true
- buildConfig true
- }
- configurations.configureEach {
- exclude group: 'com.facebook.fresco', module: 'drawee'
- exclude group: 'com.facebook.fresco', module: 'ui-core'
- }
- android.applicationVariants.all { variant ->
- def variantNameCap = variant.name.capitalize()
- def taskName = "sign${variantNameCap}Bundle"
- def variantName = variant.name
- def flavorName = variant.flavorName
- def buildTypeName = variant.buildType.name
- tasks.named(taskName).configure { task ->
- def file = task.finalBundleFile.get().asFile
- def projectName = rootProject.name
- def versionCode = variant.versionCode
- def versionName = variant.versionName
- def timestamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date())
- // 构造文件名:projectName-flavor-buildType-versionCode-versionName-timestamp.aab
- def nameParts = []
- nameParts << "app"
- nameParts << projectName
- if (flavorName) {
- nameParts << flavorName
- }
- nameParts << buildTypeName
- nameParts << "v${versionName}"
- nameParts << "(${versionCode})"
- nameParts << timestamp
- def finalFileName = "${nameParts.join('-')}.aab"
- def finalFile = new File(file.parentFile, finalFileName)
- task.finalBundleFile.set(finalFile)
- }
- }
- }
- gradle.taskGraph.addTaskExecutionListener(new TaskExecutionListener() {
- @Override
- void beforeExecute(Task task) {
- }
- @Override
- void afterExecute(Task task, TaskState taskState) {
- if (task.name.equalsIgnoreCase("bundleDebug")
- || task.name.equalsIgnoreCase("bundleRelease")) {
- copy {
- from 'build/intermediates/intermediary_bundle/'
- into 'build/outputs/bundle/'
- duplicatesStrategy DuplicatesStrategy.FAIL
- }
- println("afterExecute " + task.name)
- def aabDir = project.getBuildDir().absolutePath + '/outputs/bundle'
- fileTree(dir: aabDir, include: '*/*.aab').each { File file ->
- println(file.absolutePath)
- def cmd = []
- cmd << "java"
- cmd << "-jar"
- cmd << "${project.rootDir}/tool/bundletool.jar"
- cmd << "build-apks"
- cmd << "--bundle=" + file.absolutePath
- cmd << "--output=" + file.parent + File.separator + file.name.replace(".aab", "-split.apks")
- cmd << "--overwrite"
- cmd << "--mode=universal"
- if (task.name.equalsIgnoreCase("bundleDebug")) {
- cmd << "--ks=" + android.signingConfigs.debug.storeFile
- cmd << "--ks-pass=pass:" + android.signingConfigs.debug.storePassword
- cmd << "--ks-key-alias=" + android.signingConfigs.debug.keyAlias
- cmd << "--key-pass=pass:" + android.signingConfigs.debug.keyPassword
- } else {
- def keystoreProperties = new Properties()
- keystoreProperties.load(new FileInputStream(rootProject.file('keystore.properties')))
- cmd << "--ks=" + keystoreProperties.storeFile
- cmd << "--ks-pass=pass:" + keystoreProperties.storePassword
- cmd << "--ks-key-alias=" + keystoreProperties.keyAlias
- cmd << "--key-pass=pass:" + keystoreProperties.keyPassword
- }
- exec {
- commandLine cmd
- }
- }
- println("after build apks")
- }
- }
- })
- dependencies {
- api fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
- //kotlin
- implementation libs.kotlin.stdlib
- coreLibraryDesugaring libs.desugar.jdk.libs
- //androidx
- api libs.androidx.core.ktx
- api libs.androidx.appcompat
- api libs.androidx.constraint.layout
- api libs.androidx.activity
- api libs.androidx.fragment.ktx
- api libs.androidx.viewpager2
- api libs.androidx.lifecycle.livedata.ktx
- api libs.androidx.lifecycle.viewmodel.ktx
- api libs.androidx.exifinterface
- implementation libs.androidx.multidex
- implementation libs.androidx.vectordrawable
- implementation libs.androidx.work.manager
- api libs.androidx.room.runtime
- api libs.androidx.room.ktx
- api libs.flexbox
- kapt libs.androidx.room.compiler
- implementation libs.androidx.camera.core
- implementation libs.androidx.camera.camera2
- implementation libs.androidx.camera.lifecycle
- implementation libs.androidx.camera.video
- implementation libs.androidx.camera.view
- api libs.androidx.webkit
- //android
- implementation libs.android.material
- implementation libs.android.install.referrer
- //google play core
- implementation libs.play.feature.delivery
- implementation libs.play.feature.delivery.ktx
- implementation libs.play.app.update
- implementation libs.play.app.update.ktx
- //facebook
- implementation libs.facebook.android.sdk
- //appsflyer
- implementation libs.appsflyer
- //java
- implementation libs.rxjava
- //channel
- implementation libs.tencent.vasdolly.helper
- //firebase
- implementation platform(libs.firebase.bom)
- implementation libs.firebase.analytics
- implementation libs.firebase.crashlytics
- implementation libs.firebase.crashlytics.ndk
- implementation libs.firebase.dynamic.link
- implementation libs.firebase.messaging
- //gson
- implementation libs.gson
- //other
- api libs.smart.refresh.layout.kernel
- api libs.smart.refresh.header.material
- api libs.smart.refresh.footer.classics
- api libs.media3.exoplayer
- api libs.media3.exoplayer.dash
- api libs.media3.ui
- // media3 v1.4.1 guava 单独设置, 待media3更新后移除
- implementation libs.guava
- api libs.video.processor
- api libs.payermax
- api libs.rxjava
- //image
- api libs.compressor
- //tencent rtc
- api libs.tencent.tui.core
- //frame
- api platform(libs.frame.bom)
- api libs.frame.tcturing
- api libs.frame.animplayer
- api libs.frame.drawee
- api libs.frame.image
- api libs.frame.mvvm
- api libs.frame.util
- api libs.frame.zero
- api libs.frame.base
- api libs.frame.network
- api libs.frame.retrofit
- api libs.frame.oss
- api libs.frame.download
- api libs.frame.sound
- api libs.frame.game
- api libs.frame.autosize
- api libs.frame.spi
- api libs.frame.data
- api libs.frame.aab
- api libs.frame.coroutine
- api libs.frame.storage
- api libs.frame.log
- api libs.frame.statistics
- api libs.frame.googleservice
- api libs.frame.deviceid
- api libs.frame.security
- api libs.frame.guide
- api libs.frame.effect
- api libs.frame.svga
- api libs.frame.debug
- api project(":frame:room")
- api project(":frame:imkit")
- api libs.frame.startup
- api libs.frame.locale
- api libs.frame.push
- api libs.frame.media
- implementation libs.frame.agorartc
- implementation libs.frame.trtc.pro
- api libs.frame.share
- api libs.frame.dot
- api libs.frame.crash
- api libs.frame.apm
- api libs.frame.audio
- api libs.frame.tceffect
- api libs.frame.router.annotation
- api libs.frame.router.api
- kapt libs.frame.router.compiler
- implementation libs.toolargetool
- implementation(libs.rangeseekbar)
- // debugApi "com.tuzhenlei:crashhandler:1.0.1"
- // debugApi 'cat.ereza:customactivityoncrash:2.3.0'
- // debugImplementation "io.github.yvescheung:Uinspector:2.0.20"
- // debugImplementation "io.github.yvescheung:Uinspector-optional-viewmodel:2.0.20"
- // debugImplementation "io.github.yvescheung:Uinspector-optional-fresco:2.0.20"
- // debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.10'
- //test
- testImplementation libs.junit
- androidTestImplementation libs.androidx.junit
- androidTestImplementation libs.androidx.espresso.core
- if (isEnableTrace){
- implementation (libs.frame.trace.api)
- }
- api libs.flexbox
- implementation 'io.github.flyjingfish:androidaop-core:2.7.0'
- ksp 'io.github.flyjingfish:androidaop-apt:2.7.0'
- }
- dependencyGuard {
- configuration("releaseRuntimeClasspath")
- }
|