mirror of
https://github.com/zhigang1992/react-native.git
synced 2026-05-05 16:37:08 +08:00
Reviewed By: andreicoman11 Differential Revision: D3855861 fbshipit-source-id: 810d1ea4e6a64231356a4b6953f97de2f54d2558
92 lines
2.0 KiB
Java
92 lines
2.0 KiB
Java
// Copyright 2004-present Facebook. All Rights Reserved.
|
|
|
|
package com.facebook.react.cxxbridge;
|
|
|
|
import java.util.Map;
|
|
|
|
import com.facebook.jni.HybridData;
|
|
import com.facebook.proguard.annotations.DoNotStrip;
|
|
import com.facebook.react.bridge.CatalystInstance;
|
|
import com.facebook.react.bridge.ExecutorToken;
|
|
import com.facebook.react.bridge.NativeModule;
|
|
import com.facebook.react.bridge.ReadableNativeArray;
|
|
import com.facebook.soloader.SoLoader;
|
|
|
|
/**
|
|
* A Java Object which represents a cross-platform C++ module
|
|
*
|
|
*/
|
|
@DoNotStrip
|
|
public class CxxModuleWrapper implements NativeModule
|
|
{
|
|
static {
|
|
SoLoader.loadLibrary(CatalystInstanceImpl.REACT_NATIVE_LIB);
|
|
}
|
|
|
|
@DoNotStrip
|
|
private HybridData mHybridData;
|
|
|
|
@DoNotStrip
|
|
private static class MethodWrapper implements NativeMethod
|
|
{
|
|
@DoNotStrip
|
|
HybridData mHybridData;
|
|
|
|
MethodWrapper() {
|
|
mHybridData = initHybrid();
|
|
}
|
|
|
|
public native HybridData initHybrid();
|
|
|
|
@Override
|
|
public native void invoke(
|
|
CatalystInstance catalystInstance,
|
|
ExecutorToken executorToken,
|
|
ReadableNativeArray args);
|
|
|
|
@Override
|
|
public native String getType();
|
|
}
|
|
|
|
public CxxModuleWrapper(String library, String factory) {
|
|
SoLoader.loadLibrary(library);
|
|
mHybridData =
|
|
initHybrid(SoLoader.unpackLibraryAndDependencies(library).getAbsolutePath(), factory);
|
|
}
|
|
|
|
@Override
|
|
public native String getName();
|
|
|
|
@Override
|
|
public native Map<String, NativeMethod> getMethods();
|
|
|
|
public native String getConstantsJson();
|
|
|
|
@Override
|
|
public void initialize() {
|
|
// do nothing
|
|
}
|
|
|
|
@Override
|
|
public boolean canOverrideExistingModule() {
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public boolean supportsWebWorkers() {
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public void onCatalystInstanceDestroy() {
|
|
mHybridData.resetNative();
|
|
}
|
|
|
|
// For creating a wrapper from C++, or from a derived class.
|
|
protected CxxModuleWrapper(HybridData hd) {
|
|
mHybridData = hd;
|
|
}
|
|
|
|
private native HybridData initHybrid(String soPath, String factory);
|
|
}
|