mirror of
https://gitcode.com/GitHub_Trending/ji/jitsi-meet.git
synced 2026-09-09 12:38:43 +00:00
Update Android build to support gif Use GIF format instead of animated webp Show GIFs in chat messages Display GIF over tile Add Giphy button in reactions menu Added Giphy dialog Fix isGifMessage to also allow upper case
256 lines
9.2 KiB
Groovy
256 lines
9.2 KiB
Groovy
apply plugin: 'com.android.library'
|
|
apply plugin: 'maven-publish'
|
|
|
|
android {
|
|
compileSdkVersion rootProject.ext.compileSdkVersion
|
|
ndkVersion rootProject.ext.ndkVersion
|
|
|
|
defaultConfig {
|
|
minSdkVersion rootProject.ext.minSdkVersion
|
|
targetSdkVersion rootProject.ext.targetSdkVersion
|
|
}
|
|
|
|
buildTypes {
|
|
debug {
|
|
buildConfigField "boolean", "LIBRE_BUILD", "${rootProject.ext.libreBuild}"
|
|
buildConfigField "boolean", "GOOGLE_SERVICES_ENABLED", "${rootProject.ext.googleServicesEnabled}"
|
|
}
|
|
release {
|
|
minifyEnabled false
|
|
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
|
buildConfigField "boolean", "LIBRE_BUILD", "${rootProject.ext.libreBuild}"
|
|
buildConfigField "boolean", "GOOGLE_SERVICES_ENABLED", "${rootProject.ext.googleServicesEnabled}"
|
|
}
|
|
}
|
|
|
|
sourceSets {
|
|
main {
|
|
java {
|
|
exclude "test/"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
dependencies {
|
|
implementation fileTree(dir: 'libs', include: ['*.jar'])
|
|
|
|
// https://github.com/facebook/react-native/issues/31572
|
|
// We can update past 1.4.0 on RN 0.68
|
|
implementation ('androidx.appcompat:appcompat:1.3.1') {
|
|
version {
|
|
strictly '1.3.1'
|
|
}
|
|
}
|
|
implementation 'androidx.fragment:fragment:1.4.0'
|
|
implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0'
|
|
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
|
|
|
|
//noinspection GradleDynamicVersion
|
|
api 'com.facebook.react:react-native:+'
|
|
//noinspection GradleDynamicVersion
|
|
implementation 'org.webkit:android-jsc:+'
|
|
|
|
implementation 'com.facebook.fresco:animated-gif:2.5.0'
|
|
implementation 'com.dropbox.core:dropbox-core-sdk:4.0.1'
|
|
implementation 'com.jakewharton.timber:timber:4.7.1'
|
|
implementation 'com.squareup.duktape:duktape-android:1.3.0'
|
|
implementation 'com.google.code.gson:gson:2.8.6'
|
|
implementation "androidx.startup:startup-runtime:1.1.0"
|
|
|
|
if (rootProject.ext.libreBuild) {
|
|
implementation(project(':react-native-device-info')) {
|
|
exclude group: 'com.google.firebase'
|
|
exclude group: 'com.google.android.gms'
|
|
exclude group: 'com.android.installreferrer'
|
|
}
|
|
} else {
|
|
implementation project(':react-native-amplitude')
|
|
implementation project(':react-native-device-info')
|
|
implementation(project(":react-native-google-signin")) {
|
|
exclude group: 'com.google.android.gms'
|
|
exclude group: 'androidx'
|
|
}
|
|
}
|
|
|
|
implementation project(':react-native-async-storage')
|
|
implementation project(':react-native-background-timer')
|
|
implementation project(':react-native-calendar-events')
|
|
implementation project(':react-native-community_clipboard')
|
|
implementation project(':react-native-community_netinfo')
|
|
implementation project(':react-native-default-preference')
|
|
implementation project(':react-native-gesture-handler')
|
|
implementation project(':react-native-get-random-values')
|
|
implementation project(':react-native-giphy')
|
|
implementation project(':react-native-immersive')
|
|
implementation project(':react-native-keep-awake')
|
|
implementation project(':react-native-masked-view_masked-view')
|
|
implementation project(':react-native-pager-view')
|
|
implementation project(':react-native-performance')
|
|
implementation project(':react-native-reanimated')
|
|
implementation project(':react-native-safe-area-context')
|
|
implementation project(':react-native-screens')
|
|
implementation project(':react-native-slider')
|
|
implementation project(':react-native-sound')
|
|
implementation project(':react-native-splash-screen')
|
|
implementation project(':react-native-svg')
|
|
implementation project(':react-native-video')
|
|
implementation project(':react-native-webrtc')
|
|
implementation project(':react-native-webview')
|
|
|
|
testImplementation 'junit:junit:4.12'
|
|
}
|
|
|
|
|
|
// Here we bundle all assets, resources and React files. We cannot use the
|
|
// react.gradle file provided by react-native because it's designed to be used
|
|
// in an application (it taps into applicationVariants, but the SDK is a library
|
|
// so we need libraryVariants instead).
|
|
android.libraryVariants.all { def variant ->
|
|
// Create variant and target names
|
|
def targetName = variant.name.capitalize()
|
|
def targetPath = variant.dirName
|
|
|
|
// React js bundle directories
|
|
def jsBundleDir = file("$buildDir/generated/assets/react/${targetPath}")
|
|
def resourcesDir = file("$buildDir/generated/res/react/${targetPath}")
|
|
|
|
def jsBundleFile = file("$jsBundleDir/index.android.bundle")
|
|
|
|
def currentBundleTask = tasks.create(
|
|
name: "bundle${targetName}JsAndAssets",
|
|
type: Exec) {
|
|
group = "react"
|
|
description = "bundle JS and assets for ${targetName}."
|
|
|
|
// Create dirs if they are not there (e.g. the "clean" task just ran)
|
|
doFirst {
|
|
jsBundleDir.deleteDir()
|
|
jsBundleDir.mkdirs()
|
|
resourcesDir.deleteDir()
|
|
resourcesDir.mkdirs()
|
|
}
|
|
|
|
// Set up inputs and outputs so gradle can cache the result
|
|
def reactRoot = file("${projectDir}/../../")
|
|
inputs.files fileTree(dir: reactRoot, excludes: ["android/**", "ios/**"])
|
|
outputs.dir jsBundleDir
|
|
outputs.dir resourcesDir
|
|
|
|
// Set up the call to the react-native cli
|
|
workingDir reactRoot
|
|
|
|
// Set up dev mode
|
|
def devEnabled = !targetName.toLowerCase().contains("release")
|
|
|
|
// Run the bundler
|
|
commandLine(
|
|
"node",
|
|
"node_modules/react-native/local-cli/cli.js",
|
|
"bundle",
|
|
"--platform", "android",
|
|
"--dev", "${devEnabled}",
|
|
"--reset-cache",
|
|
"--entry-file", "index.android.js",
|
|
"--bundle-output", jsBundleFile,
|
|
"--assets-dest", resourcesDir)
|
|
|
|
// Disable bundling on dev builds
|
|
enabled !devEnabled
|
|
}
|
|
|
|
currentBundleTask.ext.generatedResFolders = files(resourcesDir).builtBy(currentBundleTask)
|
|
currentBundleTask.ext.generatedAssetsFolders = files(jsBundleDir).builtBy(currentBundleTask)
|
|
variant.registerGeneratedResFolders(currentBundleTask.generatedResFolders)
|
|
|
|
def mergeAssetsTask = variant.mergeAssetsProvider.get()
|
|
def mergeResourcesTask = variant.mergeResourcesProvider.get()
|
|
|
|
mergeAssetsTask.dependsOn(currentBundleTask)
|
|
mergeResourcesTask.dependsOn(currentBundleTask)
|
|
|
|
mergeAssetsTask.doLast {
|
|
def assetsDir = mergeAssetsTask.outputDir.get()
|
|
|
|
// Bundle sounds
|
|
//
|
|
copy {
|
|
from("${projectDir}/../../sounds")
|
|
include("*.wav")
|
|
include("*.mp3")
|
|
into("${assetsDir}/sounds")
|
|
}
|
|
|
|
// Copy React assets
|
|
//
|
|
if (currentBundleTask.enabled) {
|
|
copy {
|
|
from(jsBundleFile)
|
|
into(assetsDir)
|
|
}
|
|
}
|
|
}
|
|
|
|
mergeResourcesTask.doLast {
|
|
// Copy React resources
|
|
//
|
|
if (currentBundleTask.enabled) {
|
|
copy {
|
|
from(resourcesDir)
|
|
into(mergeResourcesTask.outputDir.get())
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
publishing {
|
|
publications {
|
|
aarArchive(MavenPublication) {
|
|
groupId 'org.jitsi.react'
|
|
artifactId 'jitsi-meet-sdk'
|
|
version System.env.OVERRIDE_SDK_VERSION ?: project.sdkVersion
|
|
|
|
artifact("${project.buildDir}/outputs/aar/${project.name}-release.aar") {
|
|
extension "aar"
|
|
}
|
|
pom.withXml {
|
|
def pomXml = asNode()
|
|
pomXml.appendNode('name', 'jitsi-meet-sdk')
|
|
pomXml.appendNode('description', 'Jitsi Meet SDK for Android')
|
|
def dependencies = pomXml.appendNode('dependencies')
|
|
configurations.getByName('releaseCompileClasspath').getResolvedConfiguration().getFirstLevelModuleDependencies().each {
|
|
// The (third-party) React Native modules that we depend on
|
|
// are in source code form and do not have groupId. That is
|
|
// why we have a dedicated groupId for them. But the other
|
|
// dependencies come through Maven and, consequently, have
|
|
// groupId.
|
|
def groupId = it.moduleGroup
|
|
def artifactId = it.moduleName
|
|
|
|
if (artifactId.startsWith('react-native-')) {
|
|
groupId = rootProject.ext.moduleGroupId
|
|
}
|
|
|
|
def dependency = dependencies.appendNode('dependency')
|
|
dependency.appendNode('groupId', groupId)
|
|
dependency.appendNode('artifactId', artifactId)
|
|
dependency.appendNode('version', it.moduleVersion)
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
repositories {
|
|
maven {
|
|
url rootProject.ext.mavenRepo
|
|
if (!rootProject.ext.mavenRepo.startsWith("file")) {
|
|
credentials {
|
|
username rootProject.ext.mavenUser
|
|
password rootProject.ext.mavenPassword
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|