java - react native : Override Error on Package without Duplicate

标签 java react-native react-native-camera

我正在尝试使用react-native-camera包,但是当我将其添加到我的项目中时,我无法看到相机,而是正在加载并发出警告。然后我在互联网上搜索这个警告,发现我必须手动链接这个库,所以我这样做了。但是当我尝试构建时,我得到了这个:

error

这是我的 MainApplication.java

import android.app.Application;
import android.content.Context;
import com.facebook.react.PackageList;
import com.facebook.react.ReactApplication;
import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactPackage;
import com.facebook.soloader.SoLoader;
import java.lang.reflect.InvocationTargetException;
import java.util.List;
import org.reactnative.camera.RNCameraPackage;

public class MainApplication extends Application implements ReactApplication {

  private final ReactNativeHost mReactNativeHost =
      new ReactNativeHost(this) {
        @Override
        public boolean getUseDeveloperSupport() {
          return BuildConfig.DEBUG;
        }

        public boolean canOverrideExistingModule() {        
          return true;    
        }   

        @Override
        protected List<ReactPackage> getPackages() {
          @SuppressWarnings("UnnecessaryLocalVariable")
          List<ReactPackage> packages = new PackageList(this).getPackages();
          packages.add(new RNCameraPackage());
          return packages;
        }

        @Override
        protected String getJSMainModuleName() {
          return "index";
        }
      };

  @Override
  public ReactNativeHost getReactNativeHost() {
    return mReactNativeHost;
  }

  @Override
  public void onCreate() {
    super.onCreate();
    SoLoader.init(this, /* native exopackage */ false);
    initializeFlipper(this); // Remove this line if you don't want Flipper enabled
  }

  /**
   * Loads Flipper in React Native templates.
   *
   * @param context
   */
  private static void initializeFlipper(Context context) {
    if (BuildConfig.DEBUG) {
      try {
        /*
         We use reflection here to pick up the class that initializes Flipper,
        since Flipper library is not available in release mode
        */
        Class<?> aClass = Class.forName("com.facebook.flipper.ReactNativeFlipper");
        aClass.getMethod("initializeFlipper", Context.class).invoke(null, context);
      } catch (ClassNotFoundException e) {
        e.printStackTrace();
      } catch (NoSuchMethodException e) {
        e.printStackTrace();
      } catch (IllegalAccessException e) {
        e.printStackTrace();
      } catch (InvocationTargetException e) {
        e.printStackTrace();
      }
    }
  }
}

Android list

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.app">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.VIBRATE"/>
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.RECORD_AUDIO"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <application
      android:name=".MainApplication"
      android:label="@string/app_name"
      android:icon="@mipmap/ic_launcher"
      android:roundIcon="@mipmap/ic_launcher_round"
      android:allowBackup="false"
      android:theme="@style/AppTheme">
      <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
        android:windowSoftInputMode="adjustResize">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
      </activity>
      <activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
    </application>

</manifest>

尝试访问相机时获取此信息:

Possible Unhandled Promise Rejection (id: 0):
TypeError: CameraManager.checkVideoAuthorizationStatus is not a function
TypeError: CameraManager.checkVideoAuthorizationStatus is not a function
    at requestPermissions$ (http://localhost:8081/index.bundle?platform=android&dev=true&minify=false:129653:61)
    at tryCatch (http://localhost:8081/index.bundle?platform=android&dev=true&minify=false:25682:19)
    at Generator.invoke [as _invoke] (http://localhost:8081/index.bundle?platform=android&dev=true&minify=false:25857:24)
    at Generator.prototype.<computed> [as next] (http://localhost:8081/index.bundle?platform=android&dev=true&minify=false:25725:23)
    at tryCatch (http://localhost:8081/index.bundle?platform=android&dev=true&minify=false:25682:19)
    at invoke (http://localhost:8081/index.bundle?platform=android&dev=true&minify=false:25758:22)
    at http://localhost:8081/index.bundle?platform=android&dev=true&minify=false:25788:13
    at tryCallTwo (http://localhost:8081/index.bundle?platform=android&dev=true&minify=false:27046:7)
    at doResolve (http://localhost:8081/index.bundle?platform=android&dev=true&minify=false:27210:15)
    at new Promise (http://localhost:8081/index.bundle?platform=android&dev=true&minify=false:27069:5)

最佳答案

嗯,在我看来,这条消息说得很清楚了。 Rect-Native 0.60+ 使用自动链接来链接原生包,因此您不再需要使用 react-native link react-native-camera

这意味着您不需要在 MainApplication.java 中导入并拥有 packages.add(new RNCameraPackage());

protected List<ReactPackage> getPackages() {
    @SuppressWarnings("UnnecessaryLocalVariable")
    List<ReactPackage> packages = new PackageList(this).getPackages();
    packages.add(new RNCameraPackage()); // Remove this line and the import statement
    return packages;
}

您还需要删除运行 react-native link 命令时添加的所有其他内容。重新安装,您的应用程序现在应该可以打开。

LE:

作为备份,您可以关闭特定包的自动链接,如下所示。编辑或创建 react-native.config.js 添加以下内容。

module.exports = {
    dependencies: {
        'react-native-camera': {
            platforms: {
                android: null, // disable Android platform, other platforms will still autolink if provided
            },
        },
    },
};

关于java - react native : Override Error on Package without Duplicate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60267007/

相关文章:

android - react native [Android] "Fatal signal 11 (SIGSEGV), code 1"

video - 如何使用 react-native-camera 录制视频

android - 如何检查用户是否已在 React Native Android 中授予相机权限?

java - 下载文件流而不是文件

java - 使用 DropWizard 指标-Jvm 获取 JMX 值

Java Swing - 尝试绘制一条线,并在移动 slider 时与 slider 保持一致

java - React-Native Android 构建失败 - 无法找到请求目标的有效认证路径

javascript - React Native 元素 ListItem 按钮周围的填充(根据文档)

java - 退回最便宜的商品

ios - 上传视频到服务器