有许多旧的SO线程处理在Android上运行NodeJS.其中大多数不再可行(JXCore)和/或提供令人困惑,过时,不完整或错误的信息.
因此,我调查了目前(截至2017年8月)可行的方法,并找到了三个可能的候选人.
要在他们之间做出决定,我想知道:
可行的方法是:
除此之外,我还找到了许多相关的有趣资源:
我尝试在Nexus 9上使用本机库运行应用程序.
应用程序退出并显示错误消息:
java.lang.UnsatisfiedLinkError: dlopen failed: "lib_xyz.so" is 32-bit instead of 64-bit
Run Code Online (Sandbox Code Playgroud)
是否有任何已知的解决方法来解决此问题(当然,重新编译库并使apk更大)?
注意:我正在提供这些库,我不能为其他架构制作其他库.
我目前正在移植一个Android应用程序,以反应本机使用本机库,但我只有armeabi可用.到目前为止,原始项目没问题,因为所有x86/x86_64/armeabi-v7a/arm64-v8a设备都支持armeabi.
然后当我从react-native生成一个新项目并包含那些armeabi文件时,在运行apk时找不到一些库.当我解压缩原始项目生成的apk时,我可以找到文件夹:lib/armeabi包含所有库,所以没问题.现在,当我解压由react-native生成的apk时,我有2个文件夹:lib/armeabi-v7a和lib/x86,并且缺少一些库.
这是我的反应原生的gradle配置:
apply from: "../../node_modules/react-native/react.gradle"
/**
* Set this to true to create two separate APKs instead of one:
* - An APK that only works on ARM devices
* - An APK that only works on x86 devices
* The advantage is the size of the APK is reduced by about 4MB.
* Upload all the APKs to the Play Store and people will download
* the correct one based on the CPU …Run Code Online (Sandbox Code Playgroud) 我正在使用 React Native 开发一个 Android 应用程序。有时,在我运行react-native run-android并启动应用程序后,它会挂在白屏上。摇晃我的手机没有任何作用,当我在 VSCode 调试器中单击“暂停”时,它没有任何效果。如果我按主页按钮将应用程序设为后台,然后再次单击该应用程序,它会正常启动并且调试按预期工作。这是一个已知的问题?我能做些什么来修复它?
android reactjs react-native visual-studio-code react-native-android
我刚刚建立了一个全新的 react-native 项目(0.62)。运行新的调试版本工作正常。
我按照文档设置了签名:https://reactnative.dev/docs/signed-apk-android,并确保我使用以下 ABI:"armeabi-v7a", "x86", "arm64-v8a", "x86_64".
为了测试发布版本,我运行以下命令: npx react-native run-android --variant release
运行上述命令后,应用程序尝试启动并立即崩溃并显示以下堆栈跟踪:
--------- beginning of crash
2020-05-01 09:34:26.707 19961-19976/? E/AndroidRuntime: FATAL EXCEPTION: create_react_context
Process: <BUNDLE_ID>, PID: 19961
java.lang.UnsatisfiedLinkError: couldn't find DSO to load: libhermes.so
at com.facebook.soloader.SoLoader.doLoadLibraryBySoName(SoLoader.java:789)
at com.facebook.soloader.SoLoader.loadLibraryBySoName(SoLoader.java:639)
at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:577)
at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:525)
Run Code Online (Sandbox Code Playgroud)
果然,当我解包 APK 时,里面没有 libhermes.so /lib/x86_64(我目前正在像素 2 API 28 上进行测试)。
我不确定为什么 Hermes 没有被启用,但只是为了确保我在 build.grade 中设置了以下内容:
project.ext.react = [
enableHermes: true, // clean and rebuild if changing
]
Run Code Online (Sandbox Code Playgroud)
现在在清洁和建造之后我确实看到了libhermes.so。不幸的是,我仍然看到同样的问题。但是我可以看到该文件存在。 …
android ×5
react-native ×4
32bit-64bit ×1
android-ndk ×1
java ×1
javascript ×1
node.js ×1
reactjs ×1