mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/34421 Currently we expose native code (.h, .cpp) inside the src/main/java folder. This is making impossible for users on New Architecture to open the project inside Android Studio. The problem is that the src/main/java is reserved to Java/Kotlin sources only. AGP 7.2 also removed support for mixed source roots: https://developer.android.com/studio/releases/gradle-plugin#duplicate-content-roots This is essentially forcing users to write Java code without any autocompletion as all the React Native Java classes are considered C++ files. I'm addressing this issue folder by folder by moving them from ReactAndroid/src/main/java/com/facebook/... to ReactAndroid/src/main/jni/react/... This is the diff for reactnativeblob Changelog: [Internal] [Changed] - Do not store .cpp/.h files inside src/main/java - reactnativeblob Reviewed By: cipolleschi Differential Revision: D38703092 fbshipit-source-id: 3d4391d8ee5587b199efa4001f68c6d4ed3ce2c2
68 lines
2.0 KiB
C++
68 lines
2.0 KiB
C++
/*
|
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
|
|
#include "BlobCollector.h"
|
|
|
|
#include <fbjni/fbjni.h>
|
|
#include <memory>
|
|
#include <mutex>
|
|
|
|
using namespace facebook;
|
|
|
|
namespace facebook {
|
|
namespace react {
|
|
|
|
static constexpr auto kBlobModuleJavaDescriptor =
|
|
"com/facebook/react/modules/blob/BlobModule";
|
|
|
|
BlobCollector::BlobCollector(
|
|
jni::global_ref<jobject> blobModule,
|
|
const std::string &blobId)
|
|
: blobModule_(blobModule), blobId_(blobId) {}
|
|
|
|
BlobCollector::~BlobCollector() {
|
|
jni::ThreadScope::WithClassLoader([&] {
|
|
static auto removeMethod = jni::findClassStatic(kBlobModuleJavaDescriptor)
|
|
->getMethod<void(jstring)>("remove");
|
|
removeMethod(blobModule_, jni::make_jstring(blobId_).get());
|
|
blobModule_.reset();
|
|
});
|
|
}
|
|
|
|
void BlobCollector::nativeInstall(
|
|
jni::alias_ref<jhybridobject> jThis,
|
|
jni::alias_ref<jobject> blobModule,
|
|
jlong jsContextNativePointer) {
|
|
auto &runtime = *((jsi::Runtime *)jsContextNativePointer);
|
|
auto blobModuleRef = jni::make_global(blobModule);
|
|
runtime.global().setProperty(
|
|
runtime,
|
|
"__blobCollectorProvider",
|
|
jsi::Function::createFromHostFunction(
|
|
runtime,
|
|
jsi::PropNameID::forAscii(runtime, "__blobCollectorProvider"),
|
|
1,
|
|
[blobModuleRef](
|
|
jsi::Runtime &rt,
|
|
const jsi::Value &thisVal,
|
|
const jsi::Value *args,
|
|
size_t count) {
|
|
auto blobId = args[0].asString(rt).utf8(rt);
|
|
auto blobCollector =
|
|
std::make_shared<BlobCollector>(blobModuleRef, blobId);
|
|
return jsi::Object::createFromHostObject(rt, blobCollector);
|
|
}));
|
|
}
|
|
|
|
void BlobCollector::registerNatives() {
|
|
registerHybrid(
|
|
{makeNativeMethod("nativeInstall", BlobCollector::nativeInstall)});
|
|
}
|
|
|
|
} // namespace react
|
|
} // namespace facebook
|