mirror of
https://gitcode.com/GitHub_Trending/ji/jitsi-meet.git
synced 2025-12-30 11:22:31 +00:00
* This is a huge update, mostly because we updated Gradle on the Android side, which includes a more strict bundle process for third party modules. On iOS, even though new architecture is disabled, we had to be explicit about it because of this react native update and because some updated dependencies have it enabled by default and are using turbo modules which are not available, YET, in our project.
238 lines
9.2 KiB
Groovy
238 lines
9.2 KiB
Groovy
import groovy.json.JsonSlurper
|
|
import org.gradle.util.VersionNumber
|
|
|
|
// Top-level build file where you can add configuration options common to all
|
|
// sub-projects/modules.
|
|
|
|
buildscript {
|
|
ext {
|
|
kotlinVersion = "2.0.21"
|
|
gradlePluginVersion = "8.4.2"
|
|
buildToolsVersion = "34.0.0"
|
|
compileSdkVersion = 34
|
|
minSdkVersion = 26
|
|
targetSdkVersion = 34
|
|
supportLibVersion = "28.0.0"
|
|
ndkVersion = "27.1.12297006"
|
|
|
|
// The Maven artifact groupId of the third-party react-native modules which
|
|
// Jitsi Meet SDK for Android depends on and which are not available in
|
|
// third-party Maven repositories so we have to deploy to a Maven repository
|
|
// of ours.
|
|
moduleGroupId = 'com.facebook.react'
|
|
|
|
// Maven repo where artifacts will be published
|
|
mavenRepo = System.env.MVN_REPO ?: ""
|
|
mavenUser = System.env.MVN_USER ?: ""
|
|
mavenPassword = System.env.MVN_PASSWORD ?: ""
|
|
|
|
// Libre build
|
|
libreBuild = (System.env.LIBRE_BUILD ?: "false").toBoolean()
|
|
|
|
googleServicesEnabled = project.file('app/google-services.json').exists() && !libreBuild
|
|
|
|
//React Native and Hermes Version
|
|
rnVersion = "0.77.2"
|
|
|
|
// Java dependencies
|
|
javaVersion = JavaVersion.VERSION_17
|
|
jvmToolchainVersion = 17
|
|
jvmTargetVersion = '17'
|
|
}
|
|
repositories {
|
|
google()
|
|
mavenCentral()
|
|
}
|
|
dependencies {
|
|
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$rootProject.ext.kotlinVersion"
|
|
classpath "com.android.tools.build:gradle:$rootProject.ext.gradlePluginVersion"
|
|
classpath 'com.google.gms:google-services:4.4.0'
|
|
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.9'
|
|
}
|
|
}
|
|
|
|
allprojects {
|
|
repositories {
|
|
mavenCentral()
|
|
google()
|
|
maven { url 'https://www.jitpack.io' }
|
|
}
|
|
|
|
// Make sure we use the react-native version in node_modules and not the one
|
|
// published in jcenter / elsewhere.
|
|
configurations.all {
|
|
resolutionStrategy {
|
|
eachDependency { DependencyResolveDetails details ->
|
|
if (details.requested.group == 'com.facebook.react') {
|
|
if (details.requested.name == 'react-native') {
|
|
details.useTarget "com.facebook.react:react-android:$rnVersion"
|
|
}
|
|
if (details.requested.name == 'react-android') {
|
|
details.useVersion rootProject.ext.rnVersion
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Due to a dependency conflict between React Native and the Fresco library used by GiphySDK,
|
|
// GIFs appear as static images instead of animating
|
|
// https://github.com/Giphy/giphy-react-native-sdk/commit/7fe466ed6fddfaec95f9cbc959d33bd75ad8f900
|
|
|
|
configurations.configureEach {
|
|
resolutionStrategy {
|
|
forcedModules = [
|
|
'com.facebook.fresco:fresco:3.2.0',
|
|
'com.facebook.fresco:animated-gif:3.2.0',
|
|
'com.facebook.fresco:animated-base:3.2.0',
|
|
'com.facebook.fresco:animated-drawable:3.2.0',
|
|
'com.facebook.fresco:animated-webp:3.2.0',
|
|
'com.facebook.fresco:webpsupport:3.2.0',
|
|
'com.facebook.fresco:imagepipeline-okhttp3:3.2.0',
|
|
'com.facebook.fresco:middleware:3.2.0',
|
|
'com.facebook.fresco:nativeimagetranscoder:3.2.0'
|
|
]
|
|
}
|
|
}
|
|
|
|
// Third-party react-native modules which Jitsi Meet SDK for Android depends
|
|
// on and which are not available in third-party Maven repositories need to
|
|
// be deployed in a Maven repository of ours.
|
|
|
|
if (project.name.startsWith('react-native-')) {
|
|
apply plugin: 'maven-publish'
|
|
publishing {
|
|
publications {}
|
|
repositories {
|
|
maven {
|
|
url rootProject.ext.mavenRepo
|
|
if (!rootProject.ext.mavenRepo.startsWith("file")) {
|
|
credentials {
|
|
username rootProject.ext.mavenUser
|
|
password rootProject.ext.mavenPassword
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Use the number of seconds/10 since Jan 1 2019 as the version qualifier number.
|
|
// This will last for the next ~680 years.
|
|
// https://stackoverflow.com/a/38643838
|
|
def versionQualifierNumber = (int)(((new Date().getTime()/1000) - 1546297200) / 10)
|
|
|
|
afterEvaluate { project ->
|
|
if (project.plugins.hasPlugin('android') || project.plugins.hasPlugin('android-library')) {
|
|
project.android {
|
|
compileSdkVersion rootProject.ext.compileSdkVersion
|
|
buildToolsVersion rootProject.ext.buildToolsVersion
|
|
}
|
|
}
|
|
|
|
if (project.name.startsWith('react-native-')) {
|
|
def npmManifest = project.file('../package.json')
|
|
def json = new JsonSlurper().parseText(npmManifest.text)
|
|
|
|
// Release every dependency the SDK has with a -jitsi-XXX qualified version. This allows
|
|
// us to pin the dependencies and make sure they are always updated, no matter what.
|
|
|
|
project.version = "${json.version}-jitsi-${versionQualifierNumber}"
|
|
|
|
task jitsiAndroidSourcesJar(type: Jar) {
|
|
archiveClassifier = 'sources'
|
|
from android.sourceSets.main.java.source
|
|
}
|
|
|
|
publishing.publications {
|
|
aarArchive(MavenPublication) {
|
|
groupId rootProject.ext.moduleGroupId
|
|
artifactId project.name
|
|
version project.version
|
|
|
|
artifact("${project.buildDir}/outputs/aar/${project.name}-release.aar") {
|
|
extension "aar"
|
|
}
|
|
artifact(jitsiAndroidSourcesJar)
|
|
pom.withXml {
|
|
def pomXml = asNode()
|
|
pomXml.appendNode('name', project.name)
|
|
pomXml.appendNode('description', json.description)
|
|
pomXml.appendNode('url', json.homepage)
|
|
if (json.license) {
|
|
def license = pomXml.appendNode('licenses').appendNode('license')
|
|
license.appendNode('name', json.license)
|
|
license.appendNode('distribution', 'repo')
|
|
}
|
|
|
|
def dependencies = pomXml.appendNode('dependencies')
|
|
configurations.getByName('releaseCompileClasspath').getResolvedConfiguration().getFirstLevelModuleDependencies().each {
|
|
def artifactId = it.moduleName
|
|
def version = it.moduleVersion
|
|
// React Native signals breaking changes by
|
|
// increasing the minor version number. So the
|
|
// (third-party) React Native modules we utilize can
|
|
// depend not on a specific react-native release but
|
|
// a wider range.
|
|
if (artifactId == 'react-native') {
|
|
def versionNumber = VersionNumber.parse(version)
|
|
version = "${versionNumber.major}.${versionNumber.minor}"
|
|
}
|
|
|
|
def dependency = dependencies.appendNode('dependency')
|
|
dependency.appendNode('groupId', it.moduleGroup)
|
|
dependency.appendNode('artifactId', artifactId)
|
|
dependency.appendNode('version', version)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Force the version of the Android build tools we have chosen on all subprojects.
|
|
subprojects { subproject ->
|
|
afterEvaluate{
|
|
if ((subproject.plugins.hasPlugin('android')
|
|
|| subproject.plugins.hasPlugin('android-library'))
|
|
&& rootProject.ext.has('buildToolsVersion')) {
|
|
|
|
android {
|
|
buildToolsVersion rootProject.ext.buildToolsVersion
|
|
|
|
buildFeatures {
|
|
buildConfig true
|
|
}
|
|
|
|
// Set JVM target across all subprojects
|
|
compileOptions {
|
|
sourceCompatibility rootProject.ext.javaVersion
|
|
targetCompatibility rootProject.ext.javaVersion
|
|
}
|
|
|
|
// Disable lint errors for problematic third-party modules
|
|
// react-native-background-timer
|
|
// react-native-calendar-events
|
|
lint {
|
|
abortOnError = false
|
|
}
|
|
}
|
|
}
|
|
|
|
// Add Kotlin configuration for subprojects that use Kotlin
|
|
if (subproject.plugins.hasPlugin('kotlin-android')) {
|
|
subproject.kotlin {
|
|
jvmToolchain(rootProject.ext.jvmToolchainVersion)
|
|
}
|
|
|
|
// Set Kotlin JVM target
|
|
subproject.android {
|
|
kotlinOptions {
|
|
jvmTarget = rootProject.ext.jvmTargetVersion
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|