build.gradle 8.94 KB
Newer Older
Rodrigo Nascimento's avatar
Rodrigo Nascimento committed
1
apply plugin: "com.android.application"
2
3
apply plugin: "io.fabric"
apply plugin: "com.google.firebase.firebase-perf"
4
apply plugin: 'com.bugsnag.android.gradle'
Rodrigo Nascimento's avatar
Rodrigo Nascimento committed
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

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
 *   entryFile: "index.android.js",
 *
24
25
26
 *   // https://facebook.github.io/react-native/docs/performance#enable-the-ram-format
 *   bundleCommand: "ram-bundle",
 *
Rodrigo Nascimento's avatar
Rodrigo Nascimento committed
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
 *   // 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: []
 * ]
 */

81
project.ext.react = [
82
    entryFile: "index.js",
83
84
    iconFontNames: [ 'custom.ttf' ],
    enableHermes: false,  // clean and rebuild if changing
85
86
]

Rodrigo Nascimento's avatar
Rodrigo Nascimento committed
87
apply from: "../../node_modules/react-native/react.gradle"
88
apply from: '../../node_modules/react-native-unimodules/gradle.groovy'
Rodrigo Nascimento's avatar
Rodrigo Nascimento committed
89
90
91
92
93
94
95
96
97

/**
 * 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.
 */
98
def enableSeparateBuildPerCPUArchitecture = false
Rodrigo Nascimento's avatar
Rodrigo Nascimento committed
99
100
101
102

/**
 * Run Proguard to shrink the Java bytecode in release builds.
 */
103
def enableProguardInReleaseBuilds = false
Rodrigo Nascimento's avatar
Rodrigo Nascimento committed
104

105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
/**
 * 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.
 */
def enableHermes = project.ext.react.get("enableHermes", false);

Rodrigo Nascimento's avatar
Rodrigo Nascimento committed
126
android {
Diego Mello's avatar
Diego Mello committed
127
128
    compileSdkVersion rootProject.ext.compileSdkVersion

129
    compileOptions {
Diego Mello's avatar
Diego Mello committed
130
131
132
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
Rodrigo Nascimento's avatar
Rodrigo Nascimento committed
133
134

    defaultConfig {
135
        applicationId "chat.rocket.reactnative"
Diego Mello's avatar
Diego Mello committed
136
137
        minSdkVersion rootProject.ext.minSdkVersion
        targetSdkVersion rootProject.ext.targetSdkVersion
138
        versionCode VERSIONCODE as Integer
Diego Mello's avatar
Diego Mello committed
139
        versionName "1.19.0"
Diego Mello's avatar
Diego Mello committed
140
        vectorDrawables.useSupportLibrary = true
141
        manifestPlaceholders = [BugsnagAPIKey: BugsnagAPIKey as String]
Rodrigo Nascimento's avatar
Rodrigo Nascimento committed
142
    }
Guilherme Gazzo's avatar
Guilherme Gazzo committed
143

144
145
    signingConfigs {
        release {
146
147
148
149
150
            if (project.hasProperty('KEYSTORE')) {
                storeFile file(KEYSTORE)
                storePassword KEYSTORE_PASSWORD
                keyAlias KEY_ALIAS
                keyPassword KEY_PASSWORD
151
152
153
            }
        }
    }
Rodrigo Nascimento's avatar
Rodrigo Nascimento committed
154
155
156
157
158
    splits {
        abi {
            reset()
            enable enableSeparateBuildPerCPUArchitecture
            universalApk false  // If true, also generate a universal APK
Diego Mello's avatar
Diego Mello committed
159
            include "armeabi-v7a", "x86", "arm64-v8a", "x86_64"
Rodrigo Nascimento's avatar
Rodrigo Nascimento committed
160
161
162
163
        }
    }
    buildTypes {
        release {
Guilherme Gazzo's avatar
Guilherme Gazzo committed
164
165
            minifyEnabled enableProguardInReleaseBuilds
            setProguardFiles([getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'])
166
167
            signingConfig signingConfigs.release
        }
Rodrigo Nascimento's avatar
Rodrigo Nascimento committed
168
169
170
171
172
    }
    // 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:
173
174
            // https://developer.android.com/studio/build/configure-apk-splits.html
            def versionCodes = ["armeabi-v7a": 1, "x86": 2, "arm64-v8a": 3, "x86_64": 4]
Rodrigo Nascimento's avatar
Rodrigo Nascimento committed
175
176
177
178
179
180
181
            def abi = output.getFilter(OutputFile.ABI)
            if (abi != null) {  // null for the universal-debug, universal-release variants
                output.versionCodeOverride =
                        versionCodes.get(abi) * 1048576 + defaultConfig.versionCode
            }
        }
    }
182

183
184
185
186
187
188
189
190
191
    packagingOptions {
        pickFirst '**/armeabi-v7a/libc++_shared.so'
        pickFirst '**/x86/libc++_shared.so'
        pickFirst '**/arm64-v8a/libc++_shared.so'
        pickFirst '**/x86_64/libc++_shared.so'
        pickFirst '**/x86/libjsc.so'
        pickFirst '**/armeabi-v7a/libjsc.so'
    }

192
193
194
195
196
197
198
199
200
201
202
    bundle {
        language {
            enableSplit = false
        }
        density {
            enableSplit = true
        }
        abi {
            enableSplit = true
        }
    }
Rodrigo Nascimento's avatar
Rodrigo Nascimento committed
203
204
205
}

dependencies {
206
    addUnimodulesDependencies()
207
    implementation project(':reactnativenotifications')
208
    implementation project(":reactnativekeyboardinput")
209
210
    implementation fileTree(dir: "libs", include: ["*.jar"])
    implementation "com.facebook.react:react-native:+"  // From node_modules
211
212
    implementation "com.google.firebase:firebase-messaging:18.0.0"
    implementation "com.google.firebase:firebase-core:16.0.9"
213
214
    implementation "com.google.firebase:firebase-perf:17.0.2"
    implementation('com.crashlytics.sdk.android:crashlytics:2.9.9@aar') {
215
        transitive = true
Diego Mello's avatar
Diego Mello committed
216
    }
217
218
219
220
221
222
223
224

    if (enableHermes) {
      def hermesPath = "../../node_modules/hermesvm/android/";
      debugImplementation files(hermesPath + "hermes-debug.aar")
      releaseImplementation files(hermesPath + "hermes-release.aar")
    } else {
      implementation jscFlavor
    }
Rodrigo Nascimento's avatar
Rodrigo Nascimento committed
225
226
227
228
229
230
231
232
}

// 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.compile
    into 'libs'
}
Diego Mello's avatar
Diego Mello committed
233
234

apply plugin: 'com.google.gms.google-services'
235
apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project)