JaneaSystems / nodejs-mobile-gyp

Fork of https://github.com/nodejs/node-gyp
MIT License
8 stars 7 forks source link

how to build on Android and iOS #7

Open blueye opened 4 years ago

blueye commented 4 years ago

I'm trying to build leveldown which can working with nodejs-mobile using nodejs-mobile-gyp. I'm very confused with how to build on Android and iOS. There is no docs about it. I have run following commands on ubuntu. As a result, it still built x86 arch which runs on linux. Could you help me with how should I use the nodejs-mobile-gyp?

nodjs-mobile-gyp configure --dest-os=android --dest-cpu=arm
nodjs-mobile-gyp build --dest-os=android --dest-cpu=arm

and

nodjs-mobile-gyp configure --arch=arm
nodjs-mobile-gyp build --arch=arm
jaimecbernardo commented 4 years ago

Hi @blueye , The way we are using nodejs-mobile-gyp is through the react-native and cordova plugins, which have to set environment variables when using npm rebuild --build-from-source to set the current node_gyp and node_headers, among other things.

Here's an example of how it's done by nodejs-mobile-react-native for ios: https://github.com/JaneaSystems/nodejs-mobile-react-native/blob/651425964f77a0520ba7c34c7cd6783b0ac1b6cf/scripts/ios-build-native-modules.sh#L50

Here's an example of how it's done by nodejs-mobile-react-native for android: https://github.com/JaneaSystems/nodejs-mobile-react-native/blob/651425964f77a0520ba7c34c7cd6783b0ac1b6cf/android/build.gradle#L368-L407

Linoy339 commented 4 years ago

HI all,

Do we have any solution for this?

I am trying to establish offline db using pouch db in mobile. I have an application which uses node express and pouch db. Its running well in my pc. I was able to take a build using webpack and tried in android/ios, which is not working. IOS Error: Error: No native build was found for platform=ios arch=arm64 runtime=node abi=57 uv=1 armv=8 libc=glibc at load.path (/private/var/mobile/Containers/Data/Application/74907299-A8BC-40E0-98CC-A5D65DDA491C/Documents/nodejs-project/api/node_modules/node-gyp-build/index.js:56:3)

Android Error: Error: dlopen failed: cannot locate symbol "napi_get_global" referenced by "/data/data/digital.lamp.mindlamp/files/lampBuild/api/node_modules/leveldown/prebuilds/android-arm64/node.napi.armv8.node"...

Any help would be appreciated

jaimecbernardo commented 4 years ago

You need to build leveldown against nodejs-mobile. Did you try the information from the previous comment?

Linoy339 commented 4 years ago

@jaimecbernardo I have tried. But mine is a native app which uses kotlene/swift. Native module compiling of leveldown seems complicated in this. I tried with the commands above. But not worked

jaimecbernardo commented 4 years ago

Hi @Linoy339 , In this comment , it links to parts of the way the plugins compile native modules, by setting environment variables that are picked up by npm to call the right gyp, use the nodejs-mobile headers, set the right architectures... Here are those links again: https://github.com/JaneaSystems/nodejs-mobile-react-native/blob/651425964f77a0520ba7c34c7cd6783b0ac1b6cf/scripts/ios-build-native-modules.sh#L50 https://github.com/JaneaSystems/nodejs-mobile-react-native/blob/651425964f77a0520ba7c34c7cd6783b0ac1b6cf/android/build.gradle#L368-L407

buu700 commented 3 years ago

@jaimecbernardo Is the behavior you referenced from nodejs-mobile-react-native also present in nodejs-mobile-cordova?

I'm also having issues with leveldown in nodejs-mobile-cordova, as well as with rocksdb and the leveldown-nodejs-mobile fork: https://github.com/staltz/leveldown-nodejs-mobile/issues/1#issuecomment-907706645

Error: dlopen failed: "/data/data/com.cyph.test/files/www/nodejs-project/node_modules/leveldown-nodejs-mobile/build/Release/leveldown.node" has bad ELF magic: cffaedfe

fastalks commented 1 year ago

Hi @blueye , The way we are using nodejs-mobile-gyp is through the react-native and cordova plugins, which have to set environment variables when using npm rebuild --build-from-source to set the current node_gyp and node_headers, among other things.

Here's an example of how it's done by nodejs-mobile-react-native for ios: https://github.com/JaneaSystems/nodejs-mobile-react-native/blob/651425964f77a0520ba7c34c7cd6783b0ac1b6cf/scripts/ios-build-native-modules.sh#L50

Here's an example of how it's done by nodejs-mobile-react-native for android: https://github.com/JaneaSystems/nodejs-mobile-react-native/blob/651425964f77a0520ba7c34c7cd6783b0ac1b6cf/android/build.gradle#L368-L407

hi @jaimecbernardo

I use nodejs-mobile-react-native for my android project ,and ../nodejs-assets/BUILD_NATIVE_MODULES.txt has been set 1 ,but I still got this error!

W/Thread-10: type=1400 audit(0.0:38498): avc: granted { execute } for path="/data/data/com.awesomeproject/files/nodejs-project/node_modules/classic-level/build/Release/node.napi.armv8.node" dev="sdd74" ino=188861 scontext=u:r:untrusted_app:s0:c212,c257,c512,c768 tcontext=u:object_r:app_data_file:s0:c212,c257,c512,c768 tclass=file app=com.awesomeproject E/nodejs: node:internal/modules/cjs/loader:1210 E/nodejs: return process.dlopen(module, path.toNamespacedPath(filename)); E/nodejs: ^ E/nodejs: E/nodejs: Error: dlopen failed: cannot locate symbol "napi_add_env_cleanup_hook" referenced by "/data/data/com.awesomeproject/files/nodejs-project/node_modules/classic-level/build/Release/node.napi.armv8.node"... E/nodejs: at Object.Module._extensions..node (node:internal/modules/cjs/loader:1210:18) E/nodejs: at Module.load (node:internal/modules/cjs/loader:1004:32) E/nodejs: at Function.Module._load (node:internal/modules/cjs/loader:839:12) E/nodejs: at Module.require (node:internal/modules/cjs/loader:1028:19) E/nodejs: at require (node:internal/modules/cjs/helpers:102:18) E/nodejs: at load (/data/data/com.awesomeproject/files/nodejs-project/node_modules/node-gyp-build/node-gyp-build.js:22:10) E/nodejs: at Object.<anonymous> (/data/data/com.awesomeproject/files/nodejs-project/node_modules/classic-level/binding.js:1:43) E/nodejs: at Module._compile (node:internal/modules/cjs/loader:1126:14) E/nodejs: at Object.Module._extensions..js (node:internal/modules/cjs/loader:1180:10) E/nodejs: at Module.load (node:internal/modules/cjs/loader:1004:32) { E/nodejs: code: 'ERR_DLOPEN_FAILED' E/nodejs: } I/BpBinder: onLastStrongRef automatically unlinking death recipients: <uncached descriptor> E/NODEJS-MOBILE: exiting due to SIG_DFL handler for signal 11 A/libc: exiting due to SIG_DFL handler for signal 11 A/libc: Fatal signal 6 (SIGABRT), code -1 (SI_QUEUE) in tid 17548 (FlipperEventBas), pid 17458 (.awesomeproject)