web-dev-qa-db-fra.com

React expression native Java.lang.UnsatisfiedLinkError: dlopen a échoué: "/data/data/{package}/lib-main/libgnustl_shared.so" est 32 bits au lieu de 64 bits

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.

15
Ishan Dhingra

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

1
Dishant Walia
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
0
Balaji