
> echo Attempting build for daniel0ferraz-CardApp with Node 18 and jdk 11
Attempting build for daniel0ferraz-CardApp with Node 18 and jdk 11

> docker run --rm -v /home/ubuntu/storage/extracted/daniel0ferraz-CardApp/CardApp-a39aed2383dbcb8e87b827f1efc3b26b11367820:/source:ro -v /home/ubuntu/BachelorsThesis/scripts/RN/output/daniel0ferraz-CardApp:/output -v /home/ubuntu/.npm:/root/.npm react-android:18-jdk11 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
                    
yarn install v1.22.22
[1/4] Resolving packages...
[2/4] Fetching packages...
[3/4] Linking dependencies...
warning "react-native > react-native-codegen > jscodeshift@0.11.0" has unmet peer dependency "@babel/preset-env@^7.1.6".
warning " > styled-components@5.3.3" has unmet peer dependency "react-dom@>= 16.8.0".
warning " > styled-components@5.3.3" has unmet peer dependency "react-is@>= 16.8.0".
[4/4] Building fresh packages...
Done in 39.55s.
Downloading https://services.gradle.org/distributions/gradle-7.2-all.zip
..............10%...............20%...............30%...............40%...............50%...............60%...............70%...............80%...............90%...............100%

Welcome to Gradle 7.2!

Here are the highlights of this release:
 - Toolchain support for Scala
 - More cache hits when Java source files have platform-specific line endings
 - More resilient remote HTTP build cache behavior

For more details see https://docs.gradle.org/7.2/release-notes.html

> Task :app:clean UP-TO-DATE
> Task :react-native-svg:clean

Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.

You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.

See https://docs.gradle.org/7.2/userguide/command_line_interface.html#sec:command_line_warnings

BUILD SUCCESSFUL in 57s
2 actionable tasks: 1 executed, 1 up-to-date
Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01
Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/03 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/03 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/03 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01
Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/03 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/03 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/03 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01
Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/03 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/03 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/03 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01
Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/03 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/03 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/03 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
unexpected element (uri:"", local:"base-extension"). Expected elements are <{}codename>,<{}layoutlib>,<{}api-level>
Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01
Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/03 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/03 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/03 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01
Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/03 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/03 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/03 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01
Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/03 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/03 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/03 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01
Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/03 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/03 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/03 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
unexpected element (uri:"", local:"base-extension"). Expected elements are <{}codename>,<{}layoutlib>,<{}api-level>
File /root/.android/repositories.cfg could not be loaded.
Checking the license for package Android SDK Build-Tools 30.0.2 in /opt/android/licenses
License for package Android SDK Build-Tools 30.0.2 accepted.
Preparing "Install Android SDK Build-Tools 30.0.2 (revision: 30.0.2)".
"Install Android SDK Build-Tools 30.0.2 (revision: 30.0.2)" ready.
Installing Android SDK Build-Tools 30.0.2 in /opt/android/build-tools/30.0.2
"Install Android SDK Build-Tools 30.0.2 (revision: 30.0.2)" complete.
"Install Android SDK Build-Tools 30.0.2 (revision: 30.0.2)" finished.
Checking the license for package Android SDK Platform 30 in /opt/android/licenses
License for package Android SDK Platform 30 accepted.
Preparing "Install Android SDK Platform 30 (revision: 3)".
"Install Android SDK Platform 30 (revision: 3)" ready.
Installing Android SDK Platform 30 in /opt/android/platforms/android-30
"Install Android SDK Platform 30 (revision: 3)" complete.
"Install Android SDK Platform 30 (revision: 3)" finished.
Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01
Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/03 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/03 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/03 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01
Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/03 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/03 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/03 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01
Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/03 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/03 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/03 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01
Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/03 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/03 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/03 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
unexpected element (uri:"", local:"base-extension"). Expected elements are <{}codename>,<{}layoutlib>,<{}api-level>
> Task :app:generatePackageList
> Task :app:preBuild
> Task :app:preDebugBuild
> Task :react-native-svg:preBuild UP-TO-DATE
> Task :react-native-svg:preDebugBuild UP-TO-DATE
> Task :react-native-svg:compileDebugAidl NO-SOURCE
> Task :app:compileDebugAidl NO-SOURCE
> Task :react-native-svg:packageDebugRenderscript NO-SOURCE
> Task :app:compileDebugRenderscript NO-SOURCE
> Task :app:generateDebugBuildConfig
> Task :app:bundleDebugJsAndAssets SKIPPED
> Task :react-native-svg:writeDebugAarMetadata
> Task :app:javaPreCompileDebug
> Task :app:mergeDebugShaders
> Task :app:compileDebugShaders NO-SOURCE
> Task :app:generateDebugAssets UP-TO-DATE
> Task :react-native-svg:mergeDebugShaders
> Task :react-native-svg:compileDebugShaders NO-SOURCE
> Task :react-native-svg:generateDebugAssets UP-TO-DATE
> Task :react-native-svg:packageDebugAssets
> Task :app:mergeDebugAssets
> Task :app:copyDebugBundledJs SKIPPED
> Task :app:generateDebugResValues
> Task :app:generateDebugResources
> Task :react-native-svg:compileDebugRenderscript NO-SOURCE
> Task :react-native-svg:generateDebugResValues
> Task :react-native-svg:generateDebugResources
> Task :react-native-svg:packageDebugResources
> Task :app:checkDebugAarMetadata
> Task :app:createDebugCompatibleScreenManifests
> Task :app:extractDeepLinksDebug
> Task :react-native-svg:extractDeepLinksDebug
> Task :react-native-svg:processDebugManifest
> Task :app:mergeDebugResources
> Task :react-native-svg:compileDebugLibraryResources
> Task :app:processDebugMainManifest
> Task :app:processDebugManifest
> Task :react-native-svg:generateDebugBuildConfig
> Task :app:processDebugManifestForPackage
> Task :app:mergeDebugNativeDebugMetadata NO-SOURCE
> Task :react-native-svg:javaPreCompileDebug
> Task :app:compressDebugAssets
> Task :app:processDebugJavaRes NO-SOURCE
> Task :react-native-svg:processDebugJavaRes NO-SOURCE
> Task :react-native-svg:bundleLibResDebug NO-SOURCE
> Task :react-native-svg:parseDebugLocalResources
> Task :app:mergeDebugJavaResource
> Task :react-native-svg:generateDebugRFile
> Task :app:checkDebugDuplicateClasses
> Task :app:processDebugResources

> Task :react-native-svg:compileDebugJavaWithJavac
Note: /app/node_modules/react-native-svg/android/src/main/java/com/horcrux/svg/VirtualView.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.

> Task :react-native-svg:bundleLibCompileToJarDebug
> Task :app:desugarDebugFileDependencies
> Task :react-native-svg:bundleLibRuntimeToJarDebug

> Task :app:compileDebugJavaWithJavac

> Task :app:compileDebugSources
Note: /app/android/app/src/debug/java/com/card/ReactNativeFlipper.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
> Task :app:mergeDebugJniLibFolders
> Task :react-native-svg:mergeDebugJniLibFolders
> Task :react-native-svg:mergeDebugNativeLibs NO-SOURCE
> Task :react-native-svg:stripDebugDebugSymbols NO-SOURCE
> Task :app:validateSigningDebug
> Task :react-native-svg:copyDebugJniLibsProjectOnly
> Task :app:writeDebugAppMetadata
> Task :app:writeDebugSigningConfigVersions
> Task :react-native-svg:copyDebugJniLibsProjectAndLocalJars
> Task :app:mergeExtDexDebug
> Task :react-native-svg:extractDebugAnnotations
> Task :react-native-svg:mergeDebugGeneratedProguardFiles
> Task :react-native-svg:mergeDebugConsumerProguardFiles
> Task :react-native-svg:prepareLintJarForPublish
> Task :react-native-svg:compileDebugSources
> Task :react-native-svg:mergeDebugJavaResource
> Task :app:dexBuilderDebug
> Task :app:mergeProjectDexDebug
> Task :react-native-svg:syncDebugLibJars
> Task :react-native-svg:bundleDebugAar
> Task :react-native-svg:assembleDebug
> Task :app:mergeLibDexDebug
> Task :app:mergeDebugNativeLibs

> Task :app:stripDebugDebugSymbols
Unable to strip the following libraries, packaging them as they are: libbetter.so, libc++_shared.so, libevent-2.1.so, libevent_core-2.1.so, libevent_extra-2.1.so, libfabricjni.so, libfb.so, libfbjni.so, libflipper.so, libfolly_futures.so, libfolly_json.so, libglog.so, libglog_init.so, libimagepipeline.so, libjsc.so, libjscexecutor.so, libjsi.so, libjsijniprofiler.so, libjsinspector.so, liblogger.so, libmapbufferjni.so, libnative-filters.so, libnative-imagetranscoder.so, libreact_codegen_rncore.so, libreact_debug.so, libreact_nativemodule_core.so, libreact_render_animations.so, libreact_render_attributedstring.so, libreact_render_componentregistry.so, libreact_render_core.so, libreact_render_debug.so, libreact_render_graphics.so, libreact_render_imagemanager.so, libreact_render_leakchecker.so, libreact_render_mapbuffer.so, libreact_render_mounting.so, libreact_render_runtimescheduler.so, libreact_render_scheduler.so, libreact_render_telemetry.so, libreact_render_templateprocessor.so, libreact_render_textlayoutmanager.so, libreact_render_uimanager.so, libreact_utils.so, libreactconfig.so, libreactnativeblob.so, libreactnativejni.so, libreactnativeutilsjni.so, libreactperfloggerjni.so, librrc_image.so, librrc_modal.so, librrc_progressbar.so, librrc_root.so, librrc_scrollview.so, librrc_slider.so, librrc_switch.so, librrc_text.so, librrc_textinput.so, librrc_unimplementedview.so, librrc_view.so, libturbomodulejsijni.so, libyoga.so.

> Task :app:packageDebug
> Task :app:assembleDebug

Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.

You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.

See https://docs.gradle.org/7.2/userguide/command_line_interface.html#sec:command_line_warnings

BUILD SUCCESSFUL in 1m 15s
55 actionable tasks: 55 executed

> docker run --rm -v /home/ubuntu/storage/extracted/daniel0ferraz-CardApp/CardApp-a39aed2383dbcb8e87b827f1efc3b26b11367820:/source:ro -v /home/ubuntu/BachelorsThesis/scripts/RN/output/daniel0ferraz-CardApp:/output -v /home/ubuntu/.npm:/root/.npm react-android:18-jdk11 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
                    
yarn install v1.22.22
[1/4] Resolving packages...
[2/4] Fetching packages...
[3/4] Linking dependencies...
warning "react-native > react-native-codegen > jscodeshift@0.11.0" has unmet peer dependency "@babel/preset-env@^7.1.6".
warning " > styled-components@5.3.3" has unmet peer dependency "react-dom@>= 16.8.0".
warning " > styled-components@5.3.3" has unmet peer dependency "react-is@>= 16.8.0".
[4/4] Building fresh packages...
Done in 38.24s.
sed: -e expression #1, char 37: unterminated `s' command
> Task :app:generatePackageList
> Task :app:preBuild
> Task :app:extractProguardFiles
> Task :app:preReleaseBuild
> Task :react-native-svg:preBuild UP-TO-DATE
> Task :react-native-svg:preReleaseBuild UP-TO-DATE
> Task :react-native-svg:compileReleaseAidl NO-SOURCE
> Task :app:compileReleaseAidl NO-SOURCE
> Task :react-native-svg:packageReleaseRenderscript NO-SOURCE
> Task :app:compileReleaseRenderscript NO-SOURCE
> Task :app:generateReleaseBuildConfig
> Task :app:javaPreCompileRelease
> Task :app:writeReleaseApplicationId
> Task :app:analyticsRecordingRelease
> Task :react-native-svg:writeReleaseAarMetadata

> Task :app:bundleReleaseJsAndAssets
Execution optimizations have been disabled for task ':app:bundleReleaseJsAndAssets' to ensure correctness due to the following reasons:
  - Gradle detected a problem with the following location: '/app'. Reason: Task ':app:bundleReleaseJsAndAssets' uses this output of task ':react-native-svg:compileReleaseAidl' without declaring an explicit or implicit dependency. This can lead to incorrect results being produced, depending on what order the tasks are executed. Please refer to https://docs.gradle.org/7.2/userguide/validation_problems.html#implicit_dependency for more details about this problem.
  - Gradle detected a problem with the following location: '/app'. Reason: Task ':app:bundleReleaseJsAndAssets' uses this output of task ':react-native-svg:packageReleaseRenderscript' without declaring an explicit or implicit dependency. This can lead to incorrect results being produced, depending on what order the tasks are executed. Please refer to https://docs.gradle.org/7.2/userguide/validation_problems.html#implicit_dependency for more details about this problem.
  - Gradle detected a problem with the following location: '/app'. Reason: Task ':app:bundleReleaseJsAndAssets' uses this output of task ':react-native-svg:writeReleaseAarMetadata' without declaring an explicit or implicit dependency. This can lead to incorrect results being produced, depending on what order the tasks are executed. Please refer to https://docs.gradle.org/7.2/userguide/validation_problems.html#implicit_dependency for more details about this problem.
warning: the transform cache was reset.
                    Welcome to Metro!
              Fast - Scalable - Integrated


Failed to construct transformer:  Error: error:0308010C:digital envelope routines::unsupported
    at new Hash (node:internal/crypto/hash:69:19)
    at Object.createHash (node:crypto:133:10)
TypeError: Cannot read properties of undefined (reading 'transformFile')
    at stableHash (/app/node_modules/metro-cache/src/stableHash.js:19:8)
    at Object.getCacheKey (/app/node_modules/metro-transform-worker/src/index.js:593:7)
    at Bundler.transformFile (/app/node_modules/metro/src/Bundler.js:48:30)
    at getTransformCacheKey (/app/node_modules/metro/src/DeltaBundler/getTransformCacheKey.js:24:19)
    at async Object.transform (/app/node_modules/metro/src/lib/transformHelpers.js:101:12)
    at new Transformer (/app/node_modules/metro/src/DeltaBundler/Transformer.js:48:9)
    at async processModule (/app/node_modules/metro/src/DeltaBundler/traverseDependencies.js:137:18)
    at /app/node_modules/metro/src/Bundler.js:22:29 {
  opensslErrorStack: [ 'error:03000086:digital envelope routines::initialization error' ],
  library: 'digital envelope routines',
  reason: 'unsupported',
  code: 'ERR_OSSL_EVP_UNSUPPORTED'
}
error Cannot read properties of undefined (reading 'transformFile').
    at async traverseDependenciesForSingleFile (/app/node_modules/metro/src/DeltaBundler/traverseDependencies.js:131:3)
    at async Promise.all (index 0)
    at async initialTraverseDependencies (/app/node_modules/metro/src/DeltaBundler/traverseDependencies.js:114:3)
    at async DeltaCalculator._getChangedDependencies (/app/node_modules/metro/src/DeltaBundler/DeltaCalculator.js:164:25)
    at async DeltaCalculator.getDelta (/app/node_modules/metro/src/DeltaBundler/DeltaCalculator.js:94:16)
    at async DeltaBundler.buildGraph (/app/node_modules/metro/src/DeltaBundler.js:50:5)
    at async IncrementalBundler.buildGraphForEntries (/app/node_modules/metro/src/IncrementalBundler.js:80:19)
info Run CLI with --verbose flag for more details.

> Task :app:bundleReleaseJsAndAssets FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:bundleReleaseJsAndAssets'.
> Process 'command 'node'' finished with non-zero exit value 1

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.

You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.

See https://docs.gradle.org/7.2/userguide/command_line_interface.html#sec:command_line_warnings

Execution optimizations have been disabled for 1 invalid unit(s) of work during this build to ensure correctness.
Please consult deprecation warnings for more details.

BUILD FAILED in 1m 2s
8 actionable tasks: 8 executed

> echo Build failed with Node 18 and jdk version 11 with the following error: Command '['docker', 'run', '--rm', '-v', '/home/ubuntu/storage/extracted/daniel0ferraz-CardApp/CardApp-a39aed2383dbcb8e87b827f1efc3b26b11367820:/source:ro', '-v', '/home/ubuntu/BachelorsThesis/scripts/RN/output/daniel0ferraz-CardApp:/output', '-v', '/home/ubuntu/.npm:/root/.npm', 'react-android:18-jdk11', 'bash', '-c', '\n                set -e\n\n                cp -r /source/. /app &&                 cd /app && \n                # ---- install deps (yarn or npm) ----\n                if [ -f yarn.lock ]; then\n                    yarn install;\n                else\n                    npm install --ignore-scripts;\n                fi && \n                # ---- stub missing parent package.json (monorepo metro configs) ----\n                [ ! -f ../package.json ] && cp package.json ../package.json 2>/dev/null || true && \n                # ---- patch toReversed (Node <20 compat) ----\n                find node_modules -name "loadConfig.js" -path "*/metro-config/*" -exec sed -i \'s/\\.toReversed()/.slice().reverse()/g\' {} \\; 2>/dev/null || true && \n                # ---- patch missing expo/AppEntry ----\n                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 && \n                # ---- patch broken metro config (ESM-only, null-returning, or monorepo-only) ----\n                # NOTE: do NOT replace configs that merely use expo/metro-config — those carry\n                # Expo-specific resolver paths (watchFolders, extraNodeModules) needed for\n                # packages like @react-native-masked-view/masked-view to resolve.\n                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");\nmodule.exports = mergeConfig(getDefaultConfig(__dirname), {});\n\' > metro.config.js;                     else                         printf \'const {getDefaultConfig} = require("metro-config");\nmodule.exports = getDefaultConfig(__dirname);\n\' > metro.config.js;                     fi;                 fi && \n                # ---- stub missing google-services.json (Firebase/Expo prebuild) ----\n                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 && \n                # ---- detect expo ----\n                if grep -q \'"expo"\' package.json && [ ! -d android ]; then\n                    echo "Expo project detected";\n                    CI=1 npx --yes expo prebuild --platform android\n                fi && \n                # ---- fix expo/metro-config: serializer + Flow transformIgnorePatterns ----\n                # Runs AFTER prebuild because prebuild generates metro.config.js for managed-workflow\n                # projects — patching before prebuild would be overwritten by the generated file.\n                # Fix 1: remove customSerializer that returns JS string instead of JSON\n                #   ("var __BUND..." → "Serializer did not return expected format").\n                # Fix 2: add transformIgnorePatterns so expo/src/Expo.ts goes through Babel\n                #   (default pattern excludes all node_modules → raw Flow types → SyntaxError).\n                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 && \n                # ---- stub missing metro watchFolders paths ----\n                mkdir -p /src 2>/dev/null || true && \n                # ---- fix babel configs that use react-native-builder-bob ----\n                # builder-bob is a library-dev tool; its getConfig() throws "Couldn\'t determine the source\n                # directory" when built outside the library\'s own workspace. Replace with a standard preset.\n                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"]};};\n\' > 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 && \n                # ---- ensure TypeScript babel support (fixes \'interface\' SyntaxError in metro bundling) ----\n                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"]};};\n\' > babel.config.js;                 fi && \n                # ---- stub missing-asset-registry-path (Metro virtual module not resolved in release) ----\n                # Metro normally aliases this to @react-native/assets-registry/registry at bundle time.\n                # When that alias is missing, any PNG asset in node_modules triggers "Unable to resolve module".\n                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 && \n                # ---- stub @react-native-masked-view/masked-view if missing ----\n                # Required by @react-navigation/elements but often not installed as a direct dependency.\n                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 && \n                export PATH="/app/node_modules/.bin:$PATH" &&                 cd android && \n                chmod +x gradlew && \n                # ---- inject fallback repositories via Gradle init script ----\n                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 && \n                # ---- patch settings.gradle to use local react-native CLI (avoids npx failures) ----\n                sed -i \'s/autolinkLibrariesWithCommand()/autolinkLibrariesWithCommand("node node_modules\\/.bin\\/react-native config")/\' settings.gradle 2>/dev/null || true && \n                # ---- disable Sentry source map upload (no credentials in CI) ----\n                export SENTRY_DISABLE_AUTO_UPLOAD=true &&                 echo "sentryUploadEnabled=false" >> gradle.properties 2>/dev/null || true && \n                # ---- enable ABI splits ----\n                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 && \n                # ---- enable R8 ----\n                sed -i \'s/enableProguardInReleaseBuilds = false/enableProguardInReleaseBuilds = true/\' app/build.gradle || true && \n                # ---- sign release with debug key ----\n                sed -i \'/buildTypes/,/}/s/release {/release {\n            signingConfig signingConfigs.debug/\' app/build.gradle || true && \n                # ---- pre-resolve AAR transforms so CMake finds prefab paths ----\n                ./gradlew :app:dependencies --configuration releaseCompileClasspath --no-daemon > /dev/null 2>&1 || true && \n                # ---- build release apk ----\n                ./gradlew assembleRelease --no-daemon || exit 1 &&                     \n                APK_PATH="app/build/outputs/apk/release"\n\n                if ! ls $APK_PATH/*.apk 1> /dev/null 2>&1; then\n                    echo "ERROR: APK not generated"\n                    exit 1\n                fi\n\n                # ---- copy output ----\n                cp app/build/outputs/apk/release/*.apk /output/r8/\n\n                # ---- copy TPL metadata ----\n                [ -f ../package.json ] && cp ../package.json /output/r8/ || true\n                [ -f ../package-lock.json ] && cp ../package-lock.json /output/r8/ || true\n                [ -f ../yarn.lock ] && cp ../yarn.lock /output/r8/ || true\n                [ -f ../pnpm-lock.yaml ] && cp ../pnpm-lock.yaml /output/r8/ || true\n                [ -f app/build.gradle ] && cp app/build.gradle /output/r8/android-build.gradle || true\n                [ -f build.gradle ] && cp build.gradle /output/r8/root-build.gradle || true\n                [ -f build.gradle.kts ] && cp build.gradle.kts /output/r8/root-build.gradle.kts || true\n                [ -f settings.gradle ] && cp settings.gradle /output/r8/ || true\n                [ -f settings.gradle.kts ] && cp settings.gradle.kts /output/r8/ || true\n                [ -f gradle/libs.versions.toml ] && cp gradle/libs.versions.toml /output/r8/ || true\n                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\n                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\n                mkdir -p /output/r8/libs\n                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\n                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\n                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\n                    ']' returned non-zero exit status 1.
Build failed with Node 18 and jdk version 11 with the following error: Command '['docker', 'run', '--rm', '-v', '/home/ubuntu/storage/extracted/daniel0ferraz-CardApp/CardApp-a39aed2383dbcb8e87b827f1efc3b26b11367820:/source:ro', '-v', '/home/ubuntu/BachelorsThesis/scripts/RN/output/daniel0ferraz-CardApp:/output', '-v', '/home/ubuntu/.npm:/root/.npm', 'react-android:18-jdk11', 'bash', '-c', '\n                set -e\n\n                cp -r /source/. /app &&                 cd /app && \n                # ---- install deps (yarn or npm) ----\n                if [ -f yarn.lock ]; then\n                    yarn install;\n                else\n                    npm install --ignore-scripts;\n                fi && \n                # ---- stub missing parent package.json (monorepo metro configs) ----\n                [ ! -f ../package.json ] && cp package.json ../package.json 2>/dev/null || true && \n                # ---- patch toReversed (Node <20 compat) ----\n                find node_modules -name "loadConfig.js" -path "*/metro-config/*" -exec sed -i \'s/\\.toReversed()/.slice().reverse()/g\' {} \\; 2>/dev/null || true && \n                # ---- patch missing expo/AppEntry ----\n                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 && \n                # ---- patch broken metro config (ESM-only, null-returning, or monorepo-only) ----\n                # NOTE: do NOT replace configs that merely use expo/metro-config — those carry\n                # Expo-specific resolver paths (watchFolders, extraNodeModules) needed for\n                # packages like @react-native-masked-view/masked-view to resolve.\n                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");\nmodule.exports = mergeConfig(getDefaultConfig(__dirname), {});\n\' > metro.config.js;                     else                         printf \'const {getDefaultConfig} = require("metro-config");\nmodule.exports = getDefaultConfig(__dirname);\n\' > metro.config.js;                     fi;                 fi && \n                # ---- stub missing google-services.json (Firebase/Expo prebuild) ----\n                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 && \n                # ---- detect expo ----\n                if grep -q \'"expo"\' package.json && [ ! -d android ]; then\n                    echo "Expo project detected";\n                    CI=1 npx --yes expo prebuild --platform android\n                fi && \n                # ---- fix expo/metro-config: serializer + Flow transformIgnorePatterns ----\n                # Runs AFTER prebuild because prebuild generates metro.config.js for managed-workflow\n                # projects — patching before prebuild would be overwritten by the generated file.\n                # Fix 1: remove customSerializer that returns JS string instead of JSON\n                #   ("var __BUND..." → "Serializer did not return expected format").\n                # Fix 2: add transformIgnorePatterns so expo/src/Expo.ts goes through Babel\n                #   (default pattern excludes all node_modules → raw Flow types → SyntaxError).\n                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 && \n                # ---- stub missing metro watchFolders paths ----\n                mkdir -p /src 2>/dev/null || true && \n                # ---- fix babel configs that use react-native-builder-bob ----\n                # builder-bob is a library-dev tool; its getConfig() throws "Couldn\'t determine the source\n                # directory" when built outside the library\'s own workspace. Replace with a standard preset.\n                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"]};};\n\' > 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 && \n                # ---- ensure TypeScript babel support (fixes \'interface\' SyntaxError in metro bundling) ----\n                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"]};};\n\' > babel.config.js;                 fi && \n                # ---- stub missing-asset-registry-path (Metro virtual module not resolved in release) ----\n                # Metro normally aliases this to @react-native/assets-registry/registry at bundle time.\n                # When that alias is missing, any PNG asset in node_modules triggers "Unable to resolve module".\n                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 && \n                # ---- stub @react-native-masked-view/masked-view if missing ----\n                # Required by @react-navigation/elements but often not installed as a direct dependency.\n                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 && \n                export PATH="/app/node_modules/.bin:$PATH" &&                 cd android && \n                chmod +x gradlew && \n                # ---- inject fallback repositories via Gradle init script ----\n                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 && \n                # ---- patch settings.gradle to use local react-native CLI (avoids npx failures) ----\n                sed -i \'s/autolinkLibrariesWithCommand()/autolinkLibrariesWithCommand("node node_modules\\/.bin\\/react-native config")/\' settings.gradle 2>/dev/null || true && \n                # ---- disable Sentry source map upload (no credentials in CI) ----\n                export SENTRY_DISABLE_AUTO_UPLOAD=true &&                 echo "sentryUploadEnabled=false" >> gradle.properties 2>/dev/null || true && \n                # ---- enable ABI splits ----\n                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 && \n                # ---- enable R8 ----\n                sed -i \'s/enableProguardInReleaseBuilds = false/enableProguardInReleaseBuilds = true/\' app/build.gradle || true && \n                # ---- sign release with debug key ----\n                sed -i \'/buildTypes/,/}/s/release {/release {\n            signingConfig signingConfigs.debug/\' app/build.gradle || true && \n                # ---- pre-resolve AAR transforms so CMake finds prefab paths ----\n                ./gradlew :app:dependencies --configuration releaseCompileClasspath --no-daemon > /dev/null 2>&1 || true && \n                # ---- build release apk ----\n                ./gradlew assembleRelease --no-daemon || exit 1 &&                     \n                APK_PATH="app/build/outputs/apk/release"\n\n                if ! ls $APK_PATH/*.apk 1> /dev/null 2>&1; then\n                    echo "ERROR: APK not generated"\n                    exit 1\n                fi\n\n                # ---- copy output ----\n                cp app/build/outputs/apk/release/*.apk /output/r8/\n\n                # ---- copy TPL metadata ----\n                [ -f ../package.json ] && cp ../package.json /output/r8/ || true\n                [ -f ../package-lock.json ] && cp ../package-lock.json /output/r8/ || true\n                [ -f ../yarn.lock ] && cp ../yarn.lock /output/r8/ || true\n                [ -f ../pnpm-lock.yaml ] && cp ../pnpm-lock.yaml /output/r8/ || true\n                [ -f app/build.gradle ] && cp app/build.gradle /output/r8/android-build.gradle || true\n                [ -f build.gradle ] && cp build.gradle /output/r8/root-build.gradle || true\n                [ -f build.gradle.kts ] && cp build.gradle.kts /output/r8/root-build.gradle.kts || true\n                [ -f settings.gradle ] && cp settings.gradle /output/r8/ || true\n                [ -f settings.gradle.kts ] && cp settings.gradle.kts /output/r8/ || true\n                [ -f gradle/libs.versions.toml ] && cp gradle/libs.versions.toml /output/r8/ || true\n                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\n                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\n                mkdir -p /output/r8/libs\n                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\n                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\n                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\n                    ']' returned non-zero exit status 1.

> echo Attempting build for daniel0ferraz-CardApp with Node 20 and jdk 11
Attempting build for daniel0ferraz-CardApp with Node 20 and jdk 11

> docker run --rm -v /home/ubuntu/storage/extracted/daniel0ferraz-CardApp/CardApp-a39aed2383dbcb8e87b827f1efc3b26b11367820:/source:ro -v /home/ubuntu/BachelorsThesis/scripts/RN/output/daniel0ferraz-CardApp:/output -v /home/ubuntu/.npm:/root/.npm react-android:20-jdk11 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
                    
yarn install v1.22.22
[1/4] Resolving packages...
[2/4] Fetching packages...
[3/4] Linking dependencies...
warning "react-native > react-native-codegen > jscodeshift@0.11.0" has unmet peer dependency "@babel/preset-env@^7.1.6".
warning " > styled-components@5.3.3" has unmet peer dependency "react-dom@>= 16.8.0".
warning " > styled-components@5.3.3" has unmet peer dependency "react-is@>= 16.8.0".
[4/4] Building fresh packages...
Done in 35.46s.
Downloading https://services.gradle.org/distributions/gradle-7.2-all.zip
..............10%...............20%...............30%...............40%...............50%...............60%...............70%...............80%...............90%...............100%

Welcome to Gradle 7.2!

Here are the highlights of this release:
 - Toolchain support for Scala
 - More cache hits when Java source files have platform-specific line endings
 - More resilient remote HTTP build cache behavior

For more details see https://docs.gradle.org/7.2/release-notes.html

> Task :app:clean UP-TO-DATE
> Task :react-native-svg:clean

Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.

You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.

See https://docs.gradle.org/7.2/userguide/command_line_interface.html#sec:command_line_warnings

BUILD SUCCESSFUL in 1m 6s
2 actionable tasks: 1 executed, 1 up-to-date
Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01
Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/03 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/03 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/03 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01
Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/03 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/03 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/03 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01
Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/03 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/03 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/03 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01
Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/03 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/03 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/03 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
unexpected element (uri:"", local:"base-extension"). Expected elements are <{}codename>,<{}layoutlib>,<{}api-level>
Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01
Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/03 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/03 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/03 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01
Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/03 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/03 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/03 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01
Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/03 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/03 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/03 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01
Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/03 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/03 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/03 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
unexpected element (uri:"", local:"base-extension"). Expected elements are <{}codename>,<{}layoutlib>,<{}api-level>
File /root/.android/repositories.cfg could not be loaded.
Checking the license for package Android SDK Build-Tools 30.0.2 in /opt/android/licenses
License for package Android SDK Build-Tools 30.0.2 accepted.
Preparing "Install Android SDK Build-Tools 30.0.2 (revision: 30.0.2)".
"Install Android SDK Build-Tools 30.0.2 (revision: 30.0.2)" ready.
Installing Android SDK Build-Tools 30.0.2 in /opt/android/build-tools/30.0.2
"Install Android SDK Build-Tools 30.0.2 (revision: 30.0.2)" complete.
"Install Android SDK Build-Tools 30.0.2 (revision: 30.0.2)" finished.
Checking the license for package Android SDK Platform 30 in /opt/android/licenses
License for package Android SDK Platform 30 accepted.
Preparing "Install Android SDK Platform 30 (revision: 3)".
"Install Android SDK Platform 30 (revision: 3)" ready.
Installing Android SDK Platform 30 in /opt/android/platforms/android-30
"Install Android SDK Platform 30 (revision: 3)" complete.
"Install Android SDK Platform 30 (revision: 3)" finished.
Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01
Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/03 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/03 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/03 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01
Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/03 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/03 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/03 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01
Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/03 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/03 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/03 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01
Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/03 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/03 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/03 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
unexpected element (uri:"", local:"base-extension"). Expected elements are <{}codename>,<{}layoutlib>,<{}api-level>
> Task :app:generatePackageList
> Task :app:preBuild
> Task :app:preDebugBuild
> Task :react-native-svg:preBuild UP-TO-DATE
> Task :react-native-svg:preDebugBuild UP-TO-DATE
> Task :react-native-svg:compileDebugAidl NO-SOURCE
> Task :app:compileDebugAidl NO-SOURCE
> Task :react-native-svg:packageDebugRenderscript NO-SOURCE
> Task :app:compileDebugRenderscript NO-SOURCE
> Task :app:generateDebugBuildConfig
> Task :app:javaPreCompileDebug
> Task :app:bundleDebugJsAndAssets SKIPPED
> Task :react-native-svg:writeDebugAarMetadata
> Task :app:mergeDebugShaders
> Task :app:compileDebugShaders NO-SOURCE
> Task :app:generateDebugAssets UP-TO-DATE
> Task :react-native-svg:mergeDebugShaders
> Task :react-native-svg:compileDebugShaders NO-SOURCE
> Task :app:checkDebugAarMetadata
> Task :react-native-svg:generateDebugAssets UP-TO-DATE
> Task :react-native-svg:packageDebugAssets
> Task :app:mergeDebugAssets
> Task :app:copyDebugBundledJs SKIPPED
> Task :app:generateDebugResValues
> Task :app:generateDebugResources
> Task :react-native-svg:compileDebugRenderscript NO-SOURCE
> Task :react-native-svg:generateDebugResValues
> Task :react-native-svg:generateDebugResources
> Task :react-native-svg:packageDebugResources
> Task :app:createDebugCompatibleScreenManifests
> Task :app:extractDeepLinksDebug
> Task :react-native-svg:extractDeepLinksDebug
> Task :app:mergeDebugResources
> Task :react-native-svg:processDebugManifest
> Task :react-native-svg:compileDebugLibraryResources
> Task :app:processDebugMainManifest
> Task :app:processDebugManifest
> Task :react-native-svg:generateDebugBuildConfig
> Task :react-native-svg:javaPreCompileDebug
> Task :app:processDebugManifestForPackage
> Task :app:mergeDebugNativeDebugMetadata NO-SOURCE
> Task :app:compressDebugAssets
> Task :app:processDebugJavaRes NO-SOURCE
> Task :react-native-svg:processDebugJavaRes NO-SOURCE
> Task :react-native-svg:bundleLibResDebug NO-SOURCE
> Task :react-native-svg:parseDebugLocalResources
> Task :app:mergeDebugJavaResource
> Task :react-native-svg:generateDebugRFile
> Task :app:checkDebugDuplicateClasses
> Task :app:desugarDebugFileDependencies
> Task :app:processDebugResources
> Task :app:mergeExtDexDebug
Note: /app/node_modules/react-native-svg/android/src/main/java/com/horcrux/svg/VirtualView.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.

> Task :react-native-svg:compileDebugJavaWithJavac

> Task :app:mergeDebugJniLibFolders
> Task :react-native-svg:mergeDebugJniLibFolders
> Task :react-native-svg:mergeDebugNativeLibs NO-SOURCE
> Task :react-native-svg:stripDebugDebugSymbols NO-SOURCE
> Task :react-native-svg:bundleLibRuntimeToJarDebug
> Task :react-native-svg:copyDebugJniLibsProjectOnly
> Task :app:validateSigningDebug
> Task :react-native-svg:bundleLibCompileToJarDebug
> Task :app:writeDebugAppMetadata
> Task :app:writeDebugSigningConfigVersions
> Task :react-native-svg:copyDebugJniLibsProjectAndLocalJars
> Task :react-native-svg:extractDebugAnnotations
> Task :react-native-svg:mergeDebugGeneratedProguardFiles
> Task :react-native-svg:mergeDebugConsumerProguardFiles
> Task :react-native-svg:prepareLintJarForPublish
> Task :app:mergeLibDexDebug
> Task :react-native-svg:compileDebugSources
> Task :react-native-svg:mergeDebugJavaResource

> Task :app:compileDebugJavaWithJavac
Note: /app/android/app/src/debug/java/com/card/ReactNativeFlipper.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.

> Task :app:compileDebugSources
> Task :app:dexBuilderDebug
> Task :react-native-svg:syncDebugLibJars
> Task :react-native-svg:bundleDebugAar
> Task :react-native-svg:assembleDebug
> Task :app:mergeProjectDexDebug
> Task :app:mergeDebugNativeLibs

> Task :app:stripDebugDebugSymbols
Unable to strip the following libraries, packaging them as they are: libbetter.so, libc++_shared.so, libevent-2.1.so, libevent_core-2.1.so, libevent_extra-2.1.so, libfabricjni.so, libfb.so, libfbjni.so, libflipper.so, libfolly_futures.so, libfolly_json.so, libglog.so, libglog_init.so, libimagepipeline.so, libjsc.so, libjscexecutor.so, libjsi.so, libjsijniprofiler.so, libjsinspector.so, liblogger.so, libmapbufferjni.so, libnative-filters.so, libnative-imagetranscoder.so, libreact_codegen_rncore.so, libreact_debug.so, libreact_nativemodule_core.so, libreact_render_animations.so, libreact_render_attributedstring.so, libreact_render_componentregistry.so, libreact_render_core.so, libreact_render_debug.so, libreact_render_graphics.so, libreact_render_imagemanager.so, libreact_render_leakchecker.so, libreact_render_mapbuffer.so, libreact_render_mounting.so, libreact_render_runtimescheduler.so, libreact_render_scheduler.so, libreact_render_telemetry.so, libreact_render_templateprocessor.so, libreact_render_textlayoutmanager.so, libreact_render_uimanager.so, libreact_utils.so, libreactconfig.so, libreactnativeblob.so, libreactnativejni.so, libreactnativeutilsjni.so, libreactperfloggerjni.so, librrc_image.so, librrc_modal.so, librrc_progressbar.so, librrc_root.so, librrc_scrollview.so, librrc_slider.so, librrc_switch.so, librrc_text.so, librrc_textinput.so, librrc_unimplementedview.so, librrc_view.so, libturbomodulejsijni.so, libyoga.so.

> Task :app:packageDebug
> Task :app:assembleDebug

Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.

You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.

See https://docs.gradle.org/7.2/userguide/command_line_interface.html#sec:command_line_warnings

BUILD SUCCESSFUL in 1m 36s
55 actionable tasks: 55 executed

> docker run --rm -v /home/ubuntu/storage/extracted/daniel0ferraz-CardApp/CardApp-a39aed2383dbcb8e87b827f1efc3b26b11367820:/source:ro -v /home/ubuntu/BachelorsThesis/scripts/RN/output/daniel0ferraz-CardApp:/output -v /home/ubuntu/.npm:/root/.npm react-android:20-jdk11 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
                    
yarn install v1.22.22
[1/4] Resolving packages...
[2/4] Fetching packages...
[3/4] Linking dependencies...
warning "react-native > react-native-codegen > jscodeshift@0.11.0" has unmet peer dependency "@babel/preset-env@^7.1.6".
warning " > styled-components@5.3.3" has unmet peer dependency "react-dom@>= 16.8.0".
warning " > styled-components@5.3.3" has unmet peer dependency "react-is@>= 16.8.0".
[4/4] Building fresh packages...
Done in 40.95s.
sed: -e expression #1, char 37: unterminated `s' command
> Task :app:generatePackageList
> Task :app:preBuild
> Task :app:extractProguardFiles
> Task :app:preReleaseBuild
> Task :react-native-svg:preBuild UP-TO-DATE
> Task :react-native-svg:preReleaseBuild UP-TO-DATE
> Task :react-native-svg:compileReleaseAidl NO-SOURCE
> Task :app:compileReleaseAidl NO-SOURCE
> Task :react-native-svg:packageReleaseRenderscript NO-SOURCE
> Task :app:compileReleaseRenderscript NO-SOURCE
> Task :app:generateReleaseBuildConfig
> Task :app:javaPreCompileRelease
> Task :app:writeReleaseApplicationId
> Task :app:analyticsRecordingRelease
> Task :react-native-svg:writeReleaseAarMetadata
> Task :app:bundleReleaseJsAndAssets
Execution optimizations have been disabled for task ':app:bundleReleaseJsAndAssets' to ensure correctness due to the following reasons:
  - Gradle detected a problem with the following location: '/app'. Reason: Task ':app:bundleReleaseJsAndAssets' uses this output of task ':react-native-svg:compileReleaseAidl' without declaring an explicit or implicit dependency. This can lead to incorrect results being produced, depending on what order the tasks are executed. Please refer to https://docs.gradle.org/7.2/userguide/validation_problems.html#implicit_dependency for more details about this problem.
  - Gradle detected a problem with the following location: '/app'. Reason: Task ':app:bundleReleaseJsAndAssets' uses this output of task ':react-native-svg:packageReleaseRenderscript' without declaring an explicit or implicit dependency. This can lead to incorrect results being produced, depending on what order the tasks are executed. Please refer to https://docs.gradle.org/7.2/userguide/validation_problems.html#implicit_dependency for more details about this problem.
  - Gradle detected a problem with the following location: '/app'. Reason: Task ':app:bundleReleaseJsAndAssets' uses this output of task ':react-native-svg:writeReleaseAarMetadata' without declaring an explicit or implicit dependency. This can lead to incorrect results being produced, depending on what order the tasks are executed. Please refer to https://docs.gradle.org/7.2/userguide/validation_problems.html#implicit_dependency for more details about this problem.
warning: the transform cache was reset.
                    Welcome to Metro!
              Fast - Scalable - Integrated


Failed to construct transformer:  Error: error:0308010C:digital envelope routines::unsupported
    at new Hash (node:internal/crypto/hash:101:19)
    at Object.createHash (node:crypto:139:10)
    at stableHash (/app/node_modules/metro-cache/src/stableHash.js:19:8)
    at Object.getCacheKey (/app/node_modules/metro-transform-worker/src/index.js:593:7)
    at getTransformCacheKey (/app/node_modules/metro/src/DeltaBundler/getTransformCacheKey.js:24:19)
    at new Transformer (/app/node_modules/metro/src/DeltaBundler/Transformer.js:48:9)
    at /app/node_modules/metro/src/Bundler.js:22:29 {
  opensslErrorStack: [
    'error:03000086:digital envelope routines::initialization error',
    'error:0308010C:digital envelope routines::unsupported'
  ],
  library: 'digital envelope routines',
  reason: 'unsupported',
  code: 'ERR_OSSL_EVP_UNSUPPORTED'
}
error Cannot read properties of undefined (reading 'transformFile').
TypeError: Cannot read properties of undefined (reading 'transformFile')
    at Bundler.transformFile (/app/node_modules/metro/src/Bundler.js:48:30)
    at async Object.transform (/app/node_modules/metro/src/lib/transformHelpers.js:101:12)
    at async processModule (/app/node_modules/metro/src/DeltaBundler/traverseDependencies.js:137:18)
    at async traverseDependenciesForSingleFile (/app/node_modules/metro/src/DeltaBundler/traverseDependencies.js:131:3)
    at async Promise.all (index 0)
    at async initialTraverseDependencies (/app/node_modules/metro/src/DeltaBundler/traverseDependencies.js:114:3)
    at async DeltaCalculator._getChangedDependencies (/app/node_modules/metro/src/DeltaBundler/DeltaCalculator.js:164:25)
    at async DeltaCalculator.getDelta (/app/node_modules/metro/src/DeltaBundler/DeltaCalculator.js:94:16)
    at async DeltaBundler.buildGraph (/app/node_modules/metro/src/DeltaBundler.js:50:5)
    at async IncrementalBundler.buildGraphForEntries (/app/node_modules/metro/src/IncrementalBundler.js:80:19)
info Run CLI with --verbose flag for more details.

> Task :app:bundleReleaseJsAndAssets FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:bundleReleaseJsAndAssets'.
> Process 'command 'node'' finished with non-zero exit value 1

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.

You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.

See https://docs.gradle.org/7.2/userguide/command_line_interface.html#sec:command_line_warnings

Execution optimizations have been disabled for 1 invalid unit(s) of work during this build to ensure correctness.
Please consult deprecation warnings for more details.

BUILD FAILED8 actionable tasks: 8 executed
 in 1m 17s

> echo Build failed with Node 20 and jdk version 11 with the following error: Command '['docker', 'run', '--rm', '-v', '/home/ubuntu/storage/extracted/daniel0ferraz-CardApp/CardApp-a39aed2383dbcb8e87b827f1efc3b26b11367820:/source:ro', '-v', '/home/ubuntu/BachelorsThesis/scripts/RN/output/daniel0ferraz-CardApp:/output', '-v', '/home/ubuntu/.npm:/root/.npm', 'react-android:20-jdk11', 'bash', '-c', '\n                set -e\n\n                cp -r /source/. /app &&                 cd /app && \n                # ---- install deps (yarn or npm) ----\n                if [ -f yarn.lock ]; then\n                    yarn install;\n                else\n                    npm install --ignore-scripts;\n                fi && \n                # ---- stub missing parent package.json (monorepo metro configs) ----\n                [ ! -f ../package.json ] && cp package.json ../package.json 2>/dev/null || true && \n                # ---- patch toReversed (Node <20 compat) ----\n                find node_modules -name "loadConfig.js" -path "*/metro-config/*" -exec sed -i \'s/\\.toReversed()/.slice().reverse()/g\' {} \\; 2>/dev/null || true && \n                # ---- patch missing expo/AppEntry ----\n                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 && \n                # ---- patch broken metro config (ESM-only, null-returning, or monorepo-only) ----\n                # NOTE: do NOT replace configs that merely use expo/metro-config — those carry\n                # Expo-specific resolver paths (watchFolders, extraNodeModules) needed for\n                # packages like @react-native-masked-view/masked-view to resolve.\n                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");\nmodule.exports = mergeConfig(getDefaultConfig(__dirname), {});\n\' > metro.config.js;                     else                         printf \'const {getDefaultConfig} = require("metro-config");\nmodule.exports = getDefaultConfig(__dirname);\n\' > metro.config.js;                     fi;                 fi && \n                # ---- stub missing google-services.json (Firebase/Expo prebuild) ----\n                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 && \n                # ---- detect expo ----\n                if grep -q \'"expo"\' package.json && [ ! -d android ]; then\n                    echo "Expo project detected";\n                    CI=1 npx --yes expo prebuild --platform android\n                fi && \n                # ---- fix expo/metro-config: serializer + Flow transformIgnorePatterns ----\n                # Runs AFTER prebuild because prebuild generates metro.config.js for managed-workflow\n                # projects — patching before prebuild would be overwritten by the generated file.\n                # Fix 1: remove customSerializer that returns JS string instead of JSON\n                #   ("var __BUND..." → "Serializer did not return expected format").\n                # Fix 2: add transformIgnorePatterns so expo/src/Expo.ts goes through Babel\n                #   (default pattern excludes all node_modules → raw Flow types → SyntaxError).\n                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 && \n                # ---- stub missing metro watchFolders paths ----\n                mkdir -p /src 2>/dev/null || true && \n                # ---- fix babel configs that use react-native-builder-bob ----\n                # builder-bob is a library-dev tool; its getConfig() throws "Couldn\'t determine the source\n                # directory" when built outside the library\'s own workspace. Replace with a standard preset.\n                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"]};};\n\' > 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 && \n                # ---- ensure TypeScript babel support (fixes \'interface\' SyntaxError in metro bundling) ----\n                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"]};};\n\' > babel.config.js;                 fi && \n                # ---- stub missing-asset-registry-path (Metro virtual module not resolved in release) ----\n                # Metro normally aliases this to @react-native/assets-registry/registry at bundle time.\n                # When that alias is missing, any PNG asset in node_modules triggers "Unable to resolve module".\n                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 && \n                # ---- stub @react-native-masked-view/masked-view if missing ----\n                # Required by @react-navigation/elements but often not installed as a direct dependency.\n                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 && \n                export PATH="/app/node_modules/.bin:$PATH" &&                 cd android && \n                chmod +x gradlew && \n                # ---- inject fallback repositories via Gradle init script ----\n                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 && \n                # ---- patch settings.gradle to use local react-native CLI (avoids npx failures) ----\n                sed -i \'s/autolinkLibrariesWithCommand()/autolinkLibrariesWithCommand("node node_modules\\/.bin\\/react-native config")/\' settings.gradle 2>/dev/null || true && \n                # ---- disable Sentry source map upload (no credentials in CI) ----\n                export SENTRY_DISABLE_AUTO_UPLOAD=true &&                 echo "sentryUploadEnabled=false" >> gradle.properties 2>/dev/null || true && \n                # ---- enable ABI splits ----\n                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 && \n                # ---- enable R8 ----\n                sed -i \'s/enableProguardInReleaseBuilds = false/enableProguardInReleaseBuilds = true/\' app/build.gradle || true && \n                # ---- sign release with debug key ----\n                sed -i \'/buildTypes/,/}/s/release {/release {\n            signingConfig signingConfigs.debug/\' app/build.gradle || true && \n                # ---- pre-resolve AAR transforms so CMake finds prefab paths ----\n                ./gradlew :app:dependencies --configuration releaseCompileClasspath --no-daemon > /dev/null 2>&1 || true && \n                # ---- build release apk ----\n                ./gradlew assembleRelease --no-daemon || exit 1 &&                     \n                APK_PATH="app/build/outputs/apk/release"\n\n                if ! ls $APK_PATH/*.apk 1> /dev/null 2>&1; then\n                    echo "ERROR: APK not generated"\n                    exit 1\n                fi\n\n                # ---- copy output ----\n                cp app/build/outputs/apk/release/*.apk /output/r8/\n\n                # ---- copy TPL metadata ----\n                [ -f ../package.json ] && cp ../package.json /output/r8/ || true\n                [ -f ../package-lock.json ] && cp ../package-lock.json /output/r8/ || true\n                [ -f ../yarn.lock ] && cp ../yarn.lock /output/r8/ || true\n                [ -f ../pnpm-lock.yaml ] && cp ../pnpm-lock.yaml /output/r8/ || true\n                [ -f app/build.gradle ] && cp app/build.gradle /output/r8/android-build.gradle || true\n                [ -f build.gradle ] && cp build.gradle /output/r8/root-build.gradle || true\n                [ -f build.gradle.kts ] && cp build.gradle.kts /output/r8/root-build.gradle.kts || true\n                [ -f settings.gradle ] && cp settings.gradle /output/r8/ || true\n                [ -f settings.gradle.kts ] && cp settings.gradle.kts /output/r8/ || true\n                [ -f gradle/libs.versions.toml ] && cp gradle/libs.versions.toml /output/r8/ || true\n                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\n                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\n                mkdir -p /output/r8/libs\n                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\n                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\n                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\n                    ']' returned non-zero exit status 1.
Build failed with Node 20 and jdk version 11 with the following error: Command '['docker', 'run', '--rm', '-v', '/home/ubuntu/storage/extracted/daniel0ferraz-CardApp/CardApp-a39aed2383dbcb8e87b827f1efc3b26b11367820:/source:ro', '-v', '/home/ubuntu/BachelorsThesis/scripts/RN/output/daniel0ferraz-CardApp:/output', '-v', '/home/ubuntu/.npm:/root/.npm', 'react-android:20-jdk11', 'bash', '-c', '\n                set -e\n\n                cp -r /source/. /app &&                 cd /app && \n                # ---- install deps (yarn or npm) ----\n                if [ -f yarn.lock ]; then\n                    yarn install;\n                else\n                    npm install --ignore-scripts;\n                fi && \n                # ---- stub missing parent package.json (monorepo metro configs) ----\n                [ ! -f ../package.json ] && cp package.json ../package.json 2>/dev/null || true && \n                # ---- patch toReversed (Node <20 compat) ----\n                find node_modules -name "loadConfig.js" -path "*/metro-config/*" -exec sed -i \'s/\\.toReversed()/.slice().reverse()/g\' {} \\; 2>/dev/null || true && \n                # ---- patch missing expo/AppEntry ----\n                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 && \n                # ---- patch broken metro config (ESM-only, null-returning, or monorepo-only) ----\n                # NOTE: do NOT replace configs that merely use expo/metro-config — those carry\n                # Expo-specific resolver paths (watchFolders, extraNodeModules) needed for\n                # packages like @react-native-masked-view/masked-view to resolve.\n                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");\nmodule.exports = mergeConfig(getDefaultConfig(__dirname), {});\n\' > metro.config.js;                     else                         printf \'const {getDefaultConfig} = require("metro-config");\nmodule.exports = getDefaultConfig(__dirname);\n\' > metro.config.js;                     fi;                 fi && \n                # ---- stub missing google-services.json (Firebase/Expo prebuild) ----\n                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 && \n                # ---- detect expo ----\n                if grep -q \'"expo"\' package.json && [ ! -d android ]; then\n                    echo "Expo project detected";\n                    CI=1 npx --yes expo prebuild --platform android\n                fi && \n                # ---- fix expo/metro-config: serializer + Flow transformIgnorePatterns ----\n                # Runs AFTER prebuild because prebuild generates metro.config.js for managed-workflow\n                # projects — patching before prebuild would be overwritten by the generated file.\n                # Fix 1: remove customSerializer that returns JS string instead of JSON\n                #   ("var __BUND..." → "Serializer did not return expected format").\n                # Fix 2: add transformIgnorePatterns so expo/src/Expo.ts goes through Babel\n                #   (default pattern excludes all node_modules → raw Flow types → SyntaxError).\n                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 && \n                # ---- stub missing metro watchFolders paths ----\n                mkdir -p /src 2>/dev/null || true && \n                # ---- fix babel configs that use react-native-builder-bob ----\n                # builder-bob is a library-dev tool; its getConfig() throws "Couldn\'t determine the source\n                # directory" when built outside the library\'s own workspace. Replace with a standard preset.\n                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"]};};\n\' > 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 && \n                # ---- ensure TypeScript babel support (fixes \'interface\' SyntaxError in metro bundling) ----\n                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"]};};\n\' > babel.config.js;                 fi && \n                # ---- stub missing-asset-registry-path (Metro virtual module not resolved in release) ----\n                # Metro normally aliases this to @react-native/assets-registry/registry at bundle time.\n                # When that alias is missing, any PNG asset in node_modules triggers "Unable to resolve module".\n                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 && \n                # ---- stub @react-native-masked-view/masked-view if missing ----\n                # Required by @react-navigation/elements but often not installed as a direct dependency.\n                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 && \n                export PATH="/app/node_modules/.bin:$PATH" &&                 cd android && \n                chmod +x gradlew && \n                # ---- inject fallback repositories via Gradle init script ----\n                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 && \n                # ---- patch settings.gradle to use local react-native CLI (avoids npx failures) ----\n                sed -i \'s/autolinkLibrariesWithCommand()/autolinkLibrariesWithCommand("node node_modules\\/.bin\\/react-native config")/\' settings.gradle 2>/dev/null || true && \n                # ---- disable Sentry source map upload (no credentials in CI) ----\n                export SENTRY_DISABLE_AUTO_UPLOAD=true &&                 echo "sentryUploadEnabled=false" >> gradle.properties 2>/dev/null || true && \n                # ---- enable ABI splits ----\n                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 && \n                # ---- enable R8 ----\n                sed -i \'s/enableProguardInReleaseBuilds = false/enableProguardInReleaseBuilds = true/\' app/build.gradle || true && \n                # ---- sign release with debug key ----\n                sed -i \'/buildTypes/,/}/s/release {/release {\n            signingConfig signingConfigs.debug/\' app/build.gradle || true && \n                # ---- pre-resolve AAR transforms so CMake finds prefab paths ----\n                ./gradlew :app:dependencies --configuration releaseCompileClasspath --no-daemon > /dev/null 2>&1 || true && \n                # ---- build release apk ----\n                ./gradlew assembleRelease --no-daemon || exit 1 &&                     \n                APK_PATH="app/build/outputs/apk/release"\n\n                if ! ls $APK_PATH/*.apk 1> /dev/null 2>&1; then\n                    echo "ERROR: APK not generated"\n                    exit 1\n                fi\n\n                # ---- copy output ----\n                cp app/build/outputs/apk/release/*.apk /output/r8/\n\n                # ---- copy TPL metadata ----\n                [ -f ../package.json ] && cp ../package.json /output/r8/ || true\n                [ -f ../package-lock.json ] && cp ../package-lock.json /output/r8/ || true\n                [ -f ../yarn.lock ] && cp ../yarn.lock /output/r8/ || true\n                [ -f ../pnpm-lock.yaml ] && cp ../pnpm-lock.yaml /output/r8/ || true\n                [ -f app/build.gradle ] && cp app/build.gradle /output/r8/android-build.gradle || true\n                [ -f build.gradle ] && cp build.gradle /output/r8/root-build.gradle || true\n                [ -f build.gradle.kts ] && cp build.gradle.kts /output/r8/root-build.gradle.kts || true\n                [ -f settings.gradle ] && cp settings.gradle /output/r8/ || true\n                [ -f settings.gradle.kts ] && cp settings.gradle.kts /output/r8/ || true\n                [ -f gradle/libs.versions.toml ] && cp gradle/libs.versions.toml /output/r8/ || true\n                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\n                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\n                mkdir -p /output/r8/libs\n                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\n                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\n                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\n                    ']' returned non-zero exit status 1.

> echo Attempting build for daniel0ferraz-CardApp with Node 22 and jdk 11
Attempting build for daniel0ferraz-CardApp with Node 22 and jdk 11

> docker run --rm -v /home/ubuntu/storage/extracted/daniel0ferraz-CardApp/CardApp-a39aed2383dbcb8e87b827f1efc3b26b11367820:/source:ro -v /home/ubuntu/BachelorsThesis/scripts/RN/output/daniel0ferraz-CardApp:/output -v /home/ubuntu/.npm:/root/.npm react-android:22-jdk11 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
                    
yarn install v1.22.22
[1/4] Resolving packages...
[2/4] Fetching packages...
[3/4] Linking dependencies...
warning "react-native > react-native-codegen > jscodeshift@0.11.0" has unmet peer dependency "@babel/preset-env@^7.1.6".
warning " > styled-components@5.3.3" has unmet peer dependency "react-dom@>= 16.8.0".
warning " > styled-components@5.3.3" has unmet peer dependency "react-is@>= 16.8.0".
[4/4] Building fresh packages...
Done in 39.80s.
Downloading https://services.gradle.org/distributions/gradle-7.2-all.zip
..............10%...............20%...............30%...............40%...............50%...............60%...............70%...............80%...............90%...............100%

Welcome to Gradle 7.2!

Here are the highlights of this release:
 - Toolchain support for Scala
 - More cache hits when Java source files have platform-specific line endings
 - More resilient remote HTTP build cache behavior

For more details see https://docs.gradle.org/7.2/release-notes.html

> Task :app:clean UP-TO-DATE
> Task :react-native-svg:clean

Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.

You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.

See https://docs.gradle.org/7.2/userguide/command_line_interface.html#sec:command_line_warnings

BUILD SUCCESSFUL in 54s
2 actionable tasks: 1 executed, 1 up-to-date
Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01
Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/03 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/03 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/03 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01
Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/03 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/03 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/03 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01
Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/03 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/03 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/03 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01
Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/03 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/03 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/03 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
unexpected element (uri:"", local:"base-extension"). Expected elements are <{}codename>,<{}layoutlib>,<{}api-level>
Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01
Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/03 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/03 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/03 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01
Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/03 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/03 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/03 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01
Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/03 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/03 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/03 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01
Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/03 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/03 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/03 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
unexpected element (uri:"", local:"base-extension"). Expected elements are <{}codename>,<{}layoutlib>,<{}api-level>
File /root/.android/repositories.cfg could not be loaded.
Checking the license for package Android SDK Build-Tools 30.0.2 in /opt/android/licenses
License for package Android SDK Build-Tools 30.0.2 accepted.
Preparing "Install Android SDK Build-Tools 30.0.2 (revision: 30.0.2)".
"Install Android SDK Build-Tools 30.0.2 (revision: 30.0.2)" ready.
Installing Android SDK Build-Tools 30.0.2 in /opt/android/build-tools/30.0.2
"Install Android SDK Build-Tools 30.0.2 (revision: 30.0.2)" complete.
"Install Android SDK Build-Tools 30.0.2 (revision: 30.0.2)" finished.
Checking the license for package Android SDK Platform 30 in /opt/android/licenses
License for package Android SDK Platform 30 accepted.
Preparing "Install Android SDK Platform 30 (revision: 3)".
"Install Android SDK Platform 30 (revision: 3)" ready.
Installing Android SDK Platform 30 in /opt/android/platforms/android-30
"Install Android SDK Platform 30 (revision: 3)" complete.
"Install Android SDK Platform 30 (revision: 3)" finished.
Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01
Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/03 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/03 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/03 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01
Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/03 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/03 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/03 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01
Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/03 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/03 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/03 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01
Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/03 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/03 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/03 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
unexpected element (uri:"", local:"base-extension"). Expected elements are <{}codename>,<{}layoutlib>,<{}api-level>
> Task :app:generatePackageList
> Task :app:preBuild
> Task :app:preDebugBuild
> Task :react-native-svg:preBuild UP-TO-DATE
> Task :react-native-svg:preDebugBuild UP-TO-DATE
> Task :react-native-svg:compileDebugAidl NO-SOURCE
> Task :app:compileDebugAidl NO-SOURCE
> Task :react-native-svg:packageDebugRenderscript NO-SOURCE
> Task :app:compileDebugRenderscript NO-SOURCE
> Task :app:generateDebugBuildConfig
> Task :app:javaPreCompileDebug
> Task :app:bundleDebugJsAndAssets SKIPPED
> Task :react-native-svg:writeDebugAarMetadata
> Task :app:mergeDebugShaders
> Task :app:compileDebugShaders NO-SOURCE
> Task :app:generateDebugAssets UP-TO-DATE
> Task :react-native-svg:mergeDebugShaders
> Task :react-native-svg:compileDebugShaders NO-SOURCE
> Task :react-native-svg:generateDebugAssets UP-TO-DATE
> Task :react-native-svg:packageDebugAssets
> Task :app:mergeDebugAssets
> Task :app:copyDebugBundledJs SKIPPED
> Task :app:generateDebugResValues
> Task :app:generateDebugResources
> Task :react-native-svg:compileDebugRenderscript NO-SOURCE
> Task :react-native-svg:generateDebugResValues
> Task :react-native-svg:generateDebugResources
> Task :react-native-svg:packageDebugResources
> Task :app:checkDebugAarMetadata
> Task :app:createDebugCompatibleScreenManifests
> Task :app:extractDeepLinksDebug
> Task :react-native-svg:extractDeepLinksDebug
> Task :app:mergeDebugResources
> Task :react-native-svg:processDebugManifest
> Task :react-native-svg:compileDebugLibraryResources
> Task :react-native-svg:generateDebugBuildConfig
> Task :react-native-svg:javaPreCompileDebug
> Task :app:mergeDebugNativeDebugMetadata NO-SOURCE
> Task :app:compressDebugAssets
> Task :app:processDebugJavaRes NO-SOURCE
> Task :react-native-svg:processDebugJavaRes NO-SOURCE
> Task :react-native-svg:bundleLibResDebug NO-SOURCE
> Task :react-native-svg:parseDebugLocalResources
> Task :app:checkDebugDuplicateClasses
> Task :app:mergeDebugJavaResource
> Task :app:processDebugMainManifest
> Task :app:processDebugManifest
> Task :react-native-svg:generateDebugRFile
> Task :app:desugarDebugFileDependencies
> Task :app:processDebugManifestForPackage
> Task :app:mergeDebugJniLibFolders
> Task :react-native-svg:mergeDebugJniLibFolders
> Task :react-native-svg:mergeDebugNativeLibs NO-SOURCE
> Task :react-native-svg:stripDebugDebugSymbols NO-SOURCE
> Task :react-native-svg:copyDebugJniLibsProjectOnly
> Task :app:validateSigningDebug
> Task :app:writeDebugAppMetadata
> Task :app:writeDebugSigningConfigVersions
> Task :react-native-svg:copyDebugJniLibsProjectAndLocalJars
> Task :react-native-svg:prepareLintJarForPublish
> Task :react-native-svg:mergeDebugJavaResource
> Task :app:mergeExtDexDebug

> Task :react-native-svg:compileDebugJavaWithJavac
Note: /app/node_modules/react-native-svg/android/src/main/java/com/horcrux/svg/VirtualView.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.

> Task :react-native-svg:bundleLibCompileToJarDebug
> Task :app:mergeDebugNativeLibs
> Task :react-native-svg:bundleLibRuntimeToJarDebug

> Task :app:stripDebugDebugSymbols
Unable to strip the following libraries, packaging them as they are: libbetter.so, libc++_shared.so, libevent-2.1.so, libevent_core-2.1.so, libevent_extra-2.1.so, libfabricjni.so, libfb.so, libfbjni.so, libflipper.so, libfolly_futures.so, libfolly_json.so, libglog.so, libglog_init.so, libimagepipeline.so, libjsc.so, libjscexecutor.so, libjsi.so, libjsijniprofiler.so, libjsinspector.so, liblogger.so, libmapbufferjni.so, libnative-filters.so, libnative-imagetranscoder.so, libreact_codegen_rncore.so, libreact_debug.so, libreact_nativemodule_core.so, libreact_render_animations.so, libreact_render_attributedstring.so, libreact_render_componentregistry.so, libreact_render_core.so, libreact_render_debug.so, libreact_render_graphics.so, libreact_render_imagemanager.so, libreact_render_leakchecker.so, libreact_render_mapbuffer.so, libreact_render_mounting.so, libreact_render_runtimescheduler.so, libreact_render_scheduler.so, libreact_render_telemetry.so, libreact_render_templateprocessor.so, libreact_render_textlayoutmanager.so, libreact_render_uimanager.so, libreact_utils.so, libreactconfig.so, libreactnativeblob.so, libreactnativejni.so, libreactnativeutilsjni.so, libreactperfloggerjni.so, librrc_image.so, librrc_modal.so, librrc_progressbar.so, librrc_root.so, librrc_scrollview.so, librrc_slider.so, librrc_switch.so, librrc_text.so, librrc_textinput.so, librrc_unimplementedview.so, librrc_view.so, libturbomodulejsijni.so, libyoga.so.

> Task :app:processDebugResources
> Task :react-native-svg:extractDebugAnnotations
> Task :react-native-svg:mergeDebugGeneratedProguardFiles
> Task :react-native-svg:mergeDebugConsumerProguardFiles
> Task :react-native-svg:syncDebugLibJars
> Task :react-native-svg:bundleDebugAar
> Task :react-native-svg:compileDebugSources
> Task :react-native-svg:assembleDebug
Note: /app/android/app/src/debug/java/com/card/ReactNativeFlipper.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.

> Task :app:compileDebugJavaWithJavac

> Task :app:compileDebugSources
> Task :app:dexBuilderDebug
> Task :app:mergeProjectDexDebug
> Task :app:mergeLibDexDebug
> Task :app:packageDebug
> Task :app:assembleDebug

Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.

You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.

See https://docs.gradle.org/7.2/userguide/command_line_interface.html#sec:command_line_warnings

BUILD SUCCESSFUL in 2m 3s
55 actionable tasks: 55 executed

> docker run --rm -v /home/ubuntu/storage/extracted/daniel0ferraz-CardApp/CardApp-a39aed2383dbcb8e87b827f1efc3b26b11367820:/source:ro -v /home/ubuntu/BachelorsThesis/scripts/RN/output/daniel0ferraz-CardApp:/output -v /home/ubuntu/.npm:/root/.npm react-android:22-jdk11 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
                    
yarn install v1.22.22
[1/4] Resolving packages...
[2/4] Fetching packages...
[3/4] Linking dependencies...
warning "react-native > react-native-codegen > jscodeshift@0.11.0" has unmet peer dependency "@babel/preset-env@^7.1.6".
warning " > styled-components@5.3.3" has unmet peer dependency "react-dom@>= 16.8.0".
warning " > styled-components@5.3.3" has unmet peer dependency "react-is@>= 16.8.0".
[4/4] Building fresh packages...
Done in 30.89s.
sed: -e expression #1, char 37: unterminated `s' command
> Task :app:generatePackageList
> Task :app:preBuild
> Task :app:extractProguardFiles
> Task :app:preReleaseBuild
> Task :react-native-svg:preBuild UP-TO-DATE
> Task :react-native-svg:preReleaseBuild UP-TO-DATE
> Task :react-native-svg:compileReleaseAidl NO-SOURCE
> Task :app:compileReleaseAidl NO-SOURCE
> Task :react-native-svg:packageReleaseRenderscript NO-SOURCE
> Task :app:compileReleaseRenderscript NO-SOURCE
> Task :app:generateReleaseBuildConfig
> Task :app:javaPreCompileRelease
> Task :app:writeReleaseApplicationId
> Task :app:analyticsRecordingRelease
> Task :react-native-svg:writeReleaseAarMetadata
> Task :app:bundleReleaseJsAndAssets
Execution optimizations have been disabled for task ':app:bundleReleaseJsAndAssets' to ensure correctness due to the following reasons:
  - Gradle detected a problem with the following location: '/app'. Reason: Task ':app:bundleReleaseJsAndAssets' uses this output of task ':react-native-svg:compileReleaseAidl' without declaring an explicit or implicit dependency. This can lead to incorrect results being produced, depending on what order the tasks are executed. Please refer to https://docs.gradle.org/7.2/userguide/validation_problems.html#implicit_dependency for more details about this problem.
  - Gradle detected a problem with the following location: '/app'. Reason: Task ':app:bundleReleaseJsAndAssets' uses this output of task ':react-native-svg:packageReleaseRenderscript' without declaring an explicit or implicit dependency. This can lead to incorrect results being produced, depending on what order the tasks are executed. Please refer to https://docs.gradle.org/7.2/userguide/validation_problems.html#implicit_dependency for more details about this problem.
  - Gradle detected a problem with the following location: '/app'. Reason: Task ':app:bundleReleaseJsAndAssets' uses this output of task ':react-native-svg:writeReleaseAarMetadata' without declaring an explicit or implicit dependency. This can lead to incorrect results being produced, depending on what order the tasks are executed. Please refer to https://docs.gradle.org/7.2/userguide/validation_problems.html#implicit_dependency for more details about this problem.
warning: the transform cache was reset.
                    Welcome to Metro!
              Fast - Scalable - Integrated


TypeError: Cannot read properties of undefined (reading 'transformFile')
    at Bundler.transformFile (/app/node_modules/metro/src/Bundler.js:48:30)
    at async Object.transform (/app/node_modules/metro/src/lib/transformHelpers.js:101:12)
    at async processModule (/app/node_modules/metro/src/DeltaBundler/traverseDependencies.js:137:18)
    at async traverseDependenciesForSingleFile (/app/node_modules/metro/src/DeltaBundler/traverseDependencies.js:131:3)
    at async Promise.all (index 0)
    at async initialTraverseDependencies (/app/node_modules/metro/src/DeltaBundler/traverseDependencies.js:114:3)
    at async DeltaCalculator._getChangedDependencies (/app/node_modules/metro/src/DeltaBundler/DeltaCalculator.js:164:25)
    at async DeltaCalculator.getDelta (/app/node_modules/metro/src/DeltaBundler/DeltaCalculator.js:94:16)
    at async DeltaBundler.buildGraph (/app/node_modules/metro/src/DeltaBundler.js:50:5)
    at async IncrementalBundler.buildGraphForEntries (/app/node_modules/metro/src/IncrementalBundler.js:80:19)
info Run CLI with --verbose flag for more details.
Failed to construct transformer:  Error: error:0308010C:digital envelope routines::unsupported
    at new Hash (node:internal/crypto/hash:101:19)
    at Object.createHash (node:crypto:139:10)
    at stableHash (/app/node_modules/metro-cache/src/stableHash.js:19:8)
    at Object.getCacheKey (/app/node_modules/metro-transform-worker/src/index.js:593:7)
    at getTransformCacheKey (/app/node_modules/metro/src/DeltaBundler/getTransformCacheKey.js:24:19)
    at new Transformer (/app/node_modules/metro/src/DeltaBundler/Transformer.js:48:9)
    at /app/node_modules/metro/src/Bundler.js:22:29 {
  opensslErrorStack: [
    'error:03000086:digital envelope routines::initialization error',
    'error:0308010C:digital envelope routines::unsupported'
  ],
  library: 'digital envelope routines',
  reason: 'unsupported',
  code: 'ERR_OSSL_EVP_UNSUPPORTED'
}
error Cannot read properties of undefined (reading 'transformFile').

> Task :app:bundleReleaseJsAndAssets FAILED

Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.

You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.


FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:bundleReleaseJsAndAssets'.
> Process 'command 'node'' finished with non-zero exit value 1

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org
See https://docs.gradle.org/7.2/userguide/command_line_interface.html#sec:command_line_warnings

Execution optimizations have been disabled for 1 invalid unit(s) of work during this build to ensure correctness.
Please consult deprecation warnings for more details.

BUILD FAILED in 1m 14s
8 actionable tasks: 8 executed

> echo Build failed with Node 22 and jdk version 11 with the following error: Command '['docker', 'run', '--rm', '-v', '/home/ubuntu/storage/extracted/daniel0ferraz-CardApp/CardApp-a39aed2383dbcb8e87b827f1efc3b26b11367820:/source:ro', '-v', '/home/ubuntu/BachelorsThesis/scripts/RN/output/daniel0ferraz-CardApp:/output', '-v', '/home/ubuntu/.npm:/root/.npm', 'react-android:22-jdk11', 'bash', '-c', '\n                set -e\n\n                cp -r /source/. /app &&                 cd /app && \n                # ---- install deps (yarn or npm) ----\n                if [ -f yarn.lock ]; then\n                    yarn install;\n                else\n                    npm install --ignore-scripts;\n                fi && \n                # ---- stub missing parent package.json (monorepo metro configs) ----\n                [ ! -f ../package.json ] && cp package.json ../package.json 2>/dev/null || true && \n                # ---- patch toReversed (Node <20 compat) ----\n                find node_modules -name "loadConfig.js" -path "*/metro-config/*" -exec sed -i \'s/\\.toReversed()/.slice().reverse()/g\' {} \\; 2>/dev/null || true && \n                # ---- patch missing expo/AppEntry ----\n                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 && \n                # ---- patch broken metro config (ESM-only, null-returning, or monorepo-only) ----\n                # NOTE: do NOT replace configs that merely use expo/metro-config — those carry\n                # Expo-specific resolver paths (watchFolders, extraNodeModules) needed for\n                # packages like @react-native-masked-view/masked-view to resolve.\n                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");\nmodule.exports = mergeConfig(getDefaultConfig(__dirname), {});\n\' > metro.config.js;                     else                         printf \'const {getDefaultConfig} = require("metro-config");\nmodule.exports = getDefaultConfig(__dirname);\n\' > metro.config.js;                     fi;                 fi && \n                # ---- stub missing google-services.json (Firebase/Expo prebuild) ----\n                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 && \n                # ---- detect expo ----\n                if grep -q \'"expo"\' package.json && [ ! -d android ]; then\n                    echo "Expo project detected";\n                    CI=1 npx --yes expo prebuild --platform android\n                fi && \n                # ---- fix expo/metro-config: serializer + Flow transformIgnorePatterns ----\n                # Runs AFTER prebuild because prebuild generates metro.config.js for managed-workflow\n                # projects — patching before prebuild would be overwritten by the generated file.\n                # Fix 1: remove customSerializer that returns JS string instead of JSON\n                #   ("var __BUND..." → "Serializer did not return expected format").\n                # Fix 2: add transformIgnorePatterns so expo/src/Expo.ts goes through Babel\n                #   (default pattern excludes all node_modules → raw Flow types → SyntaxError).\n                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 && \n                # ---- stub missing metro watchFolders paths ----\n                mkdir -p /src 2>/dev/null || true && \n                # ---- fix babel configs that use react-native-builder-bob ----\n                # builder-bob is a library-dev tool; its getConfig() throws "Couldn\'t determine the source\n                # directory" when built outside the library\'s own workspace. Replace with a standard preset.\n                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"]};};\n\' > 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 && \n                # ---- ensure TypeScript babel support (fixes \'interface\' SyntaxError in metro bundling) ----\n                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"]};};\n\' > babel.config.js;                 fi && \n                # ---- stub missing-asset-registry-path (Metro virtual module not resolved in release) ----\n                # Metro normally aliases this to @react-native/assets-registry/registry at bundle time.\n                # When that alias is missing, any PNG asset in node_modules triggers "Unable to resolve module".\n                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 && \n                # ---- stub @react-native-masked-view/masked-view if missing ----\n                # Required by @react-navigation/elements but often not installed as a direct dependency.\n                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 && \n                export PATH="/app/node_modules/.bin:$PATH" &&                 cd android && \n                chmod +x gradlew && \n                # ---- inject fallback repositories via Gradle init script ----\n                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 && \n                # ---- patch settings.gradle to use local react-native CLI (avoids npx failures) ----\n                sed -i \'s/autolinkLibrariesWithCommand()/autolinkLibrariesWithCommand("node node_modules\\/.bin\\/react-native config")/\' settings.gradle 2>/dev/null || true && \n                # ---- disable Sentry source map upload (no credentials in CI) ----\n                export SENTRY_DISABLE_AUTO_UPLOAD=true &&                 echo "sentryUploadEnabled=false" >> gradle.properties 2>/dev/null || true && \n                # ---- enable ABI splits ----\n                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 && \n                # ---- enable R8 ----\n                sed -i \'s/enableProguardInReleaseBuilds = false/enableProguardInReleaseBuilds = true/\' app/build.gradle || true && \n                # ---- sign release with debug key ----\n                sed -i \'/buildTypes/,/}/s/release {/release {\n            signingConfig signingConfigs.debug/\' app/build.gradle || true && \n                # ---- pre-resolve AAR transforms so CMake finds prefab paths ----\n                ./gradlew :app:dependencies --configuration releaseCompileClasspath --no-daemon > /dev/null 2>&1 || true && \n                # ---- build release apk ----\n                ./gradlew assembleRelease --no-daemon || exit 1 &&                     \n                APK_PATH="app/build/outputs/apk/release"\n\n                if ! ls $APK_PATH/*.apk 1> /dev/null 2>&1; then\n                    echo "ERROR: APK not generated"\n                    exit 1\n                fi\n\n                # ---- copy output ----\n                cp app/build/outputs/apk/release/*.apk /output/r8/\n\n                # ---- copy TPL metadata ----\n                [ -f ../package.json ] && cp ../package.json /output/r8/ || true\n                [ -f ../package-lock.json ] && cp ../package-lock.json /output/r8/ || true\n                [ -f ../yarn.lock ] && cp ../yarn.lock /output/r8/ || true\n                [ -f ../pnpm-lock.yaml ] && cp ../pnpm-lock.yaml /output/r8/ || true\n                [ -f app/build.gradle ] && cp app/build.gradle /output/r8/android-build.gradle || true\n                [ -f build.gradle ] && cp build.gradle /output/r8/root-build.gradle || true\n                [ -f build.gradle.kts ] && cp build.gradle.kts /output/r8/root-build.gradle.kts || true\n                [ -f settings.gradle ] && cp settings.gradle /output/r8/ || true\n                [ -f settings.gradle.kts ] && cp settings.gradle.kts /output/r8/ || true\n                [ -f gradle/libs.versions.toml ] && cp gradle/libs.versions.toml /output/r8/ || true\n                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\n                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\n                mkdir -p /output/r8/libs\n                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\n                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\n                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\n                    ']' returned non-zero exit status 1.
Build failed with Node 22 and jdk version 11 with the following error: Command '['docker', 'run', '--rm', '-v', '/home/ubuntu/storage/extracted/daniel0ferraz-CardApp/CardApp-a39aed2383dbcb8e87b827f1efc3b26b11367820:/source:ro', '-v', '/home/ubuntu/BachelorsThesis/scripts/RN/output/daniel0ferraz-CardApp:/output', '-v', '/home/ubuntu/.npm:/root/.npm', 'react-android:22-jdk11', 'bash', '-c', '\n                set -e\n\n                cp -r /source/. /app &&                 cd /app && \n                # ---- install deps (yarn or npm) ----\n                if [ -f yarn.lock ]; then\n                    yarn install;\n                else\n                    npm install --ignore-scripts;\n                fi && \n                # ---- stub missing parent package.json (monorepo metro configs) ----\n                [ ! -f ../package.json ] && cp package.json ../package.json 2>/dev/null || true && \n                # ---- patch toReversed (Node <20 compat) ----\n                find node_modules -name "loadConfig.js" -path "*/metro-config/*" -exec sed -i \'s/\\.toReversed()/.slice().reverse()/g\' {} \\; 2>/dev/null || true && \n                # ---- patch missing expo/AppEntry ----\n                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 && \n                # ---- patch broken metro config (ESM-only, null-returning, or monorepo-only) ----\n                # NOTE: do NOT replace configs that merely use expo/metro-config — those carry\n                # Expo-specific resolver paths (watchFolders, extraNodeModules) needed for\n                # packages like @react-native-masked-view/masked-view to resolve.\n                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");\nmodule.exports = mergeConfig(getDefaultConfig(__dirname), {});\n\' > metro.config.js;                     else                         printf \'const {getDefaultConfig} = require("metro-config");\nmodule.exports = getDefaultConfig(__dirname);\n\' > metro.config.js;                     fi;                 fi && \n                # ---- stub missing google-services.json (Firebase/Expo prebuild) ----\n                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 && \n                # ---- detect expo ----\n                if grep -q \'"expo"\' package.json && [ ! -d android ]; then\n                    echo "Expo project detected";\n                    CI=1 npx --yes expo prebuild --platform android\n                fi && \n                # ---- fix expo/metro-config: serializer + Flow transformIgnorePatterns ----\n                # Runs AFTER prebuild because prebuild generates metro.config.js for managed-workflow\n                # projects — patching before prebuild would be overwritten by the generated file.\n                # Fix 1: remove customSerializer that returns JS string instead of JSON\n                #   ("var __BUND..." → "Serializer did not return expected format").\n                # Fix 2: add transformIgnorePatterns so expo/src/Expo.ts goes through Babel\n                #   (default pattern excludes all node_modules → raw Flow types → SyntaxError).\n                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 && \n                # ---- stub missing metro watchFolders paths ----\n                mkdir -p /src 2>/dev/null || true && \n                # ---- fix babel configs that use react-native-builder-bob ----\n                # builder-bob is a library-dev tool; its getConfig() throws "Couldn\'t determine the source\n                # directory" when built outside the library\'s own workspace. Replace with a standard preset.\n                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"]};};\n\' > 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 && \n                # ---- ensure TypeScript babel support (fixes \'interface\' SyntaxError in metro bundling) ----\n                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"]};};\n\' > babel.config.js;                 fi && \n                # ---- stub missing-asset-registry-path (Metro virtual module not resolved in release) ----\n                # Metro normally aliases this to @react-native/assets-registry/registry at bundle time.\n                # When that alias is missing, any PNG asset in node_modules triggers "Unable to resolve module".\n                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 && \n                # ---- stub @react-native-masked-view/masked-view if missing ----\n                # Required by @react-navigation/elements but often not installed as a direct dependency.\n                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 && \n                export PATH="/app/node_modules/.bin:$PATH" &&                 cd android && \n                chmod +x gradlew && \n                # ---- inject fallback repositories via Gradle init script ----\n                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 && \n                # ---- patch settings.gradle to use local react-native CLI (avoids npx failures) ----\n                sed -i \'s/autolinkLibrariesWithCommand()/autolinkLibrariesWithCommand("node node_modules\\/.bin\\/react-native config")/\' settings.gradle 2>/dev/null || true && \n                # ---- disable Sentry source map upload (no credentials in CI) ----\n                export SENTRY_DISABLE_AUTO_UPLOAD=true &&                 echo "sentryUploadEnabled=false" >> gradle.properties 2>/dev/null || true && \n                # ---- enable ABI splits ----\n                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 && \n                # ---- enable R8 ----\n                sed -i \'s/enableProguardInReleaseBuilds = false/enableProguardInReleaseBuilds = true/\' app/build.gradle || true && \n                # ---- sign release with debug key ----\n                sed -i \'/buildTypes/,/}/s/release {/release {\n            signingConfig signingConfigs.debug/\' app/build.gradle || true && \n                # ---- pre-resolve AAR transforms so CMake finds prefab paths ----\n                ./gradlew :app:dependencies --configuration releaseCompileClasspath --no-daemon > /dev/null 2>&1 || true && \n                # ---- build release apk ----\n                ./gradlew assembleRelease --no-daemon || exit 1 &&                     \n                APK_PATH="app/build/outputs/apk/release"\n\n                if ! ls $APK_PATH/*.apk 1> /dev/null 2>&1; then\n                    echo "ERROR: APK not generated"\n                    exit 1\n                fi\n\n                # ---- copy output ----\n                cp app/build/outputs/apk/release/*.apk /output/r8/\n\n                # ---- copy TPL metadata ----\n                [ -f ../package.json ] && cp ../package.json /output/r8/ || true\n                [ -f ../package-lock.json ] && cp ../package-lock.json /output/r8/ || true\n                [ -f ../yarn.lock ] && cp ../yarn.lock /output/r8/ || true\n                [ -f ../pnpm-lock.yaml ] && cp ../pnpm-lock.yaml /output/r8/ || true\n                [ -f app/build.gradle ] && cp app/build.gradle /output/r8/android-build.gradle || true\n                [ -f build.gradle ] && cp build.gradle /output/r8/root-build.gradle || true\n                [ -f build.gradle.kts ] && cp build.gradle.kts /output/r8/root-build.gradle.kts || true\n                [ -f settings.gradle ] && cp settings.gradle /output/r8/ || true\n                [ -f settings.gradle.kts ] && cp settings.gradle.kts /output/r8/ || true\n                [ -f gradle/libs.versions.toml ] && cp gradle/libs.versions.toml /output/r8/ || true\n                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\n                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\n                mkdir -p /output/r8/libs\n                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\n                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\n                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\n                    ']' returned non-zero exit status 1.
