> echo Attempting build for km-saifullah-roll-the-dice with Node 18 and jdk 17 Attempting build for km-saifullah-roll-the-dice with Node 18 and jdk 17 > docker run --rm -v /home/ubuntu/storage/extracted/km-saifullah-roll-the-dice/roll-the-dice-f0f06966b3d9d4695e518e9e34812cc41481e5a7:/source:ro -v /home/ubuntu/BachelorsThesis/scripts/RN/output/km-saifullah-roll-the-dice:/output -v /home/ubuntu/.npm:/root/.npm react-android:18-jdk17 bash -c set -e cp -r /source/. /app && cd /app && # ---- install deps (yarn or npm) ---- if [ -f yarn.lock ]; then yarn install; else npm install --ignore-scripts; fi && # ---- stub missing google-services.json (Firebase/Expo prebuild) ---- if [ ! -f google-services.json ]; then python3 -c "import json; open('google-services.json','w').write(json.dumps({'project_info':{'project_number':'000000000000','project_id':'stub','storage_bucket':'stub.appspot.com'},'client':[{'client_info':{'mobilesdk_app_id':'1:000000000000:android:0000000000000000','android_client_info':{'package_name':'com.stub'}},'oauth_client':[],'api_key':[{'current_key':'stub'}],'services':{'appinvite_service':{'other_platform_oauth_client':[]}}}],'configuration_version':'1'}))" 2>/dev/null || true; fi && # ---- detect expo ---- if grep -q '"expo"' package.json && [ ! -d android ]; then echo "Expo project detected"; CI=1 npx --yes expo prebuild --platform android fi && export PATH="/app/node_modules/.bin:$PATH" && cd android && chmod +x gradlew && # ---- inject fallback repositories via Gradle init script ---- mkdir -p $GRADLE_USER_HOME/init.d && echo 'gradle.beforeProject {project ->' > $GRADLE_USER_HOME/init.d/repos.gradle && echo ' project.buildscript.repositories {' >> $GRADLE_USER_HOME/init.d/repos.gradle && echo ' maven {url "https://maven.google.com"}' >> $GRADLE_USER_HOME/init.d/repos.gradle && echo ' maven {url "https://repo1.maven.org/maven2"}' >> $GRADLE_USER_HOME/init.d/repos.gradle && echo ' maven {url "https://plugins.gradle.org/m2/"}' >> $GRADLE_USER_HOME/init.d/repos.gradle && echo ' maven {url "https://jitpack.io"}' >> $GRADLE_USER_HOME/init.d/repos.gradle && echo ' }' >> $GRADLE_USER_HOME/init.d/repos.gradle && echo ' project.repositories {' >> $GRADLE_USER_HOME/init.d/repos.gradle && echo ' maven {url "https://maven.google.com"}' >> $GRADLE_USER_HOME/init.d/repos.gradle && echo ' maven {url "https://repo1.maven.org/maven2"}' >> $GRADLE_USER_HOME/init.d/repos.gradle && echo ' maven {url "https://plugins.gradle.org/m2/"}' >> $GRADLE_USER_HOME/init.d/repos.gradle && echo ' maven {url "https://jitpack.io"}' >> $GRADLE_USER_HOME/init.d/repos.gradle && echo ' }' >> $GRADLE_USER_HOME/init.d/repos.gradle && echo '}' >> $GRADLE_USER_HOME/init.d/repos.gradle && # ---- patch settings.gradle to use local react-native CLI (avoids npx failures) ---- sed -i 's/autolinkLibrariesWithCommand()/autolinkLibrariesWithCommand("node node_modules\/.bin\/react-native config")/' settings.gradle 2>/dev/null || true && # ---- clean gradle ---- (./gradlew clean || true) && # ---- pre-resolve AAR transforms so CMake finds prefab paths ---- ./gradlew :app:dependencies --configuration debugCompileClasspath --no-daemon > /dev/null 2>&1 || true && # ---- enable ABI splits ---- if grep -q 'splits' app/build.gradle 2>/dev/null; then sed -i 's/enable false/enable true/' app/build.gradle || true; else sed -i '/^android[[:space:]]*{/a\ splits {\n abi {\n reset()\n enable true\n universalApk false\n include "armeabi-v7a", "arm64-v8a", "x86", "x86_64"\n }\n }' app/build.gradle || true; fi && # ---- build debug apk ---- ./gradlew assembleDebug --no-daemon || exit 1 && APK_PATH="app/build/outputs/apk/debug" if ! ls $APK_PATH/*.apk 1> /dev/null 2>&1; then echo "ERROR: APK not generated" exit 1 fi # ---- copy output ---- cp app/build/outputs/apk/debug/*.apk /output/ # ---- copy TPL metadata ---- [ -f ../package.json ] && cp ../package.json /output/ || true [ -f ../package-lock.json ] && cp ../package-lock.json /output/ || true [ -f ../yarn.lock ] && cp ../yarn.lock /output/ || true [ -f ../pnpm-lock.yaml ] && cp ../pnpm-lock.yaml /output/ || true [ -f app/build.gradle ] && cp app/build.gradle /output/android-build.gradle || true [ -f build.gradle ] && cp build.gradle /output/root-build.gradle || true [ -f build.gradle.kts ] && cp build.gradle.kts /output/root-build.gradle.kts || true [ -f settings.gradle ] && cp settings.gradle /output/ || true [ -f settings.gradle.kts ] && cp settings.gradle.kts /output/ || true [ -f gradle/libs.versions.toml ] && cp gradle/libs.versions.toml /output/ || true find . -name "*.gradle" 2>/dev/null | grep -v "/build/" | grep -v "/.gradle/" | grep -v "/node_modules/" | while read f; do cp "$f" /output/ 2>/dev/null; done || true find . -name "*.gradle.kts" 2>/dev/null | grep -v "/build/" | grep -v "/.gradle/" | grep -v "/node_modules/" | while read f; do cp "$f" /output/ 2>/dev/null; done || true mkdir -p /output/libs find . -name "*.jar" -not -name "gradle-wrapper.jar" 2>/dev/null | grep -v "/build/" | grep -v "/.gradle/" | grep -v "/node_modules/" | while read f; do cp "$f" /output/libs/ 2>/dev/null; done || true find . -name "*.aar" 2>/dev/null | grep -v "/build/" | grep -v "/.gradle/" | grep -v "/node_modules/" | while read f; do cp "$f" /output/libs/ 2>/dev/null; done || true find . -name "*.so" 2>/dev/null | grep -v "/build/" | grep -v "/.gradle/" | grep -v "/node_modules/" | while read f; do cp "$f" /output/libs/ 2>/dev/null; done || true npm warn ERESOLVE overriding peer dependency npm warn While resolving: eslint-plugin-jest@26.9.0 npm warn Found: @typescript-eslint/eslint-plugin@6.21.0 npm warn node_modules/@typescript-eslint/eslint-plugin npm warn @typescript-eslint/eslint-plugin@"^6.7.4" from @react-native/eslint-config@0.74.83 npm warn node_modules/@react-native/eslint-config npm warn dev @react-native/eslint-config@"0.74.83" from the root project npm warn npm warn Could not resolve dependency: npm warn peerOptional @typescript-eslint/eslint-plugin@"^5.0.0" from eslint-plugin-jest@26.9.0 npm warn node_modules/eslint-plugin-jest npm warn eslint-plugin-jest@"^26.5.3" from @react-native/eslint-config@0.74.83 npm warn node_modules/@react-native/eslint-config npm warn npm warn Conflicting peer dependency: @typescript-eslint/eslint-plugin@5.62.0 npm warn node_modules/@typescript-eslint/eslint-plugin npm warn peerOptional @typescript-eslint/eslint-plugin@"^5.0.0" from eslint-plugin-jest@26.9.0 npm warn node_modules/eslint-plugin-jest npm warn eslint-plugin-jest@"^26.5.3" from @react-native/eslint-config@0.74.83 npm warn node_modules/@react-native/eslint-config npm warn deprecated @babel/plugin-proposal-optional-catch-binding@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-catch-binding instead. npm warn deprecated @babel/plugin-proposal-nullish-coalescing-operator@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead. npm warn deprecated @babel/plugin-proposal-numeric-separator@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead. npm warn deprecated @babel/plugin-proposal-class-properties@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead. npm warn deprecated @babel/plugin-proposal-logical-assignment-operators@7.20.7: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-logical-assignment-operators instead. npm warn deprecated @babel/plugin-proposal-optional-chaining@7.21.0: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead. npm warn deprecated @babel/plugin-proposal-async-generator-functions@7.20.7: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-async-generator-functions instead. npm warn deprecated querystring@0.2.1: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. npm warn deprecated @babel/plugin-proposal-object-rest-spread@7.20.7: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead. added 1144 packages, and audited 1145 packages in 2m 152 packages are looking for funding run `npm fund` for details 38 vulnerabilities (5 low, 13 moderate, 18 high, 2 critical) To address issues that do not require attention, run: npm audit fix To address all issues (including breaking changes), run: npm audit fix --force Run `npm audit` for details. Downloading https://services.gradle.org/distributions/gradle-8.6-all.zip ....................10%.....................20%.....................30%.....................40%.....................50%.....................60%.....................70%.....................80%.....................90%.....................100% Welcome to Gradle 8.6! Here are the highlights of this release: - Configurable encryption key for configuration cache - Build init improvements - Build authoring improvements For more details see https://docs.gradle.org/8.6/release-notes.html To honour the JVM settings for this build a single-use Daemon process will be forked. For more on this, please refer to https://docs.gradle.org/8.6/userguide/gradle_daemon.html#sec:disabling_the_daemon in the Gradle documentation. Daemon will be stopped at the end of the build Path for java installation '/usr/lib/jvm/openjdk-17' (Common Linux Locations) does not contain a java executable > Task :gradle-plugin:checkKotlinGradlePluginConfigurationErrors > Task :gradle-plugin:pluginDescriptors > Task :gradle-plugin:processResources > Task :gradle-plugin:compileKotlin > Task :gradle-plugin:compileJava NO-SOURCE > Task :gradle-plugin:classes > Task :gradle-plugin:jar > Task :app:clean UP-TO-DATE > Task :react-native-haptic-feedback:clean BUILD SUCCESSFUL in 3m 20s 7 actionable tasks: 6 executed, 1 up-to-date To honour the JVM settings for this build a single-use Daemon process will be forked. For more on this, please refer to https://docs.gradle.org/8.6/userguide/gradle_daemon.html#sec:disabling_the_daemon in the Gradle documentation. Daemon will be stopped at the end of the build Path for java installation '/usr/lib/jvm/openjdk-17' (Common Linux Locations) does not contain a java executable > Task :gradle-plugin:checkKotlinGradlePluginConfigurationErrors > Task :gradle-plugin:compileKotlin UP-TO-DATE > Task :gradle-plugin:compileJava NO-SOURCE > Task :gradle-plugin:pluginDescriptors UP-TO-DATE > Task :gradle-plugin:processResources UP-TO-DATE > Task :gradle-plugin:classes UP-TO-DATE > Task :gradle-plugin:jar UP-TO-DATE Path for java installation '/usr/lib/jvm/openjdk-17' (Common Linux Locations) does not contain a java executable > Task :app:generateCodegenSchemaFromJavaScript SKIPPED > Task :app:generateCodegenArtifactsFromSchema SKIPPED > Task :app:generatePackageList > Task :app:preBuild > Task :app:preDebugBuild > Task :app:mergeDebugNativeDebugMetadata NO-SOURCE > Task :app:checkKotlinGradlePluginConfigurationErrors > Task :app:generateDebugBuildConfig > Task :react-native-haptic-feedback:preBuild UP-TO-DATE > Task :react-native-haptic-feedback:preDebugBuild UP-TO-DATE > Task :react-native-haptic-feedback:writeDebugAarMetadata > Task :app:generateDebugResValues > Task :app:checkDebugAarMetadata > Task :react-native-haptic-feedback:generateDebugResValues > Task :react-native-haptic-feedback:generateDebugResources > Task :react-native-haptic-feedback:packageDebugResources > Task :app:mapDebugSourceSetPaths > Task :app:generateDebugResources > Task :app:packageDebugResources > Task :app:mergeDebugResources > Task :app:createDebugCompatibleScreenManifests > Task :app:extractDeepLinksDebug > Task :react-native-haptic-feedback:extractDeepLinksDebug > Task :app:parseDebugLocalResources > Task :react-native-haptic-feedback:processDebugManifest package="com.mkuczera" found in source AndroidManifest.xml: /app/node_modules/react-native-haptic-feedback/android/src/main/AndroidManifest.xml. Setting the namespace via the package attribute in the source AndroidManifest.xml is no longer supported, and the value is ignored. Recommendation: remove package="com.mkuczera" from the source AndroidManifest.xml: /app/node_modules/react-native-haptic-feedback/android/src/main/AndroidManifest.xml. > Task :react-native-haptic-feedback:compileDebugLibraryResources > Task :app:processDebugMainManifest > Task :app:processDebugManifest > Task :react-native-haptic-feedback:generateDebugBuildConfig > Task :react-native-haptic-feedback:parseDebugLocalResources > Task :react-native-haptic-feedback:javaPreCompileDebug > Task :app:processDebugManifestForPackage > Task :app:javaPreCompileDebug > Task :app:mergeDebugShaders > Task :app:compileDebugShaders NO-SOURCE > Task :app:generateDebugAssets UP-TO-DATE > Task :react-native-haptic-feedback:mergeDebugShaders > Task :react-native-haptic-feedback:compileDebugShaders NO-SOURCE > Task :react-native-haptic-feedback:generateDebugAssets UP-TO-DATE > Task :react-native-haptic-feedback:packageDebugAssets > Task :react-native-haptic-feedback:generateDebugRFile > Task :app:mergeDebugAssets > Task :app:processDebugResources > Task :react-native-haptic-feedback:compileDebugJavaWithJavac Note: Some input files use or override a deprecated API. Note: Recompile with -Xlint:deprecation for details. > Task :app:compressDebugAssets > Task :react-native-haptic-feedback:bundleLibRuntimeToJarDebug > Task :react-native-haptic-feedback:bundleLibCompileToJarDebug > Task :app:desugarDebugFileDependencies > Task :react-native-haptic-feedback:processDebugJavaRes NO-SOURCE > Task :app:mergeDebugJniLibFolders > Task :react-native-haptic-feedback:mergeDebugJniLibFolders > Task :react-native-haptic-feedback:mergeDebugNativeLibs NO-SOURCE > Task :app:checkDebugDuplicateClasses > Task :react-native-haptic-feedback:copyDebugJniLibsProjectOnly > Task :app:compileDebugKotlin > Task :app:mergeExtDexDebug > Task :app:compileDebugJavaWithJavac > Task :app:dexBuilderDebug > Task :app:mergeDebugGlobalSynthetics > Task :app:processDebugJavaRes > Task :app:mergeLibDexDebug > Task :app:mergeProjectDexDebug > Task :app:validateSigningDebug > Task :app:writeDebugAppMetadata > Task :app:writeDebugSigningConfigVersions > Task :react-native-haptic-feedback:stripDebugDebugSymbols NO-SOURCE > Task :react-native-haptic-feedback:copyDebugJniLibsProjectAndLocalJars > Task :app:mergeDebugJavaResource > Task :app:mergeDebugNativeLibs > Task :react-native-haptic-feedback:extractDebugAnnotations > Task :react-native-haptic-feedback:extractDeepLinksForAarDebug > Task :react-native-haptic-feedback:mergeDebugGeneratedProguardFiles > Task :react-native-haptic-feedback:mergeDebugConsumerProguardFiles > Task :react-native-haptic-feedback:prepareDebugArtProfile > Task :react-native-haptic-feedback:prepareLintJarForPublish > Task :react-native-haptic-feedback:mergeDebugJavaResource > Task :react-native-haptic-feedback:syncDebugLibJars > Task :react-native-haptic-feedback:bundleDebugAar > Task :react-native-haptic-feedback:assembleDebug > Task :app:stripDebugDebugSymbols Unable to strip the following libraries, packaging them as they are: libc++_shared.so, libfabricjni.so, libfbjni.so, libfolly_runtime.so, libglog.so, libhermes.so, libhermes_executor.so, libhermesinstancejni.so, libimagepipeline.so, libjscinstance.so, libjsi.so, libjsijniprofiler.so, libjsinspector.so, libmapbufferjni.so, libnative-filters.so, libnative-imagetranscoder.so, libreact_codegen_rncore.so, libreact_cxxreactpackage.so, libreact_debug.so, libreact_devsupportjni.so, libreact_featureflags.so, libreact_featureflagsjni.so, libreact_nativemodule_core.so, libreact_newarchdefaults.so, libreact_render_componentregistry.so, libreact_render_core.so, libreact_render_debug.so, libreact_render_element.so, libreact_render_graphics.so, libreact_render_imagemanager.so, libreact_render_mapbuffer.so, libreact_utils.so, libreactnativeblob.so, libreactnativejni.so, libreactperfloggerjni.so, librninstance.so, librrc_image.so, librrc_legacyviewmanagerinterop.so, librrc_view.so, libruntimeexecutor.so, libturbomodulejsijni.so, libuimanagerjni.so, libyoga.so. > Task :app:packageDebug > Task :app:createDebugApkListingFileRedirect > Task :app:assembleDebug BUILD SUCCESSFUL in 3m 21s 70 actionable tasks: 66 executed, 4 up-to-date > docker run --rm -v /home/ubuntu/storage/extracted/km-saifullah-roll-the-dice/roll-the-dice-f0f06966b3d9d4695e518e9e34812cc41481e5a7:/source:ro -v /home/ubuntu/BachelorsThesis/scripts/RN/output/km-saifullah-roll-the-dice:/output -v /home/ubuntu/.npm:/root/.npm react-android:18-jdk17 bash -c set -e cp -r /source/. /app && cd /app && # ---- install deps (yarn or npm) ---- if [ -f yarn.lock ]; then yarn install; else npm install --ignore-scripts; fi && # ---- stub missing parent package.json (monorepo metro configs) ---- [ ! -f ../package.json ] && cp package.json ../package.json 2>/dev/null || true && # ---- patch toReversed (Node <20 compat) ---- find node_modules -name "loadConfig.js" -path "*/metro-config/*" -exec sed -i 's/\.toReversed()/.slice().reverse()/g' {} \; 2>/dev/null || true && # ---- patch missing expo/AppEntry ---- if grep -q '"main".*expo/AppEntry' package.json 2>/dev/null && [ ! -f node_modules/expo/AppEntry.js ] && [ ! -f node_modules/expo/AppEntry.ts ]; then node -e "const fs=require('fs'); const p=JSON.parse(fs.readFileSync('package.json','utf8')); if(fs.existsSync('index.js')){p.main='index.js'; fs.writeFileSync('package.json',JSON.stringify(p,null,2));}" 2>/dev/null || true; fi && # ---- patch broken metro config (ESM-only, null-returning, or monorepo-only) ---- # NOTE: do NOT replace configs that merely use expo/metro-config — those carry # Expo-specific resolver paths (watchFolders, extraNodeModules) needed for # packages like @react-native-masked-view/masked-view to resolve. if grep -q 'react-native-monorepo-config' metro.config.js 2>/dev/null || ! node -e "const c=require('./metro.config.js'); if(!c||typeof c!=='object') process.exit(1);" 2>/dev/null; then if [ -d node_modules/@react-native/metro-config ]; then printf 'const {getDefaultConfig, mergeConfig} = require("@react-native/metro-config"); module.exports = mergeConfig(getDefaultConfig(__dirname), {}); ' > metro.config.js; else printf 'const {getDefaultConfig} = require("metro-config"); module.exports = getDefaultConfig(__dirname); ' > metro.config.js; fi; fi && # ---- stub missing google-services.json (Firebase/Expo prebuild) ---- if [ ! -f google-services.json ]; then python3 -c "import json; open('google-services.json','w').write(json.dumps({'project_info':{'project_number':'000000000000','project_id':'stub','storage_bucket':'stub.appspot.com'},'client':[{'client_info':{'mobilesdk_app_id':'1:000000000000:android:0000000000000000','android_client_info':{'package_name':'com.stub'}},'oauth_client':[],'api_key':[{'current_key':'stub'}],'services':{'appinvite_service':{'other_platform_oauth_client':[]}}}],'configuration_version':'1'}))" 2>/dev/null || true; fi && # ---- detect expo ---- if grep -q '"expo"' package.json && [ ! -d android ]; then echo "Expo project detected"; CI=1 npx --yes expo prebuild --platform android fi && # ---- fix expo/metro-config: serializer + Flow transformIgnorePatterns ---- # Runs AFTER prebuild because prebuild generates metro.config.js for managed-workflow # projects — patching before prebuild would be overwritten by the generated file. # Fix 1: remove customSerializer that returns JS string instead of JSON # ("var __BUND..." → "Serializer did not return expected format"). # Fix 2: add transformIgnorePatterns so expo/src/Expo.ts goes through Babel # (default pattern excludes all node_modules → raw Flow types → SyntaxError). if [ -f metro.config.js ] && [ -d node_modules/expo ] && ( grep -q 'expo/metro-config\|@expo/metro-config' metro.config.js 2>/dev/null || ! grep -q 'transformIgnorePatterns' metro.config.js 2>/dev/null ); then cp metro.config.js metro.config.orig.js && printf 'const c=require("./metro.config.orig.js");const r=Object.assign({},c);if(r.serializer){r.serializer=Object.assign({},r.serializer);delete r.serializer.customSerializer;}r.transformer=Object.assign({},r.transformer||{});if(!r.transformer.transformIgnorePatterns){r.transformer.transformIgnorePatterns=["node_modules/(?!(react-native|@react-native|expo|@expo|@unimodules|react-clone-referenced-element|@react-navigation|native-base)/)"];}module.exports=r;\n' > metro.config.js; fi && # ---- stub missing metro watchFolders paths ---- mkdir -p /src 2>/dev/null || true && # ---- fix babel configs that use react-native-builder-bob ---- # builder-bob is a library-dev tool; its getConfig() throws "Couldn't determine the source # directory" when built outside the library's own workspace. Replace with a standard preset. if grep -ql 'react-native-builder-bob' babel.config.js babel.config.json .babelrc .babelrc.js 2>/dev/null; then if [ -d node_modules/babel-preset-expo ]; then printf 'module.exports=function(api){api.cache(true);return{presets:["babel-preset-expo"]};}; ' > babel.config.js; elif [ -d node_modules/@react-native/babel-preset ]; then printf 'module.exports={presets:["module:@react-native/babel-preset"]};' > babel.config.js; else printf 'module.exports={presets:["module:metro-react-native-babel-preset"]};' > babel.config.js; fi; fi && # ---- ensure TypeScript babel support (fixes 'interface' SyntaxError in metro bundling) ---- if [ -d node_modules/babel-preset-expo ]; then grep -ql "expo\|typescript" babel.config.js .babelrc .babelrc.js babel.config.json 2>/dev/null || printf 'module.exports=function(api){api.cache(true);return{presets:["babel-preset-expo"]};}; ' > babel.config.js; fi && # ---- stub missing-asset-registry-path (Metro virtual module not resolved in release) ---- # Metro normally aliases this to @react-native/assets-registry/registry at bundle time. # When that alias is missing, any PNG asset in node_modules triggers "Unable to resolve module". if [ ! -d node_modules/missing-asset-registry-path ]; then mkdir -p node_modules/missing-asset-registry-path && if [ -f node_modules/@react-native/assets-registry/registry.js ]; then printf 'module.exports=require("@react-native/assets-registry/registry");' > node_modules/missing-asset-registry-path/index.js; else printf 'module.exports={registerAsset:function(){return 0;},getAssetByID:function(){return null;}};' > node_modules/missing-asset-registry-path/index.js; fi; fi && # ---- stub @react-native-masked-view/masked-view if missing ---- # Required by @react-navigation/elements but often not installed as a direct dependency. if [ ! -d node_modules/@react-native-masked-view/masked-view ]; then mkdir -p node_modules/@react-native-masked-view/masked-view && printf '{"name":"@react-native-masked-view/masked-view","version":"0.1.11","main":"index.js"}' > node_modules/@react-native-masked-view/masked-view/package.json && printf 'const React=require("react");const {View}=require("react-native");function MaskedView(p){return React.createElement(View,p.style?{style:p.style}:{},p.children);}module.exports=MaskedView;module.exports.default=MaskedView;' > node_modules/@react-native-masked-view/masked-view/index.js; fi && export PATH="/app/node_modules/.bin:$PATH" && cd android && chmod +x gradlew && # ---- inject fallback repositories via Gradle init script ---- mkdir -p $GRADLE_USER_HOME/init.d && echo 'gradle.beforeProject {project ->' > $GRADLE_USER_HOME/init.d/repos.gradle && echo ' project.buildscript.repositories {' >> $GRADLE_USER_HOME/init.d/repos.gradle && echo ' maven {url "https://maven.google.com"}' >> $GRADLE_USER_HOME/init.d/repos.gradle && echo ' maven {url "https://repo1.maven.org/maven2"}' >> $GRADLE_USER_HOME/init.d/repos.gradle && echo ' maven {url "https://plugins.gradle.org/m2/"}' >> $GRADLE_USER_HOME/init.d/repos.gradle && echo ' maven {url "https://jitpack.io"}' >> $GRADLE_USER_HOME/init.d/repos.gradle && echo ' }' >> $GRADLE_USER_HOME/init.d/repos.gradle && echo ' project.repositories {' >> $GRADLE_USER_HOME/init.d/repos.gradle && echo ' maven {url "https://maven.google.com"}' >> $GRADLE_USER_HOME/init.d/repos.gradle && echo ' maven {url "https://repo1.maven.org/maven2"}' >> $GRADLE_USER_HOME/init.d/repos.gradle && echo ' maven {url "https://plugins.gradle.org/m2/"}' >> $GRADLE_USER_HOME/init.d/repos.gradle && echo ' maven {url "https://jitpack.io"}' >> $GRADLE_USER_HOME/init.d/repos.gradle && echo ' }' >> $GRADLE_USER_HOME/init.d/repos.gradle && echo '}' >> $GRADLE_USER_HOME/init.d/repos.gradle && # ---- patch settings.gradle to use local react-native CLI (avoids npx failures) ---- sed -i 's/autolinkLibrariesWithCommand()/autolinkLibrariesWithCommand("node node_modules\/.bin\/react-native config")/' settings.gradle 2>/dev/null || true && # ---- disable Sentry source map upload (no credentials in CI) ---- export SENTRY_DISABLE_AUTO_UPLOAD=true && echo "sentryUploadEnabled=false" >> gradle.properties 2>/dev/null || true && # ---- enable ABI splits ---- if grep -q 'splits' app/build.gradle 2>/dev/null; then sed -i 's/enable false/enable true/' app/build.gradle || true; else sed -i '/^android[[:space:]]*{/a\ splits {\n abi {\n reset()\n enable true\n universalApk false\n include "armeabi-v7a", "arm64-v8a", "x86", "x86_64"\n }\n }' app/build.gradle || true; fi && # ---- enable R8 ---- sed -i 's/enableProguardInReleaseBuilds = false/enableProguardInReleaseBuilds = true/' app/build.gradle || true && # ---- sign release with debug key ---- sed -i '/buildTypes/,/}/s/release {/release { signingConfig signingConfigs.debug/' app/build.gradle || true && # ---- pre-resolve AAR transforms so CMake finds prefab paths ---- ./gradlew :app:dependencies --configuration releaseCompileClasspath --no-daemon > /dev/null 2>&1 || true && # ---- build release apk ---- ./gradlew assembleRelease --no-daemon || exit 1 && APK_PATH="app/build/outputs/apk/release" if ! ls $APK_PATH/*.apk 1> /dev/null 2>&1; then echo "ERROR: APK not generated" exit 1 fi # ---- copy output ---- cp app/build/outputs/apk/release/*.apk /output/r8/ # ---- copy TPL metadata ---- [ -f ../package.json ] && cp ../package.json /output/r8/ || true [ -f ../package-lock.json ] && cp ../package-lock.json /output/r8/ || true [ -f ../yarn.lock ] && cp ../yarn.lock /output/r8/ || true [ -f ../pnpm-lock.yaml ] && cp ../pnpm-lock.yaml /output/r8/ || true [ -f app/build.gradle ] && cp app/build.gradle /output/r8/android-build.gradle || true [ -f build.gradle ] && cp build.gradle /output/r8/root-build.gradle || true [ -f build.gradle.kts ] && cp build.gradle.kts /output/r8/root-build.gradle.kts || true [ -f settings.gradle ] && cp settings.gradle /output/r8/ || true [ -f settings.gradle.kts ] && cp settings.gradle.kts /output/r8/ || true [ -f gradle/libs.versions.toml ] && cp gradle/libs.versions.toml /output/r8/ || true find . -name "*.gradle" 2>/dev/null | grep -v "/build/" | grep -v "/.gradle/" | grep -v "/node_modules/" | while read f; do cp "$f" /output/r8/ 2>/dev/null; done || true find . -name "*.gradle.kts" 2>/dev/null | grep -v "/build/" | grep -v "/.gradle/" | grep -v "/node_modules/" | while read f; do cp "$f" /output/r8/ 2>/dev/null; done || true mkdir -p /output/r8/libs find . -name "*.jar" -not -name "gradle-wrapper.jar" 2>/dev/null | grep -v "/build/" | grep -v "/.gradle/" | grep -v "/node_modules/" | while read f; do cp "$f" /output/r8/libs/ 2>/dev/null; done || true find . -name "*.aar" 2>/dev/null | grep -v "/build/" | grep -v "/.gradle/" | grep -v "/node_modules/" | while read f; do cp "$f" /output/r8/libs/ 2>/dev/null; done || true find . -name "*.so" 2>/dev/null | grep -v "/build/" | grep -v "/.gradle/" | grep -v "/node_modules/" | while read f; do cp "$f" /output/r8/libs/ 2>/dev/null; done || true npm warn ERESOLVE overriding peer dependency npm warn While resolving: eslint-plugin-jest@26.9.0 npm warn Found: @typescript-eslint/eslint-plugin@6.21.0 npm warn node_modules/@typescript-eslint/eslint-plugin npm warn @typescript-eslint/eslint-plugin@"^6.7.4" from @react-native/eslint-config@0.74.83 npm warn node_modules/@react-native/eslint-config npm warn dev @react-native/eslint-config@"0.74.83" from the root project npm warn npm warn Could not resolve dependency: npm warn peerOptional @typescript-eslint/eslint-plugin@"^5.0.0" from eslint-plugin-jest@26.9.0 npm warn node_modules/eslint-plugin-jest npm warn eslint-plugin-jest@"^26.5.3" from @react-native/eslint-config@0.74.83 npm warn node_modules/@react-native/eslint-config npm warn npm warn Conflicting peer dependency: @typescript-eslint/eslint-plugin@5.62.0 npm warn node_modules/@typescript-eslint/eslint-plugin npm warn peerOptional @typescript-eslint/eslint-plugin@"^5.0.0" from eslint-plugin-jest@26.9.0 npm warn node_modules/eslint-plugin-jest npm warn eslint-plugin-jest@"^26.5.3" from @react-native/eslint-config@0.74.83 npm warn node_modules/@react-native/eslint-config npm warn deprecated @babel/plugin-proposal-optional-catch-binding@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-catch-binding instead. npm warn deprecated @babel/plugin-proposal-nullish-coalescing-operator@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead. npm warn deprecated @babel/plugin-proposal-numeric-separator@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead. npm warn deprecated @babel/plugin-proposal-class-properties@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead. npm warn deprecated @babel/plugin-proposal-logical-assignment-operators@7.20.7: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-logical-assignment-operators instead. npm warn deprecated @babel/plugin-proposal-optional-chaining@7.21.0: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead. npm warn deprecated @babel/plugin-proposal-async-generator-functions@7.20.7: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-async-generator-functions instead. npm warn deprecated querystring@0.2.1: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. npm warn deprecated @babel/plugin-proposal-object-rest-spread@7.20.7: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead. added 1144 packages, and audited 1145 packages in 20s 152 packages are looking for funding run `npm fund` for details 38 vulnerabilities (5 low, 13 moderate, 18 high, 2 critical) To address issues that do not require attention, run: npm audit fix To address all issues (including breaking changes), run: npm audit fix --force Run `npm audit` for details. sed: -e expression #1, char 37: unterminated `s' command To honour the JVM settings for this build a single-use Daemon process will be forked. For more on this, please refer to https://docs.gradle.org/8.6/userguide/gradle_daemon.html#sec:disabling_the_daemon in the Gradle documentation. Daemon will be stopped at the end of the build Path for java installation '/usr/lib/jvm/openjdk-17' (Common Linux Locations) does not contain a java executable > Task :gradle-plugin:checkKotlinGradlePluginConfigurationErrors > Task :gradle-plugin:compileKotlin UP-TO-DATE > Task :gradle-plugin:compileJava NO-SOURCE > Task :gradle-plugin:pluginDescriptors UP-TO-DATE > Task :gradle-plugin:processResources UP-TO-DATE > Task :gradle-plugin:classes UP-TO-DATE > Task :gradle-plugin:jar UP-TO-DATE Path for java installation '/usr/lib/jvm/openjdk-17' (Common Linux Locations) does not contain a java executable > Task :app:buildKotlinToolingMetadata > Task :app:checkKotlinGradlePluginConfigurationErrors > Task :app:generateCodegenSchemaFromJavaScript SKIPPED > Task :app:generateCodegenArtifactsFromSchema SKIPPED > Task :app:generatePackageList > Task :app:preBuild > Task :app:preReleaseBuild > Task :app:generateReleaseBuildConfig > Task :react-native-haptic-feedback:preBuild UP-TO-DATE > Task :react-native-haptic-feedback:preReleaseBuild UP-TO-DATE > Task :react-native-haptic-feedback:writeReleaseAarMetadata > Task :app:createBundleReleaseJsAndAssets debug Reading Metro config from /app/metro.config.js warning: the transform cache was reset. Welcome to Metro v0.80.9 Fast - Scalable - Integrated info Writing bundle output to:, /app/android/app/build/generated/assets/createBundleReleaseJsAndAssets/index.android.bundle info Writing sourcemap output to:, /app/android/app/build/intermediates/sourcemaps/react/release/index.android.bundle.packager.map info Done writing bundle output info Done writing sourcemap output info Copying 6 asset files info Done copying assets /app/android/app/build/generated/assets/createBundleReleaseJsAndAssets/index.android.bundle:1322:18: warning: the variable "DebuggerInternal" was not declared in function "__shouldPauseOnThrow" typeof DebuggerInternal !== 'undefined' && ^~~~~~~~~~~~~~~~ /app/android/app/build/generated/assets/createBundleReleaseJsAndAssets/index.android.bundle:6583:7: warning: the variable "setTimeout" was not declared in function "logCapturedError" setTimeout(function () { ^~~~~~~~~~ /app/android/app/build/generated/assets/createBundleReleaseJsAndAssets/index.android.bundle:4693:31: warning: the variable "nativeFabricUIManager" was not declared in anonymous function " 130#" var _nativeFabricUIManage = nativeFabricUIManager, ^~~~~~~~~~~~~~~~~~~~~ /app/android/app/build/generated/assets/createBundleReleaseJsAndAssets/index.android.bundle:4721:21: warning: the variable "clearTimeout" was not declared in anonymous function " 130#" cancelTimeout = clearTimeout; ^~~~~~~~~~~~ /app/android/app/build/generated/assets/createBundleReleaseJsAndAssets/index.android.bundle:9351:30: warning: the variable "__REACT_DEVTOOLS_GLOBAL_HOOK__" was not declared in anonymous function " 130#" if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /app/android/app/build/generated/assets/createBundleReleaseJsAndAssets/index.android.bundle:11767:5: warning: the variable "setImmediate" was not declared in function "handleResolved" setImmediate(function () { ^~~~~~~~~~~~ /app/android/app/build/generated/assets/createBundleReleaseJsAndAssets/index.android.bundle:16038:12: warning: the variable "fetch" was not declared in anonymous function " 366#" fetch: fetch, ^~~~~ /app/android/app/build/generated/assets/createBundleReleaseJsAndAssets/index.android.bundle:16039:14: warning: the variable "Headers" was not declared in anonymous function " 366#" Headers: Headers, ^~~~~~~ /app/android/app/build/generated/assets/createBundleReleaseJsAndAssets/index.android.bundle:16040:14: warning: the variable "Request" was not declared in anonymous function " 366#" Request: Request, ^~~~~~~ /app/android/app/build/generated/assets/createBundleReleaseJsAndAssets/index.android.bundle:16041:15: warning: the variable "Response" was not declared in anonymous function " 366#" Response: Response ^~~~~~~~ /app/android/app/build/generated/assets/createBundleReleaseJsAndAssets/index.android.bundle:16198:24: warning: the variable "FileReader" was not declared in function "readBlobAsArrayBuffer" var reader = new FileReader(); ^~~~~~~~~~ /app/android/app/build/generated/assets/createBundleReleaseJsAndAssets/index.android.bundle:16249:36: warning: the variable "Blob" was not declared in anonymous function " 377#" } else if (support.blob && Blob.prototype.isPrototypeOf(body)) { ^~~~ /app/android/app/build/generated/assets/createBundleReleaseJsAndAssets/index.android.bundle:16251:40: warning: the variable "FormData" was not declared in anonymous function " 377#" } else if (support.formData && FormData.prototype.isPrototypeOf(body)) { ^~~~~~~~ /app/android/app/build/generated/assets/createBundleReleaseJsAndAssets/index.android.bundle:16253:44: warning: the variable "URLSearchParams" was not declared in anonymous function " 377#" ...e if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body... ^~~~~~~~~~~~~~~ /app/android/app/build/generated/assets/createBundleReleaseJsAndAssets/index.android.bundle:16372:26: warning: the variable "AbortController" was not declared in anonymous function " 383#" var ctrl = new AbortController(); ^~~~~~~~~~~~~~~ /app/android/app/build/generated/assets/createBundleReleaseJsAndAssets/index.android.bundle:16506:23: warning: the variable "XMLHttpRequest" was not declared in anonymous function " 387#" var xhr = new XMLHttpRequest(); ^~~~~~~~~~~~~~ /app/android/app/build/generated/assets/createBundleReleaseJsAndAssets/index.android.bundle:16051:71: warning: the variable "self" was not declared in anonymous function " 369#" ...undefined' && globalThis || typeof self !== 'undefined' && self || ^~~~ /app/android/app/build/generated/assets/createBundleReleaseJsAndAssets/index.android.bundle:26323:27: warning: the variable "performance" was not declared in anonymous function " 682#" if ("object" === typeof performance && "function" === typeof performance.no... ^~~~~~~~~~~ /app/android/app/build/generated/assets/createBundleReleaseJsAndAssets/index.android.bundle:26346:26: warning: the variable "navigator" was not declared in anonymous function " 682#" "undefined" !== typeof navigator && undefined !== navigator.scheduling && u... ^~~~~~~~~ /app/android/app/build/generated/assets/createBundleReleaseJsAndAssets/index.android.bundle:26456:37: warning: the variable "MessageChannel" was not declared in anonymous function " 682#" };else if ("undefined" !== typeof MessageChannel) { ^~~~~~~~~~~~~~ /app/android/app/build/generated/assets/createBundleReleaseJsAndAssets/index.android.bundle:26471:34: warning: the variable "nativeRuntimeScheduler" was not declared in anonymous function " 682#" ... = "undefined" !== typeof nativeRuntimeScheduler ? nativeRuntimeScheduler.... ^~~~~~~~~~~~~~~~~~~~~~ /app/android/app/build/generated/assets/createBundleReleaseJsAndAssets/index.android.bundle:35569:34: warning: the variable "requestAnimationFrame" was not declared in function "start 9#" ... this._animationFrame = requestAnimationFrame(this.onUpdate.bind(this)); ^~~~~~~~~~~~~~~~~~~~~ > Task :app:checkReleaseAarMetadata > Task :app:generateReleaseResValues > Task :react-native-haptic-feedback:generateReleaseResValues > Task :react-native-haptic-feedback:generateReleaseResources > Task :react-native-haptic-feedback:packageReleaseResources > Task :app:mapReleaseSourceSetPaths > Task :app:generateReleaseResources > Task :app:packageReleaseResources > Task :app:mergeReleaseResources > Task :app:createReleaseCompatibleScreenManifests > Task :app:extractDeepLinksRelease > Task :react-native-haptic-feedback:extractDeepLinksRelease > Task :app:parseReleaseLocalResources > Task :react-native-haptic-feedback:processReleaseManifest package="com.mkuczera" found in source AndroidManifest.xml: /app/node_modules/react-native-haptic-feedback/android/src/main/AndroidManifest.xml. Setting the namespace via the package attribute in the source AndroidManifest.xml is no longer supported, and the value is ignored. Recommendation: remove package="com.mkuczera" from the source AndroidManifest.xml: /app/node_modules/react-native-haptic-feedback/android/src/main/AndroidManifest.xml. > Task :react-native-haptic-feedback:compileReleaseLibraryResources > Task :app:processReleaseMainManifest > Task :app:processReleaseManifest > Task :react-native-haptic-feedback:generateReleaseBuildConfig > Task :react-native-haptic-feedback:parseReleaseLocalResources > Task :react-native-haptic-feedback:javaPreCompileRelease > Task :app:javaPreCompileRelease > Task :app:extractProguardFiles > Task :react-native-haptic-feedback:processReleaseJavaRes NO-SOURCE > Task :react-native-haptic-feedback:mergeReleaseJniLibFolders > Task :app:processReleaseManifestForPackage > Task :react-native-haptic-feedback:mergeReleaseNativeLibs NO-SOURCE > Task :react-native-haptic-feedback:stripReleaseDebugSymbols NO-SOURCE > Task :react-native-haptic-feedback:generateReleaseRFile > Task :react-native-haptic-feedback:extractDeepLinksForAarRelease > Task :react-native-haptic-feedback:copyReleaseJniLibsProjectAndLocalJars > Task :app:processReleaseResources Note: Some input files use or override a deprecated API. Note: Recompile with -Xlint:deprecation for details. > Task :react-native-haptic-feedback:compileReleaseJavaWithJavac > Task :react-native-haptic-feedback:bundleLibCompileToJarRelease > Task :react-native-haptic-feedback:bundleLibRuntimeToJarRelease > Task :react-native-haptic-feedback:extractReleaseAnnotations > Task :react-native-haptic-feedback:createFullJarRelease > Task :react-native-haptic-feedback:mergeReleaseGeneratedProguardFiles > Task :react-native-haptic-feedback:mergeReleaseConsumerProguardFiles > Task :react-native-haptic-feedback:mergeReleaseShaders > Task :react-native-haptic-feedback:compileReleaseShaders NO-SOURCE > Task :react-native-haptic-feedback:generateReleaseAssets UP-TO-DATE > Task :react-native-haptic-feedback:packageReleaseAssets > Task :react-native-haptic-feedback:prepareReleaseArtProfile > Task :react-native-haptic-feedback:prepareLintJarForPublish > Task :react-native-haptic-feedback:extractProguardFiles > Task :react-native-haptic-feedback:writeReleaseLintModelMetadata > Task :react-native-haptic-feedback:mergeReleaseJavaResource > Task :react-native-haptic-feedback:generateReleaseLintVitalModel > Task :react-native-haptic-feedback:syncReleaseLibJars > Task :react-native-haptic-feedback:bundleReleaseLocalLintAar > Task :react-native-haptic-feedback:generateReleaseLintModel > Task :app:mergeReleaseJniLibFolders > Task :react-native-haptic-feedback:copyReleaseJniLibsProjectOnly > Task :react-native-haptic-feedback:exportReleaseConsumerProguardFiles > Task :app:mergeReleaseNativeLibs > Task :app:compileReleaseKotlin > Task :app:checkReleaseDuplicateClasses > Task :app:stripReleaseDebugSymbols Unable to strip the following libraries, packaging them as they are: libc++_shared.so, libfabricjni.so, libfbjni.so, libfolly_runtime.so, libglog.so, libhermes.so, libhermes_executor.so, libhermesinstancejni.so, libimagepipeline.so, libjscinstance.so, libjsi.so, libjsijniprofiler.so, libjsinspector.so, libmapbufferjni.so, libnative-filters.so, libnative-imagetranscoder.so, libreact_codegen_rncore.so, libreact_cxxreactpackage.so, libreact_debug.so, libreact_devsupportjni.so, libreact_featureflags.so, libreact_featureflagsjni.so, libreact_nativemodule_core.so, libreact_newarchdefaults.so, libreact_render_componentregistry.so, libreact_render_core.so, libreact_render_debug.so, libreact_render_graphics.so, libreact_render_imagemanager.so, libreact_render_mapbuffer.so, libreact_utils.so, libreactnativeblob.so, libreactnativejni.so, libreactperfloggerjni.so, librninstance.so, librrc_image.so, librrc_legacyviewmanagerinterop.so, librrc_view.so, libruntimeexecutor.so, libturbomodulejsijni.so, libuimanagerjni.so, libyoga.so. > Task :app:compileReleaseJavaWithJavac > Task :app:generateReleaseLintVitalReportModel > Task :app:extractReleaseNativeSymbolTables > Task :app:mergeReleaseNativeDebugMetadata NO-SOURCE > Task :app:mergeReleaseGeneratedProguardFiles > Task :app:mergeReleaseArtProfile > Task :app:processReleaseJavaRes > Task :app:mergeReleaseShaders > Task :app:compileReleaseShaders NO-SOURCE > Task :app:generateReleaseAssets UP-TO-DATE > Task :app:mergeReleaseAssets > Task :app:compressReleaseAssets > Task :app:expandReleaseArtProfileWildcards > Task :app:collectReleaseDependencies > Task :app:mergeReleaseJavaResource > Task :app:sdkReleaseDependencyData > Task :app:validateSigningRelease > Task :app:writeReleaseAppMetadata > Task :app:writeReleaseSigningConfigVersions > Task :react-native-haptic-feedback:bundleReleaseAar > Task :react-native-haptic-feedback:mapReleaseSourceSetPaths > Task :react-native-haptic-feedback:mergeReleaseResources > Task :react-native-haptic-feedback:lintVitalAnalyzeRelease > Task :app:optimizeReleaseResources > Task :react-native-haptic-feedback:verifyReleaseResources > Task :react-native-haptic-feedback:assembleRelease > Task :app:lintVitalAnalyzeRelease > Task :app:lintVitalReportRelease > Task :app:lintVitalRelease > Task :app:minifyReleaseWithR8 > Task :app:compileReleaseArtProfile > Task :app:packageRelease > Task :app:createReleaseApkListingFileRedirect > Task :app:assembleRelease BUILD SUCCESSFUL in 3m 21s 91 actionable tasks: 87 executed, 4 up-to-date > echo Build succeeded with Node 18 Build succeeded with Node 18