@@ -18,6 +18,9 @@ import com.android.build.OutputFile
1818 * // the entry file for bundle generation
1919 * entryFile: "index.android.js",
2020 *
21+ * // https://facebook.github.io/react-native/docs/performance#enable-the-ram-format
22+ * bundleCommand: "ram-bundle",
23+ *
2124 * // whether to bundle JS and assets in debug mode
2225 * bundleInDebug: false,
2326 *
@@ -73,7 +76,8 @@ import com.android.build.OutputFile
7376 */
7477
7578project. ext. react = [
76- entryFile : " index.js"
79+ entryFile : " index.js" ,
80+ enableHermes : false , // clean and rebuild if changing
7781]
7882
7983apply from : " ../../node_modules/react-native/react.gradle"
@@ -86,13 +90,35 @@ apply from: "../../node_modules/react-native/react.gradle"
8690 * Upload all the APKs to the Play Store and people will download
8791 * the correct one based on the CPU architecture of their device.
8892 */
89- def enableSeparateBuildPerCPUArchitecture = true
93+ def enableSeparateBuildPerCPUArchitecture = false
9094
9195/**
9296 * Run Proguard to shrink the Java bytecode in release builds.
9397 */
9498def enableProguardInReleaseBuilds = false
9599
100+ /**
101+ * The preferred build flavor of JavaScriptCore.
102+ *
103+ * For example, to use the international variant, you can use:
104+ * `def jscFlavor = 'org.webkit:android-jsc-intl:+'`
105+ *
106+ * The international variant includes ICU i18n library and necessary data
107+ * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that
108+ * give correct results when using with locales other than en-US. Note that
109+ * this variant is about 6MiB larger per architecture than default.
110+ */
111+ def jscFlavor = ' org.webkit:android-jsc:+'
112+
113+ /**
114+ * Whether to enable the Hermes VM.
115+ *
116+ * This should be set on project.ext.react and mirrored here. If it is not set
117+ * on project.ext.react, JavaScript will not be compiled to Hermes Bytecode
118+ * and the benefits of using Hermes will therefore be sharply reduced.
119+ */
120+ def enableHermes = project. ext. react. get(" enableHermes" , false );
121+
96122android {
97123 compileSdkVersion rootProject. ext. compileSdkVersion
98124
@@ -108,54 +134,63 @@ android {
108134 versionCode 1
109135 versionName " 1.0"
110136 }
111- signingConfigs {
112- release {
113- if (project. hasProperty(' MYAPP_UPLOAD_STORE_FILE' )) {
114- storeFile file(MYAPP_UPLOAD_STORE_FILE )
115- storePassword MYAPP_UPLOAD_STORE_PASSWORD
116- keyAlias MYAPP_UPLOAD_KEY_ALIAS
117- keyPassword MYAPP_UPLOAD_KEY_PASSWORD
118- }
119- }
120- }
121137 splits {
122138 abi {
123139 reset()
124140 enable enableSeparateBuildPerCPUArchitecture
125- universalApk true // If true, also generate a universal APK
141+ universalApk false // If true, also generate a universal APK
126142 include " armeabi-v7a" , " x86" , " arm64-v8a" , " x86_64"
127143 }
128144 }
145+ signingConfigs {
146+ debug {
147+ storeFile file(' debug.keystore' )
148+ storePassword ' android'
149+ keyAlias ' androiddebugkey'
150+ keyPassword ' android'
151+ }
152+ }
129153 buildTypes {
154+ debug {
155+ signingConfig signingConfigs. debug
156+ }
130157 release {
158+ // Caution! In production, you need to generate your own keystore file.
159+ // see https://facebook.github.io/react-native/docs/signed-apk-android.
160+ signingConfig signingConfigs. debug
131161 minifyEnabled enableProguardInReleaseBuilds
132162 proguardFiles getDefaultProguardFile(" proguard-android.txt" ), " proguard-rules.pro"
133- signingConfig signingConfigs. release
134163 }
135164 }
136165 // applicationVariants are e.g. debug, release
137166 applicationVariants. all { variant ->
138167 variant. outputs. each { output ->
139168 // For each separate APK per architecture, set a unique version code as described here:
140- // http ://tools .android.com/tech-docs/new- build-system/user-guide/ apk-splits
141- def versionCodes = [" armeabi-v7a" :1 , " x86" :2 , " arm64-v8a" : 3 , " x86_64" : 4 ]
169+ // https ://developer .android.com/studio/ build/configure- apk-splits.html
170+ def versionCodes = [" armeabi-v7a" : 1 , " x86" : 2 , " arm64-v8a" : 3 , " x86_64" : 4 ]
142171 def abi = output. getFilter(OutputFile . ABI )
143172 if (abi != null ) { // null for the universal-debug, universal-release variants
144173 output. versionCodeOverride =
145174 versionCodes. get(abi) * 1048576 + defaultConfig. versionCode
146175 }
176+
147177 }
148178 }
149179}
150180
151181dependencies {
152- implementation project(' :react-native-svg' )
153- implementation project(' :react-native-i18n' )
154- implementation project(' :react-native-vector-icons' )
155- implementation project(' :react-native-gesture-handler' )
156182 implementation fileTree(dir : " libs" , include : [" *.jar" ])
157- implementation " com.android.support:appcompat-v7:${ rootProject.ext.supportLibVersion} "
158183 implementation " com.facebook.react:react-native:+" // From node_modules
184+ implementation ' androidx.appcompat:appcompat:1.1.0-rc01'
185+ implementation ' androidx.swiperefreshlayout:swiperefreshlayout:1.1.0-alpha02'
186+
187+ if (enableHermes) {
188+ def hermesPath = " ../../node_modules/hermes-engine/android/" ;
189+ debugImplementation files(hermesPath + " hermes-debug.aar" )
190+ releaseImplementation files(hermesPath + " hermes-release.aar" )
191+ } else {
192+ implementation jscFlavor
193+ }
159194}
160195
161196// Run this once to be able to run the application with BUCK
@@ -164,3 +199,5 @@ task copyDownloadableDepsToLibs(type: Copy) {
164199 from configurations. compile
165200 into ' libs'
166201}
202+
203+ apply from : file(" ../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle" ); applyNativeModulesAppBuildGradle(project)
0 commit comments