123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 |
- 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 {
- repositories {
- google()
- mavenCentral()
- }
- dependencies {
- classpath 'com.android.tools.build:gradle:7.4.2'
- classpath 'com.google.gms:google-services:4.4.0'
- classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.9'
- }
- }
-
- ext {
- kotlinVersion = "1.9.24"
- buildToolsVersion = "34.0.0"
- compileSdkVersion = 34
- minSdkVersion = 26
- targetSdkVersion = 34
- supportLibVersion = "28.0.0"
- ndkVersion = "26.1.10909125"
-
- // 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.75.5"
- }
-
- 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) {
- classifier = '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. The forcing was introduced for react-native and the third-party
- // modules that we utilize such as react-native-background-timer.
- subprojects { subproject ->
- afterEvaluate{
- if ((subproject.plugins.hasPlugin('android')
- || subproject.plugins.hasPlugin('android-library'))
- && rootProject.ext.has('buildToolsVersion')) {
- android {
- buildToolsVersion rootProject.ext.buildToolsVersion
- }
- }
- }
- }
|