2016-11-19 8 views
5

Я пытаюсь интегрировать React Native с мое существующее приложение для Android. Я получаю следующее исключение, когда initilizing Реагировать Родной экран:React native expection java.lang.UnsatisfiedLinkError: dlopen failed: "/data/data/{package}/lib-main/libgnustl_shared.so" 32-разрядный вместо 64-разрядного

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

Приложение только сбой на 64-разрядных устройств.

По моему обучению до сих пор, я нашел это issue сообщили о Реагировать Native Repo, но solution предложил в этой теме не полезно, как я не использую какие-либо внешние SO библиотеку в существующих приложениях.

Помимо вышеизложенного, я понял другое различие в структуре библиотеки на устройстве, где установлено мое приложение. Я сравниваю структуру моего приложения, а не обычного приложения для демонстрации.

Реагировать демо 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 

Sharing несколько больше информации о моем проекте:

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

зависимости, используемых в андроиде родного проекта

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]ar', 

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

Любой ключ приветствуются.

PS: Я знаю, что response-native поддерживает 64-битные двоичные файлы, и я не использую какую-либо внешнюю библиотеку.

ответ

10

Добавьте следующее в приложение/Gradle файл

defaultConfig { 
.... 

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

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

также убедитесь, что вы работаете с тем же портом.

adb reverse tcp:8081 tcp:8081 
+1

Также см этот вопрос: https://github.com/facebook/react-native/issues/11027 – ADev

+1

Что порт должен делать с ошибкой ФП в? –

+1

также добавить «armeabi» в abiFilters, без этого это не так. работа на некоторых телефонах, таких как samsung s7, facebook должен делать лучше. задание добавления всех фильтров. нужно добавить, чтобы это работало на всех устройствах. – amIT

 Смежные вопросы

  • Нет связанных вопросов^_^