【问题标题】:React native - compile bundle with android studioReact native - 使用 android studio 编译包
【发布时间】:2020-04-23 12:39:12
【问题描述】:

我有一个 react native 的项目,我创建了一个包并尝试使用 android 打开,但我收到下一个错误

2020-01-05 16:09:09.460 12947-13005/com.note.principal E/SoLoader: 找不到要加载的 DSO:libhermes.so 2020-01-05 16:09:09.486 12947-13005/com.note.principal E/AndroidRuntime:致命例外: create_react_context 进程:com.note.principal,PID:12947 java.lang.UnsatisfiedLinkError:找不到要加载的 DSO:libhermes.so 在 com.facebook.soloader.SoLoader.doLoadLibraryBySoName(SoLoader.java:738) 在 com.facebook.soloader.SoLoader.loadLibraryBySoName(SoLoader.java:591) 在 com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:529) 在 com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:484) 在 com.facebook.hermes.reactexecutor.HermesExecutor.(HermesExecutor.java:20) 在 com.facebook.hermes.reactexecutor.HermesExecutorFactory.create(HermesExecutorFactory.java:27) 在 com.facebook.react.ReactInstanceManager$5.run(ReactInstanceManager.java:952) 在 java.lang.Thread.run(Thread.java:764)

react native 的项目版本是

{
  "name": "Notes",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "android": "react-native run-android",
    "ios": "react-native run-ios",
    "start": "react-native start",
    "bundle_android": "react-native bundle --entry-file index.js --platform android --dev false --bundle-output ./index.android.bundle",
    "bundle_ios": "react-native bundle --entry-file index.js --platform ios --dev false --bundle-output ./main.jsbundle",
    "test": "jest",
    "lint": "eslint ."
  },
  "dependencies": {
    "react": "16.9.0",
    "react-native": "0.61.5",
    "react-navigation": "^4.0.10"
  },
  "devDependencies": {
    "@babel/core": "^7.7.7",
    "@babel/runtime": "^7.7.7",
    "@react-native-community/eslint-config": "^0.0.6",
    "babel-jest": "^24.9.0",
    "eslint": "^6.8.0",
    "jest": "^24.9.0",
    "metro-react-native-babel-preset": "^0.57.0",
    "react-test-renderer": "16.9.0"
  },
  "jest": {
    "preset": "react-native"
  }
}

我运行下一个脚本

npm run bundle_android

但是当我运行应用程序时,它总是显示错误

couldn't find DSO to load: libhermes.so 2020-01-05 16:09:09.486

kotling 的代码是

package com.note

import android.content.Intent
import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.provider.Settings
import androidx.appcompat.app.AppCompatActivity
import com.facebook.react.ReactInstanceManager
import com.facebook.react.ReactRootView
import com.facebook.react.common.LifecycleState
import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler
import com.facebook.react.shell.MainReactPackage
import com.facebook.soloader.SoLoader
import com.note.sdkcore.SDKCorePackage

class ReactActivity : AppCompatActivity(), DefaultHardwareBackBtnHandler {

    private val OVERLAY_PERMISSION_REQ_CODE = 1

    private lateinit var mReactRootView: ReactRootView
    private lateinit var mReactInstanceManager: ReactInstanceManager

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        SoLoader.init(this, false)
        mReactRootView = ReactRootView(this)
        mReactInstanceManager = ReactInstanceManager.builder()
            .setApplication(application)
            .setCurrentActivity(this)
            .setApplication(application)
            .setBundleAssetName("index.android.bundle")
            .addPackage(MainReactPackage())
            .addPackage(SDKCorePackage())
            .setInitialLifecycleState(LifecycleState.RESUMED)
            .build()
        // The string here (e.g. "MyReactNativeApp") has to match
        // the string in AppRegistry.registerComponent() in index.js
        mReactRootView.startReactApplication(mReactInstanceManager, "Notes", null)

        setContentView(mReactRootView)

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if (!Settings.canDrawOverlays(this)) {
                val intent = Intent(
                        Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
                        Uri.parse("package:$packageName")
                )
                startActivityForResult(intent, OVERLAY_PERMISSION_REQ_CODE)
            }
        }
    }

    override fun invokeDefaultOnBackPressed() {
        super.onBackPressed()
    }

    override fun onBackPressed() {
        if (mReactInstanceManager != null) {
            mReactInstanceManager.onBackPressed()
        } else {
            super.onBackPressed()
        }
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        if (requestCode == OVERLAY_PERMISSION_REQ_CODE) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                if (!Settings.canDrawOverlays(this)) {
                    // SYSTEM_ALERT_WINDOW permission not granted
                }
            }
        }
        mReactInstanceManager?.onActivityResult(this,requestCode, resultCode, data)
    }
}

有人知道解决办法

【问题讨论】:

  • 我在用 android 打开捆绑包时遇到问题,我正在搜索不同的信息,但这是我唯一能正常工作的东西。然后是用户要打开捆绑包时要解决的步骤。我更改了描述并指定了技术

标签: javascript android maven react-native gradle


【解决方案1】:

我正在寻找答案,但我没有找到任何东西,然后下一个帮助我解决问题。它有助于用 android 编译一个包

第一个:需要改app/gradle

   apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

android {
    compileSdkVersion 28
    buildToolsVersion "28.0.3"
    defaultConfig {
        applicationId ""
        minSdkVersion 21
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

project.ext.react = [

        enableHermes: false,
]

def jscFlavor = 'org.webkit:android-jsc:+'
def enableHermes = project.ext.react.get("enableHermes", false);

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    implementation "com.facebook.react:react-native:+"
    implementation 'com.android.support:support-annotations:27.1.1'

    if (enableHermes) {
        implementation project(':hermes-engine')
        debugImplementation files(hermesPath + "hermes-debug.aar")
        releaseImplementation files(hermesPath + "hermes-release.aar")
    } else {
        implementation jscFlavor
    }
}

第二种:需要更改principal的gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    ext.kotlin_version = '1.3.50'
    repositories {
        google()
        jcenter()
        mavenLocal()

    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.4.2'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()
        mavenLocal()
        maven {
            // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
            url "$rootDir/../node_modules/react-native/android"
        }
        maven {
            // Android JSC is installed from npm
            url("$rootDir/../node_modules/jsc-android/dist")
        }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

第三个:需要在设置gradle时添加下一个

include ':app'
rootProject.name='Notes'


include ':hermes-engine'
project(':hermes-engine').projectDir = new File(rootProject.projectDir, '../node_modules/hermes-engine/android/')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-29
    • 2016-06-22
    • 1970-01-01
    • 1970-01-01
    • 2020-07-13
    • 2021-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多