build.gradle 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539
  1. import java.text.SimpleDateFormat
  2. plugins {
  3. id 'com.android.application'
  4. id 'org.jetbrains.kotlin.android'
  5. id 'com.google.gms.google-services'
  6. id 'com.google.firebase.crashlytics'
  7. id 'org.jetbrains.kotlin.kapt'
  8. id 'com.tencent.vasdolly'
  9. id 'kotlin-parcelize'
  10. id("com.dropbox.dependency-guard") version "0.5.0"
  11. }
  12. apply plugin: 'com.wenext.bundle.local.test'
  13. def isEnableTrace = project.hasProperty("ENABLE_TRACE") && project.ENABLE_TRACE.toBoolean()
  14. if (isEnableTrace) {
  15. apply plugin: "LancerTracePlugin"
  16. }
  17. println("isEnableTrace: " + isEnableTrace)
  18. def isOfficial = project.OFFICIAL == "true"
  19. if (!isOfficial) {
  20. apply from: "proguard-log.gradle"
  21. }
  22. println("isOfficial:" + isOfficial)
  23. println("IS_RELEASE:" + project.IS_RELEASE)
  24. //apply from: "aab_res_guard.gradle"
  25. apply from: "zip-audio-to-assets.gradle"
  26. apply from: "dependencyGuard.gradle"
  27. def hookConfigByLocalProperties(String localKey, String defaultValue) {
  28. String config = readLocalProperties(localKey)
  29. if (config != null) {
  30. System.out.println("hookConfigByLocalProperties($localKey) ==> $config")
  31. return config
  32. }
  33. return defaultValue
  34. }
  35. def readLocalProperties(String key) {
  36. File file = rootProject.file('local.properties')
  37. if (file.exists()) {
  38. //加载资源
  39. InputStream inputStream = rootProject.file('local.properties').newDataInputStream();
  40. Properties properties = new Properties()
  41. properties.load(inputStream)
  42. if (properties.containsKey(key)) {
  43. return properties.getProperty(key)
  44. }
  45. }
  46. return null
  47. }
  48. android {
  49. namespace 'com.adealink.weparty'
  50. compileSdk libs.versions.compileSdk.get().toInteger()
  51. defaultConfig {
  52. applicationId "com.jiehe.gami"
  53. minSdk libs.versions.minSdk.get().toInteger()
  54. targetSdk libs.versions.targetSdk.get().toInteger()
  55. multiDexEnabled true
  56. testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
  57. resConfigs "zh", "en", "in"
  58. ndk {
  59. abiFilters "armeabi-v7a"
  60. abiFilters "arm64-v8a"
  61. debugSymbolLevel 'FULL'
  62. }
  63. //指定room.schemaLocation生成的文件路径 处理Room 警告 Schema export Error
  64. javaCompileOptions {
  65. annotationProcessorOptions {
  66. arguments = ["room.schemaLocation": "$projectDir/schemas".toString()]
  67. }
  68. }
  69. def jvc = project.hasProperty('JKS_VERSION_CODE') ? project.JKS_VERSION_CODE : ""
  70. def jvn = project.hasProperty('JKS_VERSION_NAME') ? project.JKS_VERSION_NAME : ""
  71. def localVC = hookConfigByLocalProperties("VERSION_CODE", VERSION_CODE)
  72. def localVN = hookConfigByLocalProperties("VERSION_NAME", VERSION_NAME)
  73. def vc = jvc != "" ? project.JKS_VERSION_CODE.toInteger() : localVC.toInteger()
  74. def vn = jvn != "" ? project.JKS_VERSION_NAME : localVN
  75. println("version_code = " + vc)
  76. println("version_name = " + vn)
  77. versionCode vc
  78. versionName vn
  79. manifestPlaceholders = [
  80. fbAppId : "",
  81. fbClientToken : "",
  82. deepLinkScheme : "gami",
  83. deepLinkHost : "app",
  84. httpDeepLinkHost: "gami.vip"
  85. ]
  86. proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro', (isOfficial ? 'proguard-log-empty.pro' : 'proguard-log.pro')
  87. buildConfigField("boolean", "OFFICIAL", project.OFFICIAL)
  88. buildConfigField("boolean", "IS_RELEASE", hookConfigByLocalProperties("IS_RELEASE", IS_RELEASE))
  89. buildConfigField("String", "HTTPS_WEB_HOST", '"https://web.gami.vip"')
  90. buildConfigField("String", "QTT_APP_KEY", '"baa9f1307e2e8ee02742d960828b5c50"')
  91. buildConfigField("String", "HTTP_DEEP_LINK_HOST", '"web.gami.vip"')
  92. buildConfigField("String", "HTTP_DEBUG_DEEP_LINK_HOST", '"test-web.gami.vip"')
  93. buildConfigField("String", "DEEP_LINK_SCHEME", '"gami"')
  94. buildConfigField("String", "DEEP_LINK_HOST", '"app"')
  95. buildConfigField("String", "UTM_FACEBOOK_KEY", '"c4ea5534613d8b3cdcd5b80097989f9eb2414138aa8e49ddfbc458cd5e50f1a6"')
  96. //trtc
  97. buildConfigField("Integer", "TRTC_APP_ID", "80000456")
  98. //trtc debug
  99. buildConfigField("Integer", "TRTC_APP_ID_DEBUG", "20030346")
  100. //官方会话ID
  101. buildConfigField("String", "OFFICIAL_UID", "\"${OFFICIAL_UID}\"")
  102. buildConfigField("String", "OFFICIAL_CONVERSATION_ID", "\"${OFFICIAL_CONVERSATION_ID}\"")
  103. //sign key(业务登录)
  104. buildConfigField("String", "SIGN_KEY", '"abc|abc|edg|9527|1234"')
  105. buildConfigField("String", "SIGN_KEY_DEBUG", '"abc|abc|edg|9527|1234"')
  106. //Adjust
  107. buildConfigField("String", "ADJUST_TOKEN", '"fbze46mdkxds"')
  108. }
  109. signingConfigs {
  110. debug {
  111. keyAlias "gami"
  112. keyPassword "gami654321"
  113. storePassword "gami654321"
  114. storeFile file('../keystore/debug/gami-debug.jks')
  115. }
  116. release {
  117. keyAlias "gami"
  118. keyPassword "gami654321"
  119. storePassword "gami654321"
  120. storeFile file("../keystore/release/gami.jks")
  121. }
  122. }
  123. buildTypes {
  124. debug {
  125. minifyEnabled false
  126. proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
  127. signingConfig signingConfigs.debug
  128. firebaseCrashlytics {
  129. mappingFileUploadEnabled false
  130. }
  131. applicationIdSuffix = '.debug'
  132. manifestPlaceholders = [
  133. appName : "@string/app_name",
  134. appIcon : "@drawable/ic_launcher"
  135. ]
  136. }
  137. release {
  138. debuggable false
  139. minifyEnabled false
  140. signingConfig signingConfigs.release
  141. manifestPlaceholders = [
  142. appName : "@string/app_name",
  143. appIcon : "@drawable/ic_launcher"
  144. ]
  145. firebaseCrashlytics {
  146. mappingFileUploadEnabled false
  147. nativeSymbolUploadEnabled false
  148. // mappingFileUploadEnabled !isOfficial
  149. // nativeSymbolUploadEnabled !isOfficial
  150. // strippedNativeLibsDir 'build/intermediates/stripped_native_libs/release/out/lib'
  151. // unstrippedNativeLibsDir 'build/intermediates/merged_native_libs/release/out/lib'
  152. }
  153. }
  154. }
  155. compileOptions {
  156. sourceCompatibility JavaVersion.VERSION_17
  157. targetCompatibility JavaVersion.VERSION_17
  158. coreLibraryDesugaringEnabled true
  159. }
  160. compileOptions {
  161. sourceCompatibility JavaVersion.VERSION_17
  162. targetCompatibility JavaVersion.VERSION_17
  163. }
  164. kotlinOptions {
  165. jvmTarget = JavaVersion.VERSION_17.majorVersion
  166. }
  167. bundle {
  168. language {
  169. enableSplit = false
  170. }
  171. density {
  172. enableSplit = false
  173. }
  174. abi {
  175. enableSplit = true
  176. }
  177. }
  178. sourceSets {
  179. main {
  180. jniLibs {
  181. srcDir 'libs'
  182. }
  183. }
  184. }
  185. packagingOptions {
  186. exclude '**/*.kotlin_*'
  187. exclude '**/values-*/strings.xml'
  188. pickFirst('lib/armeabi-v7a/libc++_shared.so')
  189. pickFirst('lib/arm64-v8a/libc++_shared.so')
  190. pickFirst('lib/x86/libc++_shared.so')
  191. pickFirst('lib/x86_64/libc++_shared.so')
  192. }
  193. dynamicFeatures = [
  194. ':module:account',
  195. ':module:profile',
  196. ':module:im',
  197. ':module:playmate',
  198. ':module:activity',
  199. ':module:setting',
  200. ':module:order',
  201. ':module:wallet',
  202. ':module:share',
  203. ':module:image',
  204. ':module:joinus',
  205. ':module:call',
  206. ':module:room',
  207. ]
  208. buildFeatures {
  209. viewBinding true
  210. buildConfig true
  211. }
  212. configurations.configureEach {
  213. exclude group: 'com.facebook.fresco', module: 'drawee'
  214. exclude group: 'com.facebook.fresco', module: 'ui-core'
  215. }
  216. lintOptions {
  217. checkReleaseBuilds false
  218. abortOnError false
  219. disable 'Instantiatable'
  220. }
  221. android.applicationVariants.all { variant ->
  222. def variantNameCap = variant.name.capitalize()
  223. def taskName = "sign${variantNameCap}Bundle"
  224. def variantName = variant.name
  225. def flavorName = variant.flavorName
  226. def buildTypeName = variant.buildType.name
  227. tasks.named(taskName).configure { task ->
  228. def file = task.finalBundleFile.get().asFile
  229. def projectName = rootProject.name
  230. def versionCode = variant.versionCode
  231. def versionName = variant.versionName
  232. def timestamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date())
  233. // 构造文件名:projectName-flavor-buildType-versionCode-versionName-timestamp.aab
  234. def nameParts = []
  235. nameParts << "app"
  236. nameParts << projectName
  237. if (flavorName) {
  238. nameParts << flavorName
  239. }
  240. nameParts << buildTypeName
  241. nameParts << "v${versionName}"
  242. nameParts << "(${versionCode})"
  243. nameParts << timestamp
  244. def finalFileName = "${nameParts.join('-')}.aab"
  245. def finalFile = new File(file.parentFile, finalFileName)
  246. task.finalBundleFile.set(finalFile)
  247. }
  248. }
  249. }
  250. gradle.taskGraph.addTaskExecutionListener(new TaskExecutionListener() {
  251. @Override
  252. void beforeExecute(Task task) {
  253. }
  254. @Override
  255. void afterExecute(Task task, TaskState taskState) {
  256. if (task.name.equalsIgnoreCase("bundleDebug")
  257. || task.name.equalsIgnoreCase("bundleRelease")) {
  258. copy {
  259. from 'build/intermediates/intermediary_bundle/'
  260. into 'build/outputs/bundle/'
  261. duplicatesStrategy DuplicatesStrategy.FAIL
  262. }
  263. println("afterExecute " + task.name)
  264. def aabDir = project.getBuildDir().absolutePath + '/outputs/bundle'
  265. fileTree(dir: aabDir, include: '*/*.aab').each { File file ->
  266. println(file.absolutePath)
  267. def cmd = []
  268. cmd << "java"
  269. cmd << "-jar"
  270. cmd << "${project.rootDir}/tool/bundletool.jar"
  271. cmd << "build-apks"
  272. cmd << "--bundle=" + file.absolutePath
  273. cmd << "--output=" + file.parent + File.separator + file.name.replace(".aab", "-split.apks")
  274. cmd << "--overwrite"
  275. cmd << "--mode=universal"
  276. if (task.name.equalsIgnoreCase("bundleDebug")) {
  277. cmd << "--ks=" + android.signingConfigs.debug.storeFile
  278. cmd << "--ks-pass=pass:" + android.signingConfigs.debug.storePassword
  279. cmd << "--ks-key-alias=" + android.signingConfigs.debug.keyAlias
  280. cmd << "--key-pass=pass:" + android.signingConfigs.debug.keyPassword
  281. } else {
  282. def keystoreProperties = new Properties()
  283. keystoreProperties.load(new FileInputStream(rootProject.file('keystore.properties')))
  284. cmd << "--ks=" + keystoreProperties.storeFile
  285. cmd << "--ks-pass=pass:" + keystoreProperties.storePassword
  286. cmd << "--ks-key-alias=" + keystoreProperties.keyAlias
  287. cmd << "--key-pass=pass:" + keystoreProperties.keyPassword
  288. }
  289. exec {
  290. commandLine cmd
  291. }
  292. }
  293. println("after build apks")
  294. }
  295. }
  296. })
  297. configurations.configureEach {
  298. resolutionStrategy {
  299. // 方式1:强制指定所有 gson 依赖使用统一版本
  300. // force 'com.google.code.gson:gson:2.8.6'
  301. // // 方式2:遇到版本冲突时选择指定的版本
  302. eachDependency { DependencyResolveDetails details ->
  303. if (details.requested.group == 'com.google.code.gson' &&
  304. details.requested.name == 'gson') {
  305. details.useVersion "2.8.6"
  306. }
  307. }
  308. }
  309. }
  310. dependencies {
  311. api fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
  312. //kotlin
  313. implementation libs.kotlin.stdlib
  314. coreLibraryDesugaring libs.desugar.jdk.libs
  315. //androidx
  316. api libs.androidx.core.ktx
  317. api libs.androidx.appcompat
  318. api libs.androidx.constraint.layout
  319. api libs.androidx.activity
  320. api libs.androidx.fragment.ktx
  321. api libs.androidx.viewpager2
  322. api libs.androidx.lifecycle.livedata.ktx
  323. api libs.androidx.lifecycle.viewmodel.ktx
  324. api libs.androidx.exifinterface
  325. implementation libs.androidx.multidex
  326. implementation libs.androidx.vectordrawable
  327. implementation libs.androidx.work.manager
  328. api libs.androidx.room.runtime
  329. api libs.androidx.room.ktx
  330. api libs.flexbox
  331. kapt libs.androidx.room.compiler
  332. implementation libs.androidx.camera.core
  333. implementation libs.androidx.camera.camera2
  334. implementation libs.androidx.camera.lifecycle
  335. implementation libs.androidx.camera.video
  336. implementation libs.androidx.camera.view
  337. api libs.androidx.webkit
  338. //android
  339. implementation libs.android.material
  340. implementation libs.android.install.referrer
  341. //google play core
  342. implementation libs.play.feature.delivery
  343. implementation libs.play.feature.delivery.ktx
  344. implementation libs.play.app.update
  345. implementation libs.play.app.update.ktx
  346. //facebook
  347. implementation libs.facebook.android.sdk
  348. //adjust
  349. implementation libs.adjust.android
  350. implementation libs.adjust.android.webbridge
  351. implementation libs.gms.play.services.ads.identifier
  352. //java
  353. implementation libs.rxjava
  354. //channel
  355. implementation libs.tencent.vasdolly.helper
  356. //firebase
  357. implementation platform(libs.firebase.bom)
  358. implementation libs.firebase.analytics
  359. implementation libs.firebase.crashlytics
  360. implementation libs.firebase.crashlytics.ndk
  361. implementation libs.firebase.dynamic.link
  362. implementation libs.firebase.messaging
  363. //gson
  364. implementation libs.gson
  365. //other
  366. api libs.smart.refresh.layout.kernel
  367. api libs.smart.refresh.header.material
  368. api libs.smart.refresh.footer.classics
  369. api libs.media3.exoplayer
  370. api libs.media3.exoplayer.dash
  371. api libs.media3.ui
  372. // media3 v1.4.1 guava 单独设置, 待media3更新后移除
  373. implementation libs.guava
  374. api libs.video.processor
  375. api libs.payermax
  376. api libs.rxjava
  377. //image
  378. api libs.compressor
  379. //tencent rtc
  380. // api libs.tencent.tui.core
  381. //frame
  382. api platform(libs.frame.bom)
  383. // api libs.frame.tcturing
  384. api libs.frame.animplayer
  385. api libs.frame.drawee
  386. api libs.frame.image
  387. api libs.frame.mvvm
  388. api libs.frame.util
  389. api libs.frame.zero
  390. api libs.frame.base
  391. api libs.frame.network
  392. // api project(":frame:network")
  393. api libs.frame.retrofit
  394. api libs.frame.oss
  395. api libs.frame.download
  396. api libs.frame.sound
  397. api libs.frame.game
  398. api libs.frame.autosize
  399. api libs.frame.spi
  400. api libs.frame.data
  401. api libs.frame.aab
  402. api libs.frame.coroutine
  403. api libs.frame.storage
  404. api libs.frame.log
  405. api libs.frame.statistics
  406. // api project(":frame:statistics")
  407. api libs.frame.googleservice
  408. //api project(":frame:googleservice")
  409. api libs.frame.deviceid
  410. api libs.frame.security
  411. api libs.frame.guide
  412. api libs.frame.effect
  413. //api project(":frame:effect")
  414. api libs.frame.svga
  415. api libs.frame.debug
  416. api project(":frame:room")
  417. api project(":frame:oss")
  418. api libs.frame.startup
  419. api libs.frame.locale
  420. //api libs.frame.push
  421. api libs.frame.media
  422. api libs.frame.share
  423. api libs.frame.dot
  424. api libs.frame.crash
  425. api libs.frame.apm
  426. api libs.frame.audio
  427. api libs.frame.router.annotation
  428. api libs.frame.router.api
  429. kapt libs.frame.router.compiler
  430. implementation libs.toolargetool
  431. annotationProcessor libs.auto.service
  432. implementation(libs.rangeseekbar)
  433. implementation libs.frame.zxing
  434. implementation libs.pinyin
  435. api libs.tencent.tui.core
  436. api libs.tencent.uikit.common
  437. api project(":timcommon")
  438. api project(":tuichat")
  439. implementation project(":tuicontact")
  440. implementation project(":tuiconversation")
  441. api libs.tencent.imsdk
  442. api 'com.google.auto.service:auto-service-annotations:1.1.1'
  443. //implementation project(":tuiroomkit")
  444. api libs.tencent.timpush
  445. api libs.tencent.timpush.fcm
  446. api libs.tencent.atomic.x
  447. // debugApi "com.tuzhenlei:crashhandler:1.0.1"
  448. // debugApi 'cat.ereza:customactivityoncrash:2.3.0'
  449. // debugImplementation "io.github.yvescheung:Uinspector:2.0.20"
  450. // debugImplementation "io.github.yvescheung:Uinspector-optional-viewmodel:2.0.20"
  451. // debugImplementation "io.github.yvescheung:Uinspector-optional-fresco:2.0.20"
  452. // debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.10'
  453. //test
  454. testImplementation libs.junit
  455. androidTestImplementation libs.androidx.junit
  456. androidTestImplementation libs.androidx.espresso.core
  457. if (isEnableTrace) {
  458. implementation(libs.frame.trace.api)
  459. }
  460. api libs.flexbox
  461. }
  462. dependencyGuard {
  463. configuration("releaseRuntimeClasspath")
  464. }