React-native 应用程序在真实 android 设备上崩溃
React-native app crashes on real android device
我正在使用 react-native,目前开始使用 redux 并创建了一个应用程序,但是当我 运行 在模拟器上运行该应用程序时,它工作正常。然后我通过 USB 将我的手机连接到 android 6,它也可以正常工作。但是在 Android 8 的其他设备中它不工作然后我将 targetSdkVersion 更改为 28 然后它也不工作我不明白是什么问题。
以下是我的package.json
{
"name": "Demo",
"version": "0.0.1",
"private": true,
"scripts": {
"start": "node node_modules/react-native/local-cli/cli.js start",
"test": "jest"
},
"dependencies": {
"react": "16.6.3",
"react-native": "^0.57.8",
"react-native-flash-message": "^0.1.10",
"react-native-linear-gradient": "^2.5.3",
"react-native-modal-datetime-picker": "^6.0.0",
"react-native-navigation": "^2.8.0",
"react-native-tab-view": "^1.3.2",
"react-native-vector-icons": "^6.2.0",
"react-redux": "^6.0.1",
"redux": "^4.0.1",
"redux-thunk": "^2.3.0"
},
"devDependencies": {
"babel-core": "^7.0.0-bridge.0",
"babel-jest": "24.0.0",
"jest": "24.0.0",
"metro-react-native-babel-preset": "0.51.1",
"react-test-renderer": "16.6.3"
},
"jest": {
"preset": "react-native"
}
}
android/build.gradle
buildscript {
ext {
buildToolsVersion = "28.0.3"
minSdkVersion = 19
compileSdkVersion = 28
targetSdkVersion = 28
supportLibVersion = "28.0.0"
}
repositories {
google()
mavenLocal()
mavenCentral()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.2.1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
mavenCentral()
mavenLocal()
jcenter()
maven {
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
url "$rootDir/../node_modules/react-native/android"
}
maven { url 'https://jitpack.io' }
}
}
task wrapper(type: Wrapper) {
gradleVersion = '4.7'
distributionUrl = distributionUrl.replace("bin", "all")
}
subprojects { subproject ->
afterEvaluate {
if ((subproject.plugins.hasPlugin('android') || subproject.plugins.hasPlugin('android-library'))) {
android {
variantFilter { variant ->
def names = variant.flavors*.name
if (names.contains("reactNative51") || names.contains("reactNative55")) {
setIgnore(true)
}
}
}
}
}
}
我不知道问题出在哪里。提前致谢
来自 Ahtesham Shah provided in the above chat.
的日志
2019-02-26 21:14:08.898 18689-18732/com.namaztiming E/SoLoader: couldn't find DSO to load: libglog_init.so caused by: couldn't find DSO to load: libglog.so caused by: couldn't find DSO to load: libgnustl_shared.so caused by: dlopen failed: "/data/data/com.namaztiming/lib-main/libgnustl_shared.so" is 32-bit instead of 64-bit
2019-02-26 21:14:08.898 18689-18732/com.namaztiming E/SoLoader: couldn't find DSO to load: libreactnativejni.so caused by: couldn't find DSO to load: libglog_init.so caused by: couldn't find DSO to load: libglog.so caused by: couldn't find DSO to load: libgnustl_shared.so caused by: dlopen failed: "/data/data/com.namaztiming/lib-main/libgnustl_shared.so" is 32-bit instead of 64-bit
2019-02-26 21:14:08.901 18689-18732/com.namaztiming E/AndroidRuntime: FATAL EXCEPTION: Thread-8
Process: com.namaztiming, PID: 18689
java.lang.UnsatisfiedLinkError: couldn't find DSO to load: libreactnativejni.so caused by: couldn't find DSO to load: libglog_init.so caused by: couldn't find DSO to load: libglog.so caused by: couldn't find DSO to load: libgnustl_shared.so caused by: dlopen failed: "/data/data/com.namaztiming/lib-main/libgnustl_shared.so" is 32-bit instead of 64-bit
at com.facebook.soloader.SoLoader.doLoadLibraryBySoName(SoLoader.java:703)
at com.facebook.soloader.SoLoader.loadLibraryBySoName(SoLoader.java:564)
at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:500)
at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:455)
at com.facebook.react.bridge.ReactBridge.staticInit(ReactBridge.java:18)
at com.facebook.react.bridge.NativeMap.<clinit>(NativeMap.java:19)
at com.facebook.react.bridge.JSCJavaScriptExecutorFactory.create(JSCJavaScriptExecutorFactory.java:21)
at com.facebook.react.ReactInstanceManager.run(ReactInstanceManager.java:917)
at java.lang.Thread.run(Thread.java:784)
这些表明错误与以下react-native
issue有关。其中 react-native
在 Android 上不支持 64 位。
problem 有一个解决方案应该添加到 app/build.gradle
。解决方案是定义打包选项。可以这样做。
android {
...
// add the following packagingOptions
packagingOptions {
pickFirst 'lib/x86_64/libjsc.so'
pickFirst 'lib/arm64-v8a/libjsc.so'
}
}
我们还在 app/build.gradle
中的 defaultConfig
添加了以下内容
ndk {
abiFilters 'armeabi-v7a', 'x86'
}
然后我们清理了构建。
然后重启应用。
最佳解决方案是将以下代码添加到您的 app/build.gradle 文件中。
defaultConfig {
...
ndk {
abiFilters "armeabi-v7a", "x86", "arm64-v8a", "x86_64", 'armeabi'
}
packagingOptions {
exclude "lib/arm64-v8a/libgnustl_shared.so"
exclude '/lib/mips64/**'
exclude '/lib/arm64-v8a/**'
exclude '/lib/x86_64/**'
}
}
我正在使用 react-native,目前开始使用 redux 并创建了一个应用程序,但是当我 运行 在模拟器上运行该应用程序时,它工作正常。然后我通过 USB 将我的手机连接到 android 6,它也可以正常工作。但是在 Android 8 的其他设备中它不工作然后我将 targetSdkVersion 更改为 28 然后它也不工作我不明白是什么问题。
以下是我的package.json
{
"name": "Demo",
"version": "0.0.1",
"private": true,
"scripts": {
"start": "node node_modules/react-native/local-cli/cli.js start",
"test": "jest"
},
"dependencies": {
"react": "16.6.3",
"react-native": "^0.57.8",
"react-native-flash-message": "^0.1.10",
"react-native-linear-gradient": "^2.5.3",
"react-native-modal-datetime-picker": "^6.0.0",
"react-native-navigation": "^2.8.0",
"react-native-tab-view": "^1.3.2",
"react-native-vector-icons": "^6.2.0",
"react-redux": "^6.0.1",
"redux": "^4.0.1",
"redux-thunk": "^2.3.0"
},
"devDependencies": {
"babel-core": "^7.0.0-bridge.0",
"babel-jest": "24.0.0",
"jest": "24.0.0",
"metro-react-native-babel-preset": "0.51.1",
"react-test-renderer": "16.6.3"
},
"jest": {
"preset": "react-native"
}
}
android/build.gradle
buildscript {
ext {
buildToolsVersion = "28.0.3"
minSdkVersion = 19
compileSdkVersion = 28
targetSdkVersion = 28
supportLibVersion = "28.0.0"
}
repositories {
google()
mavenLocal()
mavenCentral()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.2.1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
mavenCentral()
mavenLocal()
jcenter()
maven {
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
url "$rootDir/../node_modules/react-native/android"
}
maven { url 'https://jitpack.io' }
}
}
task wrapper(type: Wrapper) {
gradleVersion = '4.7'
distributionUrl = distributionUrl.replace("bin", "all")
}
subprojects { subproject ->
afterEvaluate {
if ((subproject.plugins.hasPlugin('android') || subproject.plugins.hasPlugin('android-library'))) {
android {
variantFilter { variant ->
def names = variant.flavors*.name
if (names.contains("reactNative51") || names.contains("reactNative55")) {
setIgnore(true)
}
}
}
}
}
}
我不知道问题出在哪里。提前致谢
来自 Ahtesham Shah provided in the above chat.
的日志2019-02-26 21:14:08.898 18689-18732/com.namaztiming E/SoLoader: couldn't find DSO to load: libglog_init.so caused by: couldn't find DSO to load: libglog.so caused by: couldn't find DSO to load: libgnustl_shared.so caused by: dlopen failed: "/data/data/com.namaztiming/lib-main/libgnustl_shared.so" is 32-bit instead of 64-bit
2019-02-26 21:14:08.898 18689-18732/com.namaztiming E/SoLoader: couldn't find DSO to load: libreactnativejni.so caused by: couldn't find DSO to load: libglog_init.so caused by: couldn't find DSO to load: libglog.so caused by: couldn't find DSO to load: libgnustl_shared.so caused by: dlopen failed: "/data/data/com.namaztiming/lib-main/libgnustl_shared.so" is 32-bit instead of 64-bit
2019-02-26 21:14:08.901 18689-18732/com.namaztiming E/AndroidRuntime: FATAL EXCEPTION: Thread-8
Process: com.namaztiming, PID: 18689
java.lang.UnsatisfiedLinkError: couldn't find DSO to load: libreactnativejni.so caused by: couldn't find DSO to load: libglog_init.so caused by: couldn't find DSO to load: libglog.so caused by: couldn't find DSO to load: libgnustl_shared.so caused by: dlopen failed: "/data/data/com.namaztiming/lib-main/libgnustl_shared.so" is 32-bit instead of 64-bit
at com.facebook.soloader.SoLoader.doLoadLibraryBySoName(SoLoader.java:703)
at com.facebook.soloader.SoLoader.loadLibraryBySoName(SoLoader.java:564)
at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:500)
at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:455)
at com.facebook.react.bridge.ReactBridge.staticInit(ReactBridge.java:18)
at com.facebook.react.bridge.NativeMap.<clinit>(NativeMap.java:19)
at com.facebook.react.bridge.JSCJavaScriptExecutorFactory.create(JSCJavaScriptExecutorFactory.java:21)
at com.facebook.react.ReactInstanceManager.run(ReactInstanceManager.java:917)
at java.lang.Thread.run(Thread.java:784)
这些表明错误与以下react-native
issue有关。其中 react-native
在 Android 上不支持 64 位。
problem 有一个解决方案应该添加到 app/build.gradle
。解决方案是定义打包选项。可以这样做。
android {
...
// add the following packagingOptions
packagingOptions {
pickFirst 'lib/x86_64/libjsc.so'
pickFirst 'lib/arm64-v8a/libjsc.so'
}
}
我们还在 app/build.gradle
defaultConfig
添加了以下内容
ndk {
abiFilters 'armeabi-v7a', 'x86'
}
然后我们清理了构建。
然后重启应用。
最佳解决方案是将以下代码添加到您的 app/build.gradle 文件中。
defaultConfig {
...
ndk {
abiFilters "armeabi-v7a", "x86", "arm64-v8a", "x86_64", 'armeabi'
}
packagingOptions {
exclude "lib/arm64-v8a/libgnustl_shared.so"
exclude '/lib/mips64/**'
exclude '/lib/arm64-v8a/**'
exclude '/lib/x86_64/**'
}
}