J'essaie d'intégrer React Native avec mon Android App. J'obtiens l'exception suivante, lors de l'initialisation React Écran natif:
Java.lang.UnsatisfiedLinkError: échec de dlopen: "/data/data/com.snapdeal.main/lib-main/libgnustl_shared.so" est 32 bits au lieu de 64 bits
L'application ne plante que sur les appareils 64 bits.
Selon mon apprentissage jusqu'à présent, j'ai trouvé cela problème signalé sur React Native Repo, mais la solution suggérée dans ce fil est pas utile car je n'utilise aucune bibliothèque externe SO dans l'application existante.
En dehors de ce qui précède, j'ai réalisé une autre différence dans la structure de la bibliothèque sur l'appareil sur lequel mon application est installée. Je compare la structure de mon application par rapport à l'application de démonstration native React.
Application de démonstration React
root@generic_x86_64:**/data/data/com.react.demo/lib** # ls
libfb.so
libfolly_json.so
libglog.so
libglog_init.so
libgnustl_shared.so
libicu_common.so
libimagepipeline.so
libjsc.so
libreactnativejni.so
libreactnativejnifb.so
root@generic_x86_64:/data/data/**com.react.demo**/lib-main # ls
dso_deps
dso_lock
dso_manifest
dso_state
Mon application
root@generic_x86_64:/data/data/**com.my.app**/lib-main # ls
dso_deps
dso_lock
dso_manifest
dso_state
libfb.so
libfolly_json.so
libglog.so
libglog_init.so
libgnustl_shared.so
libicu_common.so
libimagepipeline.so
libjsc.so
libreactnativejni.so
libreactnativejnifb.so
Partager quelques détails supplémentaires sur mon projet:
package.json
{
"name": "projectname",
"version": "1.0.0",
"description": "Native NPM",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node node_modules/react-native/local-cli/cli.js start"
},
"repository": {
"type": "git",
"url": ""
},
"author": "Ishan D",
"license": "ISC",
"dependencies": {
"react": "^15.3.2",
"react-native": "^0.37.0",
"react-native-linear-gradient": "^1.5.15",
"rn-viewpager": "^1.1.3"
},
"devDependencies": {}
}
dépendances utilisées dans Android projet natif
ext {
compileSdkVersion = 24
buildToolsVersion = '24.0.2'
minSdkVersion = 16
targetSdkVersion = 24
supportLibrariesVersion = '23.0.1'
playServiceVersion = '9.0.2'
dep = [
fabricPlugin : 'io.fabric',
fabricMavenUrl : 'https://maven.fabric.io/public',
fabricClasspath : 'io.fabric.tools:gradle:1.+',
playServiceClasspath : 'com.google.gms:google-services:1.3.0-beta1',
playServicePlugin : 'com.google.gms.google-services',
playServiceAppindexing: "com.google.Android.gms:play-services-appindexing:$playServiceVersion",
playServiceLocation : "com.google.Android.gms:play-services-location:$playServiceVersion",
playServiceVision : "com.google.Android.gms:play-services-vision:$playServiceVersion",
playServiceAuth : "com.google.Android.gms:play-services-auth:$playServiceVersion",
playServiceBase : "com.google.Android.gms:play-services-base:$playServiceVersion",
playServiceIdentity : "com.google.Android.gms:play-services-identity:$playServiceVersion",
playServiceAnalytics : "com.google.Android.gms:play-services-analytics:$playServiceVersion",
playServiceGcm : "com.google.Android.gms:play-services-gcm:$playServiceVersion",
underCouchClasspath : 'de.undercouch:gradle-download-task:2.0.0',
underCouchPluigin : 'de.undercouch.download',
crashlytics : 'com.crashlytics.sdk.Android:crashlytics:2.4.0@aar',
moengage : 'com.moengage:moe-Android-sdk:6.0.29',
supportV4 : "com.Android.support:support-v4:$supportLibrariesVersion",
supportAppCompatV7 : "com.Android.support:appcompat-v7:$supportLibrariesVersion",
supportCardviewV7 : "com.Android.support:cardview-v7:$supportLibrariesVersion",
supportDesignV7 : "com.Android.support:design:$supportLibrariesVersion",
okhttp : 'com.squareup.okhttp:okhttp:2.5.0',
junit : 'junit:junit:4.12',
mockito : 'org.mockito:mockito-core:1.10.19'
]
}
Tout indice est apprécié.
PS: Je sais que react-native prend en charge les binaires 64 bits et je n'utilise aucune bibliothèque externe.
React Native ne fournit pas de version 64 bits du code natif et le système revient toujours à 32 bits. Ils ont résolu ce problème et sont devrait faire partie du RN 0.59 release
Réf: https://github.com/facebook/react-native/issues/2814#issuecomment-457644191
Using RN 0.60.5 version.
If you guys are wondering why your app crashes if you download it from playstore, make the below changes
**packagingOptions {
exclude '/lib/mips64/'
exclude '/lib/arm64-v8a/'
exclude '/lib/x86_64/**'
//In pickFirst, replace the library name with the library that is causing error.
pickFirst '/lib/x86/libgnustl_shared.so'
pickFirst '/lib/armeabi-v7a/libgnustl_shared.so'
}**
REASON - We are excluding all 64 bit libraries so that OS will not have confusion of which library to pick.
If you do not know which library is causing the crash, upload your bundle in Firebase test lab and then check. It will tell you which library is throwing the error