I try to revive an old React/Gradle/Buck/Android/Fastlane project for a friend whose developer moved whithout telling anybody anything.
The task was just to change the server of the app, but well I cannot build it.
First I installed all the (already updated) node_modules
{
"name": "TimeSheduler",
"version": "0.1.0",
"private": true,
"devDependencies": {
"@babel/core": "^7.20.12",
"@babel/runtime": "^7.20.13",
"@react-native-community/cli-debugger-ui": "^10.0.0",
"@react-native-community/eslint-config": "^3.2.0",
"babel-jest": "^29.4.2",
"babel-plugin-transform-remove-console": "^6.9.4",
"eslint": "^8.33.0",
"jest": "^29.4.2",
"metro-react-native-babel-preset": "^0.75.0",
"react-test-renderer": "18.2.0"
},
"scripts": {
"start": "react-native start",
"android": "cp ./src/globals/globalsTimeSheduler.js ./src/globals/globals.js && react-native run-android --variant=TimeShedulerDebug --appIdSuffix TimeSheduler",
"TimeSheduler": "cp ./src/globals/globalsTimeSheduler.js ./src/globals/globals.js && react-native run-android --variant=TimeShedulerDebug --appIdSuffix TimeSheduler",
"ios": "react-native run-ios",
"clean-start": "rm -rf node_modules && npm install && rm -rf $TMPDIR/react* && npm start --reset-cache",
"build-android": "bundle exec fastlane android build_all",
"build-ios": "bundle exec fastlane ios build_all",
"fetch-meta-android": "bundle exec fastlane android fetch_metadata",
"fetch-meta-ios": "bundle exec fastlane ios fetch_metadata",
"upload-internal-android": "bundle exec fastlane android upload_and_release track:internal",
"upload-production-android": "bundle exec fastlane android upload_and_release track:production",
"upload-internal-ios": "bundle exec fastlane ios upload_internal",
"release-latest-ios": "bundle exec fastlane ios release_latest",
"lint": "eslint ."
},
"jest": {
"preset": "react-native"
},
"dependencies": {
"@react-native-community/blur": "^4.3.0",
"@react-native-community/datetimepicker": "^6.7.4",
"@react-native-community/netinfo": "^9.3.7",
"@react-native-community/slider": "^4.4.2",
"@react-native-community/eslint-config": "^3.2.0",
"@react-native-picker/picker": "^2.4.8",
"color": "^4.2.3",
"hermes-engine": "^0.11.0",
"hermes-engine-cli": "^0.12.0",
"htmlparser2": "^8.0.1",
"lodash.debounce": "^4.0.8",
"moment": "^2.29.4",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-native": "^0.71.2",
"react-native-add-calendar-event": "^4.0.0",
"react-native-check-box": "^2.1.7",
"react-native-circular-progress": "^1.0.0",
"react-native-gesture-handler": "^2.9.0",
"react-native-pager-view": "^6.1.2",
"react-native-media-controls": "^2.3.0",
"react-native-navigation": "^7.32.0",
"react-native-reanimated": "^2.14.4",
"react-native-render-html": "^6.3.4",
"@miblanchard/react-native-slider": "^2.2.0",
"react-native-scalable-image": "^1.1.0",
"react-native-simple-radio-button": "^2.7.4",
"react-native-svg": "^13.8.0",
"react-native-swiper": "^1.6.0",
"react-native-ui-lib": "^6.30.0",
"react-native-vector-icons": "^9.2.0",
"react-native-version-number": "^0.3.6",
"react-native-video": "^5.2.1",
"react-native-webview": "^11.26.1",
"react-redux": "^8.0.5",
"redux": "^4.2.1",
"redux-logger": "^3.0.6",
"redux-persist": "^6.0.0",
"redux-thunk": "^2.4.2",
"rn-material-ui-textfield": "^1.0.9"
}
}
I generated a pair of keys
eytool -genkey -v -keystore keystores/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname "CN=Android Debug,O=Android,C=US"
Here are the two build.gradle scripts: Base/Root version:
apply plugin: "com.android.application"
import com.android.build.OutputFile
/**
* The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets
* and bundleReleaseJsAndAssets).
* These basically call `react-native bundle` with the correct arguments during the Android build
* cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the
* bundle directly from the development server. Below you can see all the possible configurations
* and their defaults. If you decide to add a configuration block, make sure to add it before the
* `apply from: "../../node_modules/react-native/react.gradle"` line.
*
* project.ext.react = [
* // the name of the generated asset file containing your JS bundle
* bundleAssetName: "index.android.bundle",
*
* // the entry file for bundle generation. If none specified and
* // "index.android.js" exists, it will be used. Otherwise "index.js" is
* // default. Can be overridden with ENTRY_FILE environment variable.
* entryFile: "index.android.js",
*
* // https://reactnative.dev/docs/performance#enable-the-ram-format
* bundleCommand: "ram-bundle",
*
* // whether to bundle JS and assets in debug mode
* bundleInDebug: false,
*
* // whether to bundle JS and assets in release mode
* bundleInRelease: true,
*
* // whether to bundle JS and assets in another build variant (if configured).
* // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants
* // The configuration property can be in the following formats
* // 'bundleIn${productFlavor}${buildType}'
* // 'bundleIn${buildType}'
* // bundleInFreeDebug: true,
* // bundleInPaidRelease: true,
* // bundleInBeta: true,
*
* // whether to disable dev mode in custom build variants (by default only disabled in release)
* // for example: to disable dev mode in the staging build type (if configured)
* devDisabledInStaging: true,
* // The configuration property can be in the following formats
* // 'devDisabledIn${productFlavor}${buildType}'
* // 'devDisabledIn${buildType}'
*
* // the root of your project, i.e. where "package.json" lives
* root: "../../",
*
* // where to put the JS bundle asset in debug mode
* jsBundleDirDebug: "$buildDir/intermediates/assets/debug",
*
* // where to put the JS bundle asset in release mode
* jsBundleDirRelease: "$buildDir/intermediates/assets/release",
*
* // where to put drawable resources / React Native assets, e.g. the ones you use via
* // require('./image.png')), in debug mode
* resourcesDirDebug: "$buildDir/intermediates/res/merged/debug",
*
* // where to put drawable resources / React Native assets, e.g. the ones you use via
* // require('./image.png')), in release mode
* resourcesDirRelease: "$buildDir/intermediates/res/merged/release",
*
* // by default the gradle tasks are skipped if none of the JS files or assets change; this means
* // that we don't look at files in android/ or ios/ to determine whether the tasks are up to
* // date; if you have any other folders that you want to ignore for performance reasons (gradle
* // indexes the entire tree), add them here. Alternatively, if you have JS files in android/
* // for example, you might want to remove it from here.
* inputExcludes: ["android/**", "ios/**"],
*
* // override which node gets called and with what additional arguments
* nodeExecutableAndArgs: ["node"],
*
* // supply additional arguments to the packager
* extraPackagerArgs: []
* ]
*/
project.ext.react = [
enableHermes: true, // clean and rebuild if changing
]
apply from: "../../node_modules/react-native/react.gradle"
project.ext.vectoricons = [
iconFontNames: [ 'FontAwesome5_Regular.ttf', 'FontAwesome5_Solid.tff' ] // Name of the font files you want to copy
]
apply from: "../../node_modules/react-native-vector-icons/fonts.gradle"
/**
* Set this to true to create two separate APKs instead of one:
* - An APK that only works on ARM devices
* - An APK that only works on x86 devices
* The advantage is the size of the APK is reduced by about 4MB.
* Upload all the APKs to the Play Store and people will download
* the correct one based on the CPU architecture of their device.
*/
def enableSeparateBuildPerCPUArchitecture = false
/**
* Run Proguard to shrink the Java bytecode in release builds.
*/
def enableProguardInReleaseBuilds = false
/**
* The preferred build flavor of JavaScriptCore.
*
* For example, to use the international variant, you can use:
* `def jscFlavor = 'org.webkit:android-jsc-intl:+'`
*
* The international variant includes ICU i18n library and necessary data
* allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that
* give correct results when using with locales other than en-US. Note that
* this variant is about 6MiB larger per architecture than default.
*/
def jscFlavor = 'org.webkit:android-jsc:+'
/**
* Whether to enable the Hermes VM.
*
* This should be set on project.ext.react and mirrored here. If it is not set
* on project.ext.react, JavaScript will not be compiled to Hermes Bytecode
* and the benefits of using Hermes will therefore be sharply reduced.
* configurations.implementation.setCanBeResolved(true)
* configurations.api.setCanBeResolved(true)
*/
def enableHermes = project.ext.react.get("enableHermes", false);
def REACT_NATIVE_VERSION = new File(['node', '--print',"JSON.parse(require('fs').readFileSync(require.resolve('react-native/package.json'), 'utf-8')).version"].execute(null, rootDir).text.trim());
apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle");
applyNativeModulesAppBuildGradle(project)
android {
namespace 'com.TimeSheduler.TimeSheduler'
configurations.all {
resolutionStrategy {
force 'com.facebook.react:react-native:'+ REACT_NATIVE_VERSION
}
}
configurations.implementation.setCanBeResolved(true)
configurations.api.setCanBeResolved(true)
signingConfigs {
release {
if (project.hasProperty('MYAPP_UPLOAD_STORE_FILE')) {
storeFile file(System.env.HOME + '/.android/debug.keystore')
storePassword 'android'
keyAlias 'androiddebugkey'
keyPassword 'android'
}
}
}
ndkVersion rootProject.ext.ndkVersion
compileSdkVersion rootProject.ext.compileSdkVersion
buildToolsVersion rootProject.ext.buildToolsVersion
flavorDimensions "release"
defaultConfig {
applicationId "com.TimeSheduler"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
multiDexEnabled true
// Required for React Native Navigation
missingDimensionStrategy "RNN.reactNativeVersion", "reactNative68"
versionCode 35
versionName "1.2.18"
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
splits {
abi {
reset()
enable enableSeparateBuildPerCPUArchitecture
universalApk false // If true, also generate a universal APK
include "armeabi-v7a", "x86", "arm64-v8a", "x86_64"
}
}
buildTypes {
release {
minifyEnabled enableProguardInReleaseBuilds
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
signingConfig signingConfigs.release
}
}
productFlavors {
TimeSheduler {
minSdkVersion rootProject.ext.minSdkVersion
applicationId 'com.TimeSheduler.TimeSheduler'
targetSdkVersion rootProject.ext.targetSdkVersion
resValue "string", "build_config_package", "com.TimeSheduler.TimeSheduler"
resValue "string", "app_name", "TimeSheduler"
}
}
// applicationVariants are e.g. debug, release
applicationVariants.all { variant ->
variant.outputs.each { output ->
// For each separate APK per architecture, set a unique version code as described here:
// https://developer.android.com/studio/build/configure-apk-splits.html
// Example: versionCode 1 will generate 1001 for armeabi-v7a, 1002 for x86, etc.
def versionCodes = ["armeabi-v7a": 1, "x86": 2, "arm64-v8a": 3, "x86_64": 4]
def abi = output.getFilter(OutputFile.ABI)
if (abi != null) { // null for the universal-debug, universal-release variants
output.versionCodeOverride = defaultConfig.versionCode * 1000 + versionCodes.get(abi)
}
}
}
}
dependencies {
implementation fileTree(dir: "libs", include: ["*.jar"])
implementation 'com.facebook.react:react-native:0.68.2'
implementation 'com.google.android.material:material:1.3.0'
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation "com.android.support:support-v4:28.0.0"
implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.0.0"
implementation 'androidx.multidex:multidex:2.0.1'
if (enableHermes) {
def hermesPath = "../../node_modules/hermes-engine/android/";
//debugImplementation files(hermesPath + "hermes-debug.aar")
releaseImplementation files(hermesPath + "hermes-release.aar")
} else {
implementation jscFlavor
}
}
// Run this once to be able to run the application with BUCK
// puts all compile dependencies into folder libs for BUCK to use
task copyDownloadableDepsToLibs(type: Copy) {
from configurations.implementation
into 'libs'
}
// Task to copy all the modules' jars. It can be run with command [ ./gradlew copyModuleJars ]
task copyModuleJars {
group = 'Copy Jar'
description = 'Copy the classes.jar from each module.'
}
And ./android/build.gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext {
buildToolsVersion = "33.0.1"
minSdkVersion = 33
compileSdkVersion = 33
targetSdkVersion = 33
ndkVersion = "20.1.5948944"
RNNKotlinVersion = "1.8.10" // Or any version above 1.3.x
RNNKotlinStdlib = "kotlin-stdlib-jdk8"
}
repositories {
google()
mavenCentral()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.10"
classpath('com.android.tools.build:gradle:7.4.1')
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
mavenCentral()
}
}
// Add the modules that you want to exclude from having this copyXXXJar task.
def modulesExcluded = [
'app',
'mastermodulewantedoutput'
]
subprojects { subproject ->
// Skip excluded modules
if (modulesExcluded.contains(subproject.name)) {
subproject.afterEvaluate {
tasks['preBuild'].dependsOn(copyModuleJars)
}
return
}
afterEvaluate {
if ((subproject.plugins.hasPlugin('android') || subproject.plugins.hasPlugin('android-library'))) {
/**
* Dynamically create task "copyXXXJar" according to build variant of each library module.
*/
android.libraryVariants.all { variant ->
def capitalizedVariantName = variant.name.capitalize()
def variantName = variant.flavorName
if (!variantName || variantName == "") {
variantName = variant.buildType.name
} else {
variantName += "-${variant.buildType.name}"
}
println(variantName)
//================================================================================
// Define build/copy variant jar and copy to dependencies
//================================================================================
def copyJarTask = project.tasks.create("copy${capitalizedVariantName}Jar", Copy) {
group "Copy Jar"
description "Rename the classes.jar to ${project.name}-${variantName}.jar and copy it into dist folder."
println(description)
def fromDirModule = "$buildDir/outputs/aar/${project.name}-${variantName}.aar"
def intoDirModule = "$rootDir/dependencies/$variant.buildType.name"
println("From ${fromDirModule} to ${intoDirModule}")
println(zipTree(fromDirModule))
from(zipTree(fromDirModule))
into(intoDirModule)
include('*.jar')
include('libs/*.jar')
rename('classes.jar', "${project.name}-${variantName}.jar")
dependsOn "assemble${capitalizedVariantName}"
}
copyModuleJars.dependsOn(copyJarTask)
}
android {
variantFilter { variant ->
def names = variant.flavors*.name
if (names.contains("reactNative51") || names.contains("reactNative55") || names.contains("reactNative56") || names.contains("reactNative57") || names.contains("reactNative57_5") || names.contains("reactNative60") || names.contains("reactNative62") || names.contains("reactNative63") || names.contains("reactNative68")) {
setIgnore(true)
}
def variantType = variant.buildType.name
if (variantType == "debug") {
setIgnore(true)
}
}
compileSdkVersion rootProject.ext.compileSdkVersion
buildToolsVersion rootProject.ext.buildToolsVersion
defaultConfig {
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
}
}
configure(android.lintOptions) {
abortOnError false
checkReleaseBuilds false
}
}
}
}
// Task to copy all the modules' jars. It can be run with command [ ./gradlew copyModuleJars ]
task copyModuleJars {
group = 'Copy Jar'
description = 'Copy the classes.jar from each module.'
}
I really need help to get this "perfectly good" project running so I can make little changes ;-)
I have the full Suite from JetBrains and AndroidStudio available but I am not really this familiar with Gradle/Android/Buck/Fastlane/node and so on...
I tried:
And I tried to make all the gradle compile dependences available for Buck
./gradlew :app:copyDownloadableDepsToLibs
I was expecting something like:
BUILD SUCCESSFUL in 8s
There I got multiple errors, I was able to solve most of them but this:
FAILURE: Build failed with an exception.
* What went wrong:
Could not determine the dependencies of task ':app:copyDownloadableDepsToLibs'.
> Could not resolve all task dependencies for configuration ':app:implementation'.
> More than one variant of project :react-native-community_blur matches the consumer attributes:
- Configuration ':react-native-community_blur:releaseRuntimeElements' variant android-classes-jar:
- Unmatched attributes:
- Provides artifactType 'android-classes-jar' but the consumer didn't ask for it
- Provides com.android.build.api.attributes.AgpVersionAttr '7.4.1' but the consumer didn't ask for it
- Provides com.android.build.api.attributes.BuildTypeAttr 'release' but the consumer didn't ask for it
- Provides com.android.build.gradle.internal.attributes.VariantAttr 'release' but the consumer didn't ask for it
- Provides org.gradle.libraryelements 'jar' but the consumer didn't ask for it
- Provides org.gradle.usage 'java-runtime' but the consumer didn't ask for it
- Configuration ':react-native-community_blur:releaseRuntimeElements' variant android-java-res:
- Unmatched attributes:
- Provides artifactType 'android-java-res' but the consumer didn't ask for it
- Provides com.android.build.api.attributes.AgpVersionAttr '7.4.1' but the consumer didn't ask for it
- Provides com.android.build.api.attributes.BuildTypeAttr 'release' but the consumer didn't ask for it
- Provides com.android.build.gradle.internal.attributes.VariantAttr 'release' but the consumer didn't ask for it
- Provides org.gradle.libraryelements 'jar' but the consumer didn't ask for it
- Provides org.gradle.usage 'java-runtime' but the consumer didn't ask for it
- Configuration ':react-native-community_blur:releaseRuntimeElements' variant android-lint:
- Unmatched attributes:
- Provides artifactType 'android-lint' but the consumer didn't ask for it
- Provides com.android.build.api.attributes.AgpVersionAttr '7.4.1' but the consumer didn't ask for it
- Provides com.android.build.api.attributes.BuildTypeAttr 'release' but the consumer didn't ask for it
- Provides com.android.build.gradle.internal.attributes.VariantAttr 'release' but the consumer didn't ask for it
- Provides org.gradle.libraryelements 'jar' but the consumer didn't ask for it
- Provides org.gradle.usage 'java-runtime' but the consumer didn't ask for it
> More than one variant of project :react-native-webview matches the consumer attributes:
- Configuration ':react-native-webview:releaseRuntimeElements' variant android-classes-jar:
- Unmatched attributes:
- Provides artifactType 'android-classes-jar' but the consumer didn't ask for it
- Provides com.android.build.api.attributes.AgpVersionAttr '7.4.1' but the consumer didn't ask for it
- Provides com.android.build.api.attributes.BuildTypeAttr 'release' but the consumer didn't ask for it
- Provides com.android.build.gradle.internal.attributes.VariantAttr 'release' but the consumer didn't ask for it
- Provides org.gradle.category 'library' but the consumer didn't ask for it
- Provides org.gradle.jvm.environment 'android' but the consumer didn't ask for it
- Provides org.gradle.libraryelements 'jar' but the consumer didn't ask for it
- Provides org.gradle.usage 'java-runtime' but the consumer didn't ask for it
- Provides org.jetbrains.kotlin.platform.type 'androidJvm' but the consumer didn't ask for it
- Configuration ':react-native-webview:releaseRuntimeElements' variant android-java-res:
- Unmatched attributes:
- Provides artifactType 'android-java-res' but the consumer didn't ask for it
- Provides com.android.build.api.attributes.AgpVersionAttr '7.4.1' but the consumer didn't ask for it
- Provides com.android.build.api.attributes.BuildTypeAttr 'release' but the consumer didn't ask for it
- Provides com.android.build.gradle.internal.attributes.VariantAttr 'release' but the consumer didn't ask for it
- Provides org.gradle.category 'library' but the consumer didn't ask for it
- Provides org.gradle.jvm.environment 'android' but the consumer didn't ask for it
- Provides org.gradle.libraryelements 'jar' but the consumer didn't ask for it
- Provides org.gradle.usage 'java-runtime' but the consumer didn't ask for it
- Provides org.jetbrains.kotlin.platform.type 'androidJvm' but the consumer didn't ask for it
- Configuration ':react-native-webview:releaseRuntimeElements' variant android-lint:
- Unmatched attributes:
- Provides artifactType 'android-lint' but the consumer didn't ask for it
- Provides com.android.build.api.attributes.AgpVersionAttr '7.4.1' but the consumer didn't ask for it
- Provides com.android.build.api.attributes.BuildTypeAttr 'release' but the consumer didn't ask for it
- Provides com.android.build.gradle.internal.attributes.VariantAttr 'release' but the consumer didn't ask for it
- Provides org.gradle.category 'library' but the consumer didn't ask for it
- Provides org.gradle.jvm.environment 'android' but the consumer didn't ask for it
- Provides org.gradle.libraryelements 'jar' but the consumer didn't ask for it
- Provides org.gradle.usage 'java-runtime' but the consumer didn't ask for it
- Provides org.jetbrains.kotlin.platform.type 'androidJvm' but the consumer didn't ask for it
- Configuration ':react-native-webview:releaseRuntimeElements' variant jar:
- Unmatched attributes:
- Provides artifactType 'jar' but the consumer didn't ask for it
- Provides com.android.build.api.attributes.AgpVersionAttr '7.4.1' but the consumer didn't ask for it
- Provides com.android.build.api.attributes.BuildTypeAttr 'release' but the consumer didn't ask for it
- Provides com.android.build.gradle.internal.attributes.VariantAttr 'release' but the consumer didn't ask for it
- Provides org.gradle.category 'library' but the consumer didn't ask for it
- Provides org.gradle.jvm.environment 'android' but the consumer didn't ask for it
- Provides org.gradle.libraryelements 'jar' but the consumer didn't ask for it
- Provides org.gradle.usage 'java-runtime' but the consumer didn't ask for it
- Provides org.jetbrains.kotlin.platform.type 'androidJvm' but the consumer didn't ask for it
Regarding the documentation I should use copyDownloadableDepsToLibs (root build.gradle).
But I also tried to use the solution provided here xamarins solution - but I don't necessarily need to copy the .jar files especially because there mostly are no .jar files.
The thing is when I try to build the project using buck:
buck install -r //android/app
I get the message, that packages are missing:
artjom@artjom-ThinkPad-W530:~/TimeShedulerapp/android$ buck install -r //android/app
Watchman raised a warning: Recrawled this watch 27 times, most recently because:
dir missing from internal stateTo resolve, please review the information on
https://facebook.github.io/watchman/docs/troubleshooting.html#recrawl
To clear this warning, run:
`watchman watch-del /home/artjom/TimeShedulerapp ; watchman watch-project /home/artjom/TimeShedulerapp`
Action graph will be rebuilt because files have been added or removed.
buck-out/gen/android/app/res#resources-symlink-tree/res/values/styles.xml:4: error: Error retrieving parent for item: No resource found that matches the given name '@style/Theme.AppCompat.DayNight.NoActionBar'.
Building: finished in 0.5 sec (100%) 25/26 jobs, 19 updated
Total time: 0.5 sec
Command failed with exit code 1.
command: [/home/artjom/Android/Sdk/build-tools/33.0.1/aapt, package, -f, -G, buck-out/gen/android/app/app#aapt_package,dex/proguard/proguard.txt, --auto-add-overlay, -S, buck-out/gen/android/app/res#resources-symlink-tree/res, --output-text-symbols, buck-out/bin/android/app/__app#aapt_package,dex_res_symbols__, -J, buck-out/bin...
<truncated>
...
stderr: buck-out/gen/android/app/res#resources-symlink-tree/res/values/styles.xml:4: error: Error retrieving parent for item: No resource found that matches the given name '@style/Theme.AppCompat.DayNight.NoActionBar'.
When running <aapt_package>.
When building rule //android/app:app#aapt_package,dex.
You're using Java 17, but Buck requires Java 11.
I tried to downgrade gradle and other modules to find a compatible solution I don't know if I need to downgrade the google-services (I don't know if i use them google-services
The compile Statement is deprecated... use compile project
compile project(path: ':linkedin-sdk', configuration: 'default')