2016-11-19 69 views
5

Próbuję zintegrować React Native z moja istniejąca aplikacja na Androida. Otrzymuję następujący wyjątek, gdy initilizing React Native ekran:Reaguj na natywny expection java.lang.UnsatisfiedLinkError: dlopen failed: "/data/data/{package}/lib-main/libgnustl_shared.so" jest 32-bitowy zamiast 64-bitowego

java.lang.UnsatisfiedLinkError: dlopen failed: "/data/data/com.snapdeal.main/lib-main/libgnustl_shared.so" is 32-bit instead of 64-bit

Aplikacja jest upaść tylko na urządzeniach 64-bitowych.

Jak na moje uczenie się tak daleko, Znalazłem ten issue zgłaszane na React Native Repo, ale solution sugerowane w tym wątku nie jest pomocne, jak nie używam dowolny zewnętrzny SO bibliotekę w istniejącej aplikacji.

Oprócz powyższego zauważyłem inną różnicę w strukturze biblioteki na urządzeniu, na którym zainstalowana jest moja aplikacja. Porównuję strukturę mojej aplikacji i reaguję na natywną aplikację demo.

React demo App

[email protected]_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 

[email protected]_x86_64:/data/data/**com.react.demo**/lib-main # ls 
dso_deps 
dso_lock 
dso_manifest 
dso_state 

My App

[email protected]_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 

Dzielenie jeszcze kilka szczegółów na temat mojego projektu:

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": {} 
} 

zależności stosowane w android rodzimym projekcie

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:[email protected]', 

      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' 
    ] 
} 

Każda wskazówka jest mile widziana.

PS: Wiem, że native-native obsługuje 64-bitowe pliki binarne i nie używam żadnej zewnętrznej biblioteki.

Odpowiedz

10

Dodaj do następujących aplikacji pliku

defaultConfig { 
.... 

    ndk { 
     abiFilters "armeabi-v7a", "x86", 'armeabi', 'arm64-v8a' 
    } 

    packagingOptions { 
     exclude "lib/arm64-v8a/libgnustl_shared.so" 
    } 
} 

/Gradle również upewnić się, że działa z tego samego portu.

adb reverse tcp:8081 tcp:8081 
+1

zobaczyć również ten problem: https://github.com/facebook/react-native/issues/11027 – ADev

+1

Co portu mają do czynienia z błędem OP? –

+1

również dodać "armeabi" w abiFilters, bez tego nie robi. pracować na niektórych telefonach, takich jak Samsung S7, Facebook powinien zrobić lepiej. zadanie dodania wszystkich filtrów. należy dodać, aby to działało na wszystkich urządzeniach. – amIT