@@ -49,14 +49,6 @@ def reactProperties = new Properties()
4949file(" $nodeModules /react-native/ReactAndroid/gradle.properties" ). withInputStream { reactProperties. load(it) }
5050def REACT_NATIVE_VERSION = reactProperties. getProperty(" VERSION_NAME" ). split(" \\ ." )[1 ]. toInteger()
5151
52- def FOR_HERMES = System . getenv(" FOR_HERMES" ) == " True"
53- rootProject. getSubprojects(). forEach({ project ->
54- if (project. plugins. hasPlugin(" com.android.application" )) {
55- FOR_HERMES = project. ext. react. enableHermes
56- }
57- })
58- logger. warn(" JSI-WS: Building with ${ FOR_HERMES ? "Hermes" : "JSC"} ..." )
59-
6052android {
6153
6254 compileSdkVersion getExtOrIntegerDefault(' compileSdkVersion' )
@@ -74,8 +66,7 @@ android {
7466 abiFilters ' x86' , ' x86_64' , ' armeabi-v7a' , ' arm64-v8a'
7567 arguments ' -DANDROID_STL=c++_shared' ,
7668 " -DREACT_NATIVE_VERSION=${ REACT_NATIVE_VERSION} " ,
77- " -DNODE_MODULES_DIR=${ nodeModules} " ,
78- " -DFOR_HERMES=${ FOR_HERMES} "
69+ " -DNODE_MODULES_DIR=${ nodeModules} "
7970 }
8071 }
8172
@@ -196,197 +187,14 @@ dependencies {
196187 extractJNI(files(rnAAR, jscAAR))
197188}
198189
199-
200- // third-party-ndk deps headers
201- // mostly a copy of https://github.com/software-mansion/react-native-reanimated/blob/master/android/build.gradle#L115
202-
203190def downloadsDir = new File (" $buildDir /downloads" )
204- def thirdPartyNdkDir = new File (" $buildDir /third-party-ndk" )
205- def thirdPartyVersionsFile = new File (" ${ nodeModules} /react-native/ReactAndroid/gradle.properties" )
206- def thirdPartyVersions = new Properties ()
207- thirdPartyVersions. load(new FileInputStream (thirdPartyVersionsFile))
208-
209- def BOOST_VERSION = thirdPartyVersions[" BOOST_VERSION" ]
210- def boost_file = new File (downloadsDir, " boost_${ BOOST_VERSION} .tar.gz" )
211- def DOUBLE_CONVERSION_VERSION = thirdPartyVersions[" DOUBLE_CONVERSION_VERSION" ]
212- def double_conversion_file = new File (downloadsDir, " double-conversion-${ DOUBLE_CONVERSION_VERSION} .tar.gz" )
213- def FOLLY_VERSION = thirdPartyVersions[" FOLLY_VERSION" ]
214- def folly_file = new File (downloadsDir, " folly-${ FOLLY_VERSION} .tar.gz" )
215- def GLOG_VERSION = thirdPartyVersions[" GLOG_VERSION" ]
216- def glog_file = new File (downloadsDir, " glog-${ GLOG_VERSION} .tar.gz" )
217191
218192task createNativeDepsDirectories {
219193 doLast {
220194 downloadsDir. mkdirs()
221- thirdPartyNdkDir. mkdirs()
222- }
223- }
224-
225- task downloadBoost (dependsOn : createNativeDepsDirectories, type : Download ) {
226- src(" https://github.com/react-native-community/boost-for-react-native/releases/download/v${ BOOST_VERSION.replace("_", ".")} -0/boost_${ BOOST_VERSION} .tar.gz" )
227- onlyIfNewer(true )
228- overwrite(false )
229- dest(boost_file)
230- }
231-
232- task prepareBoost (dependsOn : downloadBoost, type : Copy ) {
233- from(tarTree(resources. gzip(downloadBoost. dest)))
234- from(" src/main/jni/third-party/boost/Android.mk" )
235- include(" Android.mk" , " boost_${ BOOST_VERSION} /boost/**/*.hpp" , " boost/boost/**/*.hpp" )
236- includeEmptyDirs = false
237- into(" $thirdPartyNdkDir " ) // /boost_X_XX_X
238- doLast {
239- file(" $thirdPartyNdkDir /boost_${ BOOST_VERSION} " ). renameTo(" $thirdPartyNdkDir /boost" )
240- }
241- }
242-
243- task downloadDoubleConversion (dependsOn : createNativeDepsDirectories, type : Download ) {
244- src(" https://github.com/google/double-conversion/archive/v${ DOUBLE_CONVERSION_VERSION} .tar.gz" )
245- onlyIfNewer(true )
246- overwrite(false )
247- dest(double_conversion_file)
248- }
249-
250- task prepareDoubleConversion (dependsOn : downloadDoubleConversion, type : Copy ) {
251- from(tarTree(downloadDoubleConversion. dest))
252- from(" src/main/jni/third-party/double-conversion/Android.mk" )
253- include(" double-conversion-${ DOUBLE_CONVERSION_VERSION} /src/**/*" , " Android.mk" )
254- filesMatching(" */src/**/*" , { fname -> fname. path = " double-conversion/${ fname.name} " })
255- includeEmptyDirs = false
256- into(" $thirdPartyNdkDir /double-conversion" )
257- }
258-
259- task downloadFolly (dependsOn : createNativeDepsDirectories, type : Download ) {
260- src(" https://github.com/facebook/folly/archive/v${ FOLLY_VERSION} .tar.gz" )
261- onlyIfNewer(true )
262- overwrite(false )
263- dest(folly_file)
264- }
265-
266- task prepareFolly (dependsOn : downloadFolly, type : Copy ) {
267- from(tarTree(downloadFolly. dest))
268- from(" src/main/jni/third-party/folly/Android.mk" )
269- include(" folly-${ FOLLY_VERSION} /folly/**/*" , " Android.mk" )
270- eachFile { fname -> fname. path = (fname. path - " folly-${ FOLLY_VERSION} /" ) }
271- includeEmptyDirs = false
272- into(" $thirdPartyNdkDir /folly" )
273- }
274-
275- task downloadGlog (dependsOn : createNativeDepsDirectories, type : Download ) {
276- src(" https://github.com/google/glog/archive/v${ GLOG_VERSION} .tar.gz" )
277- onlyIfNewer(true )
278- overwrite(false )
279- dest(glog_file)
280- }
281-
282- task prepareGlog (dependsOn : downloadGlog, type : Copy ) {
283- from(tarTree(downloadGlog. dest))
284- from(" src/main/jni/third-party/glog/" )
285- include(" glog-${ GLOG_VERSION} /src/**/*" , " Android.mk" , " config.h" )
286- includeEmptyDirs = false
287- filesMatching(" **/*.h.in" ) {
288- filter(ReplaceTokens , tokens : [
289- ac_cv_have_unistd_h : " 1" ,
290- ac_cv_have_stdint_h : " 1" ,
291- ac_cv_have_systypes_h : " 1" ,
292- ac_cv_have_inttypes_h : " 1" ,
293- ac_cv_have_libgflags : " 0" ,
294- ac_google_start_namespace : " namespace google {" ,
295- ac_cv_have_uint16_t : " 1" ,
296- ac_cv_have_u_int16_t : " 1" ,
297- ac_cv_have___uint16 : " 0" ,
298- ac_google_end_namespace : " }" ,
299- ac_cv_have___builtin_expect : " 1" ,
300- ac_google_namespace : " google" ,
301- ac_cv___attribute___noinline : " __attribute__ ((noinline))" ,
302- ac_cv___attribute___noreturn : " __attribute__ ((noreturn))" ,
303- ac_cv___attribute___printf_4_5 : " __attribute__((__format__ (__printf__, 4, 5)))"
304- ])
305- it. path = (it. name - " .in" )
306- }
307- into(" $thirdPartyNdkDir /glog" )
308-
309- doLast {
310- copy {
311- from(fileTree(dir : " $thirdPartyNdkDir /glog" , includes : [" stl_logging.h" , " logging.h" , " raw_logging.h" , " vlog_is_on.h" , " **/src/glog/log_severity.h" ]). files)
312- includeEmptyDirs = false
313- into(" $thirdPartyNdkDir /glog/exported/glog" )
314- }
315- }
316- }
317-
318- task prepareThirdPartyNdkHeaders {
319- if (! boost_file. exists()) {
320- dependsOn(prepareBoost)
321- }
322- if (! double_conversion_file. exists()) {
323- dependsOn(prepareDoubleConversion)
324- }
325- if (! folly_file. exists()) {
326- dependsOn(prepareFolly)
327- }
328- if (! glog_file. exists()) {
329- dependsOn(prepareGlog)
330- }
331- }
332-
333- prepareThirdPartyNdkHeaders. mustRunAfter createNativeDepsDirectories
334-
335- task prepareHermes () {
336- doLast {
337- def hermesPackagePath = file(" ${ nodeModules} /hermes-engine" )
338- if (! hermesPackagePath. exists()) {
339- throw new GradleScriptException (" Could not find the hermes-engine npm package" , null )
340- }
341-
342- def hermesAAR = file(" $hermesPackagePath /android/hermes-debug.aar" )
343- if (! hermesAAR. exists()) {
344- throw new GradleScriptException (" The hermes-engine npm package is missing \" android/hermes-debug.aar\" " , null )
345- }
346-
347- def soFiles = zipTree(hermesAAR). matching({ it. include " **/*.so" })
348-
349- copy {
350- from soFiles
351- from " $reactNative /ReactAndroid/src/main/jni/first-party/hermes/Android.mk"
352- into " $thirdPartyNdkDir /hermes"
353- }
354- }
355- }
356-
357- prepareHermes. mustRunAfter prepareThirdPartyNdkHeaders
358-
359- task prepareJSC {
360- doLast {
361- def jscPackagePath = file(" ${ nodeModules} /jsc-android" )
362- if (! jscPackagePath. exists()) {
363- throw new GradleScriptException (" Could not find the jsc-android npm package" , null )
364- }
365-
366- def jscDist = file(" $jscPackagePath /dist" )
367- if (! jscDist. exists()) {
368- throw new GradleScriptException (" The jsc-android npm package is missing its \" dist\" directory" , null )
369- }
370-
371- def jscAAR = fileTree(jscDist). matching({ it. include " **/android-jsc/**/*.aar" }). singleFile
372- def soFiles = zipTree(jscAAR). matching({ it. include " **/*.so" })
373-
374- def headerFiles = fileTree(jscDist). matching({ it. include " **/include/*.h" })
375-
376- copy {
377- from(soFiles)
378- from(headerFiles)
379- from(" $reactNative /ReactAndroid/src/main/jni/third-party/jsc/Android.mk" )
380-
381- filesMatching(" **/*.h" , { it. path = " JavaScriptCore/${ it.name} " })
382-
383- includeEmptyDirs(false )
384- into(" $thirdPartyNdkDir /jsc" )
385- }
386195 }
387196}
388197
389- prepareJSC. mustRunAfter prepareHermes
390198
391199task extractAARHeaders {
392200 doLast {
@@ -401,7 +209,7 @@ task extractAARHeaders {
401209 }
402210}
403211
404- extractAARHeaders. mustRunAfter prepareJSC
212+ extractAARHeaders. mustRunAfter createNativeDepsDirectories
405213
406214task extractJNIFiles {
407215 doLast {
@@ -425,8 +233,5 @@ tasks.whenTaskAdded { task ->
425233 if (! task. name. contains(' Clean' ) && (task. name. contains(' externalNative' ) || task. name. contains(' CMake' ))) {
426234 task. dependsOn(extractAARHeaders)
427235 task. dependsOn(extractJNIFiles)
428- task. dependsOn(prepareJSC)
429- task. dependsOn(prepareHermes)
430- task. dependsOn(prepareThirdPartyNdkHeaders)
431236 }
432237}
0 commit comments