|
| 1 | +def safeAppExtGet(prop, fallback) { |
| 2 | + def appProject = rootProject.allprojects.find { it.plugins.hasPlugin('com.android.application') } |
| 3 | + appProject?.ext?.has(prop) ? appProject.ext.get(prop) : fallback |
| 4 | +} |
| 5 | + |
| 6 | +def resolveReactNativeDirectory() { |
| 7 | + def reactNativeLocation = safeAppExtGet("REACT_NATIVE_NODE_MODULES_DIR", null) |
| 8 | + if (reactNativeLocation != null) { |
| 9 | + return file(reactNativeLocation) |
| 10 | + } |
| 11 | + |
| 12 | + // monorepo workaround |
| 13 | + // react-native can be hoisted or in project's own node_modules |
| 14 | + def reactNativeFromProjectNodeModules = file("${rootProject.projectDir}/../node_modules/react-native") |
| 15 | + if (reactNativeFromProjectNodeModules.exists()) { |
| 16 | + return reactNativeFromProjectNodeModules |
| 17 | + } |
| 18 | + |
| 19 | + def reactNativeFromNodeModulesWithReanimated = file("${projectDir}/../../react-native") |
| 20 | + if (reactNativeFromNodeModulesWithReanimated.exists()) { |
| 21 | + return reactNativeFromNodeModulesWithReanimated |
| 22 | + } |
| 23 | + |
| 24 | + throw new GradleException( |
| 25 | + "Unable to resolve react-native location in node_modules. You should project extension property (in `app/build.gradle`) `REACT_NATIVE_NODE_MODULES_DIR` with path to react-native." |
| 26 | + ) |
| 27 | +} |
| 28 | + |
| 29 | +def reactNativeRootDir = resolveReactNativeDirectory() |
| 30 | + |
| 31 | +def reactProperties = new Properties() |
| 32 | +file("$reactNativeRootDir/ReactAndroid/gradle.properties").withInputStream { reactProperties.load(it) } |
| 33 | + |
| 34 | +def REACT_NATIVE_VERSION = reactProperties.getProperty("VERSION_NAME") |
| 35 | +def REACT_NATIVE_MINOR_VERSION = REACT_NATIVE_VERSION.startsWith("0.0.0-") ? 1000 : REACT_NATIVE_VERSION.split("\\.")[1].toInteger() |
| 36 | + |
1 | 37 | buildscript { |
2 | | - ext.safeExtGet = {prop, fallback -> |
| 38 | + ext.safeExtGet = { prop, fallback -> |
3 | 39 | rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback |
4 | 40 | } |
| 41 | + ext.IS_ROOT = project == rootProject |
5 | 42 |
|
6 | 43 | // The Android Gradle plugin is only required when opening the android folder stand-alone. |
7 | 44 | // This avoids unnecessary downloads and potential conflicts when the library is included as a |
8 | 45 | // module dependency in an application project. |
9 | | - if (project == rootProject) { |
| 46 | + |
| 47 | + if (IS_ROOT) { |
10 | 48 | repositories { |
11 | 49 | google() |
12 | 50 | mavenCentral() |
13 | 51 | } |
14 | | - |
15 | 52 | dependencies { |
16 | | - //noinspection GradleDependency |
17 | | - classpath("com.android.tools.build:gradle:4.2.2") |
| 53 | + classpath "com.android.tools.build:gradle:7.3.1" |
18 | 54 | } |
19 | 55 | } |
20 | 56 | } |
21 | 57 |
|
22 | 58 | apply plugin: 'com.android.library' |
23 | 59 |
|
24 | 60 | android { |
25 | | - compileSdkVersion safeExtGet('compileSdkVersion', 30) |
26 | | - //noinspection GradleDependency |
27 | | - buildToolsVersion safeExtGet('buildToolsVersion', '30.0.2') |
28 | | - |
| 61 | + namespace "com.github.douglasjunior.reactNativeGetLocation" |
| 62 | + compileSdkVersion safeExtGet("compileSdkVersion", 33) |
29 | 63 | defaultConfig { |
30 | 64 | minSdkVersion safeExtGet('minSdkVersion', 21) |
31 | 65 | //noinspection OldTargetApi |
32 | | - targetSdkVersion safeExtGet('targetSdkVersion', 30) |
| 66 | + targetSdkVersion safeExtGet('targetSdkVersion', 33) |
33 | 67 | } |
34 | 68 | lintOptions { |
35 | 69 | abortOnError false |
36 | 70 | } |
37 | 71 | } |
38 | 72 |
|
39 | 73 | repositories { |
40 | | - repositories { |
41 | | - mavenCentral() |
42 | | - mavenLocal() |
| 74 | + mavenCentral() |
| 75 | + mavenLocal() |
| 76 | + if (REACT_NATIVE_MINOR_VERSION < 71) { |
43 | 77 | maven { |
44 | 78 | // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm |
45 | | - url("$rootDir/../node_modules/react-native/android") |
| 79 | + url "$reactNativeRootDir/android" |
46 | 80 | } |
47 | 81 | maven { |
48 | 82 | // Android JSC is installed from npm |
49 | | - url("$rootDir/../node_modules/jsc-android/dist") |
| 83 | + url "$reactNativeRootDir/../jsc-android/dist" |
50 | 84 | } |
51 | | - |
52 | | - google() |
53 | | - maven { url 'https://www.jitpack.io' } |
54 | 85 | } |
| 86 | + google() |
55 | 87 | } |
56 | 88 |
|
57 | 89 | dependencies { |
58 | | - //noinspection GradleDynamicVersion |
59 | | - implementation "com.facebook.react:react-native:${safeExtGet('reactnativeVersion', '+')}" |
| 90 | + if (REACT_NATIVE_MINOR_VERSION >= 71) { |
| 91 | + implementation "com.facebook.react:react-android${IS_ROOT ? ':+' : ''}" |
| 92 | + // version substituted by RNGP |
| 93 | + } else { |
| 94 | + // noinspection GradleDynamicVersion |
| 95 | + implementation "com.facebook.react:react-native:+" // From node_modules |
| 96 | + } |
60 | 97 | } |
0 commit comments