Instantly share code, notes, and snippets.

Rudi Yardley ryardley

View GitHub Profile
View Application.mk
# ./android/app/src/main/jni/Application.mk
APP_STL := c++_static
View Android.mk
# ./android/app/src/main/jni/Android.mk
# Set up paths
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Debug mode
NDK_DEBUG=1
# Specify C++ flags
View build.gradle
android {
// ...
defaultConfig {
// ...
// the following configures ndk-build to build a "helloworld" module
ndk {
abiFilters "armeabi-v7a", "x86"
moduleName "helloworld"
ldLibs "log"
}
View build.gradle
apply plugin: "com.android.application"
import com.android.build.OutputFile
/**
* The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets
* and bundleReleaseJsAndAssets).
* These basically call `react-native bundle` with the correct arguments during the Android build
* cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the
* bundle directly from the development server. Below you can see all the possible configurations
View HelloWorldModule.java
// ./android/app/src/main/java/com/cppreactnative/helloworld/HelloWorldModule.java
package com.cppreactnative.helloworld;
import com.facebook.react.bridge.Promise;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
public class HelloWorldModule extends ReactContextBaseJavaModule {
View RCTHelloWorld.m
// ios/ReactBridge/RCTHelloWorld.m
#import "RCTHelloWorld.h"
#import "HWHelloWorld.h"
@implementation RCTHelloWorld{
HWHelloWorld *_cppApi;
}
- (RCTHelloWorld *)init
{
self = [super init];
_cppApi = [HWHelloWorld create];
View run_djinni.sh
#!/usr/bin/env bash
### Configuration
# Djinni IDL file location
djinni_file="helloworld.djinni"
# C++ namespace for generated src
namespace="helloworld"
# Objective-C class name prefix for generated src
objc_prefix="HW"
# Java package name for generated src
java_package="com.cppreactnative.helloworld"
View helloworld.idl
hello_world = interface +c {
static create(): hello_world;
get_hello_world(): string;
}
View hello_world_impl.cpp
#include "hello_world_impl.hpp"
#include <string>
namespace helloworld {
std::shared_ptr<HelloWorld> HelloWorld::create() {
return std::make_shared<HelloWorldImpl>();
}
HelloWorldImpl::HelloWorldImpl() {
View hello_world_impl.hpp
#pragma once
#include "hello_world.hpp"
namespace helloworld {
class HelloWorldImpl : public helloworld::HelloWorld {
public: