diff --git a/capacitor/config-node.sh b/capacitor/config-node.sh deleted file mode 100644 index 4699edf..0000000 --- a/capacitor/config-node.sh +++ /dev/null @@ -1,48 +0,0 @@ -#!/bin/bash - -# instructions -# Install Android NDK -# Set $ANDROID_NDK_PATH (example: ~/Android/Sdk/ndk/26.1.10909125) -# install other npm packages like normal -# run this script - -toolchain_target_arch=aarch64 -node_target_arch=arm64 -android_api_level=22 -toolchain_folder=$ANDROID_NDK_PATH/toolchains/llvm/prebuilt/linux-x86_64/bin -export LIBNODE_PATH=$(pwd)/git_modules/nodejs-mobile - -export PATH=$toolchain_folder:$PATH - -export CC=$toolchain_folder/${toolchain_target_arch}-linux-android${android_api_level}-clang -export CXX=$toolchain_folder/${toolchain_target_arch}-linux-android${android_api_level}-clang++ -export LINK=$toolchain_folder/${toolchain_target_arch}-linux-android${android_api_level}-clang++ -export AR=$toolchain_folder/llvm-ar - -export npm_config_verbose=1 -export npm_config_nodedir=${LIBNODE_PATH} -export npm_config_node_gyp=$(pwd)/../node_modules/nodejs-mobile-gyp/bin/node-gyp.js -export npm_config_arch=${node_target_arch} -export npm_config_plaform=android -export npm_config_format=make-android -export npm_gyp_defines="target_arch=$node_target_arch v8_target_arch=$node_target_arch android_target_arch=$node_target_arch host_os=linux OS=android" - -#mv node_modules ../node_modules.bak -# --from-from-source is used by node-pre-gyp -cd public/nodejs -npm rebuild --build-from-source -# Remove executable permissions from native node modules -# find node_modules -iname '*.node' -exec chmod -x '{}' \; - -# buildroot=$(pwd)/ncc -# target=arm64-android - -# buildpath="${buildroot}/${target}" -# if [ ! -d "${buildpath}" ]; then -# mkdir -p "${buildpath}" -# fi - -# ncc build --source-map -d --asset-builds --target es2022 -o ${buildpath} src/offline.ts - -# rm -rf node_modules -# mv ../node_modules.bak node_modules diff --git a/capacitor/package.json b/capacitor/package.json index 72301e6..01228b7 100644 --- a/capacitor/package.json +++ b/capacitor/package.json @@ -2,7 +2,7 @@ "name": "capacitor", "private": true, "scripts": { - "postinstall": "cd public/nodejs/ && npm install", + "postinstall": "cd public/nodejs/ && npm install && docker build -t android-build:latest . && docker run -v ${PWD}:/app/ -it android-build:latest /bin/bash /app/setup-deps.sh", "build:app": "cross-env NODE_ENV=production run-s build:web build:assets build:android", "build:web": "webpack build", "build:android": "cap build android", diff --git a/capacitor/public/nodejs/Dockerfile b/capacitor/public/nodejs/Dockerfile new file mode 100644 index 0000000..f51c041 --- /dev/null +++ b/capacitor/public/nodejs/Dockerfile @@ -0,0 +1,23 @@ +FROM alpine:3.19 AS worker + +RUN apk add curl unzip +RUN curl -L https://github.com/nodejs-mobile/nodejs-mobile/releases/download/v18.17.2/nodejs-mobile-v18.17.2-android.zip -o libnode.zip +RUN unzip libnode.zip + +FROM saschpe/android-ndk:33-jdk17.0.8_7-ndk25.2.9519653-cmake3.22.1 + +COPY --from=worker ./nodejs-mobile* /opt/libnode +ENV LIBNODE_PATH=/opt/libnode + +# Install nodejs 18 (same version as nodejs-mobile) +ARG NODE_MAJOR=18 + +RUN apt-get update +RUN apt-get install -y ca-certificates curl gnupg make +RUN mkdir -p /etc/apt/keyrings +RUN curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg +RUN echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list +RUN apt-get update +RUN apt-get install nodejs -y + +WORKDIR /app \ No newline at end of file diff --git a/capacitor/public/nodejs/setup-deps.sh b/capacitor/public/nodejs/setup-deps.sh new file mode 100644 index 0000000..e871835 --- /dev/null +++ b/capacitor/public/nodejs/setup-deps.sh @@ -0,0 +1,54 @@ +#!/bin/bash + +# instructions +# Install Android NDK +# Set $ANDROID_NDK_PATH (example: ~/Android/Sdk/ndk/26.1.10909125) +# Download and extract android .zip for nodejs-mobile from https://github.com/nodejs-mobile/nodejs-mobile/releases/tag/v18.17.2 +# Update LIBNODE_PATH +# npm install nodejs-mobile-gyp +# install other npm packages like normal +# run this script + +if [ -d "node_modules" ]; then + echo "node_modules already exists, skipping npm install" +else + npm install +fi + +toolchain_folder=$NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin +export PATH=$toolchain_folder:$PATH + +toolchain_target_archs=(armv7a aarch64 x86_64) +node_target_arch=(arm arm64 x64) +android_api_levels=(eabi24 "24" "24") + +for ((i=0;i<${#toolchain_target_archs[@]};i++)); do + toolchain_target_arch=${toolchain_target_archs[i]} + node_target_arch=${node_target_arch[i]} + android_api_level=${android_api_levels[i]} + + export CC=$toolchain_folder/${toolchain_target_arch}-linux-android${android_api_level}-clang + export CXX=$toolchain_folder/${toolchain_target_arch}-linux-android${android_api_level}-clang++ + export LINK=$toolchain_folder/${toolchain_target_arch}-linux-android${android_api_level}-clang++ + export AR=$toolchain_folder/llvm-ar + + export npm_config_verbose=1 + export npm_config_nodedir=${LIBNODE_PATH} + export npm_config_node_gyp=$(pwd)/node_modules/nodejs-mobile-gyp/bin/node-gyp.js + export npm_config_arch=${node_target_arch} + export npm_config_plaform=android + export npm_config_format=make-android + export npm_gyp_defines="target_arch=$node_target_arch v8_target_arch=$node_target_arch android_target_arch=$node_target_arch host_os=linux OS=android" + + # --from-from-source is used by node-pre-gyp + echo "Rebuilding for $node_target_arch" + npm rebuild --build-from-source + + for file in node_modules/*/build/Release/*.node; do + package=$(echo "$file" | cut -f 2 -d "/") + echo "moving prebuild for $package ($file)" + mkdir "node_modules/$package/prebuilds/android-$node_target_arch" + mv $file "node_modules/$package/prebuilds/android-$node_target_arch/node.napi.node" + rm -r "node_modules/$package/build/" + done +done \ No newline at end of file diff --git a/common/modules/click.js b/common/modules/click.js index def1540..fb67be5 100644 --- a/common/modules/click.js +++ b/common/modules/click.js @@ -122,12 +122,7 @@ function getFocusableElementPositions () { } function isInViewport ({ top, left, bottom, right }) { - return ( - top >= 0 && - left >= 0 && - bottom <= window.innerHeight && - right <= window.innerWidth - ) + return top >= 0 && left >= 0 && bottom <= window.innerHeight && right <= window.innerWidth } // function isVisible ({ top, left, bottom, right }, element) {