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