Skip to content

Commit

Permalink
feat: add support for rudder facebook integration (#373)
Browse files Browse the repository at this point in the history
* chore(example): update podfile.lock

* feat(rudder-integration-facebook-react-native): add facebook initial setup

* feat(rudder-integration-facebook-react-native): add android setup

* feat(rudder-integration-facebook-react-native): add ios setup

* chore(example): update podfile.lock

* chore(rudder-integration-facebook-react-native): set the release as major in project.json

This is required to release the first version as 1.0.0

* chore(rudder-sdk-react-native-monorepo): override micromatch to address high vulnerability issue

* chore(example): add fb android setup

This step is needed to initialise the Facebook App Event Android SDK.

* chore(example): update ios project

* chore(example): add iOS setup

* chore(example): add FB sdk init setup in iOS

* chore(rudder-integration-facebook-react-native): address comments
  • Loading branch information
1abhishekpandey authored Sep 23, 2024
1 parent e48287a commit 8cac746
Show file tree
Hide file tree
Showing 49 changed files with 1,276 additions and 19 deletions.
1 change: 1 addition & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ List of React-Native packages and their corresponding commit message format:
| rudder-integration-appsflyer-react-native | fix(rudder-integration-appsflyer-react-native): fix some issue | feat(rudder-integration-appsflyer-react-native): add some new feature |
| rudder-integration-braze-react-native | fix(rudder-integration-braze-react-native): fix some issue | feat(rudder-integration-braze-react-native): add some new feature |
| rudder-integration-clevertap-react-native | fix(rudder-integration-clevertap-react-native): fix some issue | feat(rudder-integration-clevertap-react-native): add some new feature |
| rudder-integration-facebook-react-native | fix(rudder-integration-facebook-react-native): fix some issue | feat(rudder-integration-facebook-react-native): add some new feature |
| rudder-integration-firebase-react-native | fix(rudder-integration-firebase-react-native): fix some issue | feat(rudder-integration-firebase-react-native): add some new feature |
| rudder-integration-moengage-react-native | fix(rudder-integration-moengage-react-native): fix some issue | feat(rudder-integration-moengage-react-native): add some new feature |
| rudder-integration-singular-react-native | fix(rudder-integration-singular-react-native): fix some issue | feat(rudder-integration-singular-react-native): add some new feature |
Expand Down
4 changes: 4 additions & 0 deletions apps/example/android/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -22,5 +22,9 @@
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

<!-- Refer to the Facebook doc: https://developers.facebook.com/docs/android/getting-started-->
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>
<meta-data android:name="com.facebook.sdk.ClientToken" android:value="@string/facebook_client_token"/>
</application>
</manifest>
4 changes: 4 additions & 0 deletions apps/example/android/app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
<resources>
<string name="app_name">Example</string>

<!-- Refer to the Facebook doc: https://developers.facebook.com/docs/android/getting-started-->
<string name="facebook_app_id">APPID</string>
<string name="facebook_client_token">CLIENTOKEN</string>
</resources>
4 changes: 4 additions & 0 deletions apps/example/ios/Example-Bridging-Header.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
//
// Use this file to import your target's public headers that you would like to expose to Swift.
//

22 changes: 13 additions & 9 deletions apps/example/ios/Example.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
2710A25ACD646D417AD4C0FC /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 258FA9C0DCF4B7B3300A29A6 /* PrivacyInfo.xcprivacy */; };
81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; };
8C0733442C9C7DDD00A6BE7F /* FBSDKInit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C0733432C9C7DDD00A6BE7F /* FBSDKInit.swift */; };
91E2BA797FA011C97A949F65 /* libPods-Example-ExampleTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BEF6230A9BA5ACD36E47C4D4 /* libPods-Example-ExampleTests.a */; };
B5B827578178B0D14D4B4368 /* libPods-Example.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CC595347C0148502BBDA2696 /* libPods-Example.a */; };
/* End PBXBuildFile section */
Expand Down Expand Up @@ -44,6 +45,8 @@
81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = Example/LaunchScreen.storyboard; sourceTree = "<group>"; };
88F862D882B3BF72CCF5CF29 /* Pods-Example-ExampleTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Example-ExampleTests.debug.xcconfig"; path = "Target Support Files/Pods-Example-ExampleTests/Pods-Example-ExampleTests.debug.xcconfig"; sourceTree = "<group>"; };
8B68CF3D1EA4AC7E4CCE9DE9 /* Pods-Example-ExampleTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Example-ExampleTests.release.xcconfig"; path = "Target Support Files/Pods-Example-ExampleTests/Pods-Example-ExampleTests.release.xcconfig"; sourceTree = "<group>"; };
8C0733422C9C7DDD00A6BE7F /* Example-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Example-Bridging-Header.h"; sourceTree = "<group>"; };
8C0733432C9C7DDD00A6BE7F /* FBSDKInit.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FBSDKInit.swift; sourceTree = "<group>"; };
BEF6230A9BA5ACD36E47C4D4 /* libPods-Example-ExampleTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Example-ExampleTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
CC595347C0148502BBDA2696 /* libPods-Example.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Example.a"; sourceTree = BUILT_PRODUCTS_DIR; };
ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
Expand Down Expand Up @@ -97,6 +100,8 @@
13B07FB71A68108700A75B9A /* main.m */,
13B07FB81A68108700A75B9A /* PrivacyInfo.xcprivacy */,
258FA9C0DCF4B7B3300A29A6 /* PrivacyInfo.xcprivacy */,
8C0733432C9C7DDD00A6BE7F /* FBSDKInit.swift */,
8C0733422C9C7DDD00A6BE7F /* Example-Bridging-Header.h */,
);
name = Example;
sourceTree = "<group>";
Expand Down Expand Up @@ -211,7 +216,7 @@
TestTargetID = 13B07F861A680F5B00A75B9A;
};
13B07F861A680F5B00A75B9A = {
LastSwiftMigration = 1120;
LastSwiftMigration = 1540;
};
};
};
Expand Down Expand Up @@ -398,6 +403,7 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
8C0733442C9C7DDD00A6BE7F /* FBSDKInit.swift in Sources */,
13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */,
13B07FC11A68108700A75B9A /* main.m in Sources */,
);
Expand All @@ -418,6 +424,7 @@
isa = XCBuildConfiguration;
baseConfigurationReference = 88F862D882B3BF72CCF5CF29 /* Pods-Example-ExampleTests.debug.xcconfig */;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
BUNDLE_LOADER = "$(TEST_HOST)";
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
Expand Down Expand Up @@ -445,6 +452,7 @@
isa = XCBuildConfiguration;
baseConfigurationReference = 8B68CF3D1EA4AC7E4CCE9DE9 /* Pods-Example-ExampleTests.release.xcconfig */;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
BUNDLE_LOADER = "$(TEST_HOST)";
COPY_PHASE_STRIP = NO;
INFOPLIST_FILE = ExampleTests/Info.plist;
Expand Down Expand Up @@ -582,6 +590,7 @@
);
PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
PRODUCT_NAME = Example;
SWIFT_OBJC_BRIDGING_HEADER = "Example-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
Expand Down Expand Up @@ -704,6 +713,7 @@
);
PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
PRODUCT_NAME = Example;
SWIFT_OBJC_BRIDGING_HEADER = "Example-Bridging-Header.h";
SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
};
Expand Down Expand Up @@ -793,10 +803,7 @@
"-DFOLLY_CFG_NO_COROUTINES=1",
"-DFOLLY_HAVE_CLOCK_GETTIME=1",
);
OTHER_LDFLAGS = (
"$(inherited)",
" ",
);
OTHER_LDFLAGS = "$(inherited) ";
REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
SDKROOT = iphoneos;
USE_HERMES = true;
Expand Down Expand Up @@ -879,10 +886,7 @@
"-DFOLLY_CFG_NO_COROUTINES=1",
"-DFOLLY_HAVE_CLOCK_GETTIME=1",
);
OTHER_LDFLAGS = (
"$(inherited)",
" ",
);
OTHER_LDFLAGS = "$(inherited) ";
REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
SDKROOT = iphoneos;
USE_HERMES = true;
Expand Down
3 changes: 3 additions & 0 deletions apps/example/ios/Example/AppDelegate.mm
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#import "AppDelegate.h"

#import <React/RCTBundleURLProvider.h>
#import "Example-Swift.h"

@implementation AppDelegate

Expand All @@ -10,6 +11,8 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(
// You can add your custom initial props in the dictionary below.
// They will be passed down to the ViewController used by React Native.
self.initialProps = @{};

[FBSDKInitializer setupFBSDKWithApplication:application launchOptions:launchOptions];

return [super application:application didFinishLaunchingWithOptions:launchOptions];
}
Expand Down
16 changes: 16 additions & 0 deletions apps/example/ios/Example/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -48,5 +48,21 @@
</array>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
<!-- Facebook App Events -->
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>fbAPP-ID</string>
</array>
</dict>
</array>
<key>FacebookAppID</key>
<string>APP-ID</string>
<key>FacebookClientToken</key>
<string>CLIENT-TOKEN</string>
<key>FacebookDisplayName</key>
<string>APP-NAME</string>
</dict>
</plist>
20 changes: 20 additions & 0 deletions apps/example/ios/FBSDKInit.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
//
// FBSDKInit.swift
// Example
//
// Created by Abhishek Pandey on 19/09/24.
//

import Foundation
import FBSDKCoreKit


@objc class FBSDKInitializer: NSObject {

@objc static func setupFBSDK(application: UIApplication, launchOptions: [UIApplication.LaunchOptionsKey: Any]?) {
/**
* This code initializes the SDK when your app launches, and allows the SDK handle logins and sharing from the native Facebook app when you perform a Login or Share action. Otherwise, the user must be logged into Facebook to use the in-app browser to login. Refer Facebook App Event doc for more info: https://developers.facebook.com/docs/app-events/getting-started-app-events-ios
*/
ApplicationDelegate.shared.application(application, didFinishLaunchingWithOptions: launchOptions)
}
}
29 changes: 27 additions & 2 deletions apps/example/ios/Podfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,13 @@ PODS:
- CleverTap-iOS-SDK (4.2.2):
- SDWebImage (~> 5.11)
- DoubleConversion (1.1.6)
- FBAEMKit (17.0.3):
- FBSDKCoreKit_Basics (= 17.0.3)
- FBLazyVector (0.74.1)
- FBSDKCoreKit (17.0.3):
- FBAEMKit (= 17.0.3)
- FBSDKCoreKit_Basics (= 17.0.3)
- FBSDKCoreKit_Basics (17.0.3)
- FirebaseAnalytics (10.28.0):
- FirebaseAnalytics/AdIdSupport (= 10.28.0)
- FirebaseCore (~> 10.0)
Expand Down Expand Up @@ -1313,6 +1319,9 @@ PODS:
- Rudder-CleverTap (1.1.2):
- CleverTap-iOS-SDK (~> 4.2)
- Rudder (~> 1.12)
- Rudder-Facebook (2.2.1):
- FBSDKCoreKit (~> 17.0.2)
- Rudder (~> 1.12)
- Rudder-Firebase (3.4.0):
- FirebaseAnalytics (~> 10.28.0)
- Rudder (~> 1.25)
Expand All @@ -1337,6 +1346,10 @@ PODS:
- React
- RNRudderSdk
- Rudder-CleverTap (~> 1.1.2)
- rudder-integration-facebook-react-native (1.0.0):
- React
- RNRudderSdk
- Rudder-Facebook (< 3.0.0, >= 2.2.1)
- rudder-integration-firebase-react-native (1.1.0):
- React
- RNRudderSdk
Expand All @@ -1352,7 +1365,7 @@ PODS:
- Rudder-Moengage (2.1.1):
- MoEngage-iOS-SDK (~> 9.5)
- Rudder (~> 1.12)
- rudder-plugin-db-encryption-react-native (1.2.0):
- rudder-plugin-db-encryption-react-native (1.3.0):
- React
- RNRudderSdk
- Rudder (< 2.0.0, >= 1.24.1)
Expand Down Expand Up @@ -1446,6 +1459,7 @@ DEPENDENCIES:
- "rudder-integration-appsflyer-react-native (from `../node_modules/@rudderstack/rudder-integration-appsflyer-react-native`)"
- "rudder-integration-braze-react-native (from `../node_modules/@rudderstack/rudder-integration-braze-react-native`)"
- "rudder-integration-clevertap-react-native (from `../node_modules/@rudderstack/rudder-integration-clevertap-react-native`)"
- "rudder-integration-facebook-react-native (from `../node_modules/@rudderstack/rudder-integration-facebook-react-native`)"
- "rudder-integration-firebase-react-native (from `../node_modules/@rudderstack/rudder-integration-firebase-react-native`)"
- "rudder-integration-moengage-react-native (from `../node_modules/@rudderstack/rudder-integration-moengage-react-native`)"
- "rudder-integration-singular-react-native (from `../node_modules/@rudderstack/rudder-integration-singular-react-native`)"
Expand All @@ -1460,6 +1474,9 @@ SPEC REPOS:
- AppsFlyerFramework
- BrazeKit
- CleverTap-iOS-SDK
- FBAEMKit
- FBSDKCoreKit
- FBSDKCoreKit_Basics
- FirebaseAnalytics
- FirebaseCore
- FirebaseCoreInternal
Expand All @@ -1477,6 +1494,7 @@ SPEC REPOS:
- Rudder-Appsflyer
- Rudder-Braze
- Rudder-CleverTap
- Rudder-Facebook
- Rudder-Firebase
- Rudder-Moengage
- Rudder-Singular
Expand Down Expand Up @@ -1613,6 +1631,8 @@ EXTERNAL SOURCES:
:path: "../node_modules/@rudderstack/rudder-integration-braze-react-native"
rudder-integration-clevertap-react-native:
:path: "../node_modules/@rudderstack/rudder-integration-clevertap-react-native"
rudder-integration-facebook-react-native:
:path: "../node_modules/@rudderstack/rudder-integration-facebook-react-native"
rudder-integration-firebase-react-native:
:path: "../node_modules/@rudderstack/rudder-integration-firebase-react-native"
rudder-integration-moengage-react-native:
Expand All @@ -1633,7 +1653,10 @@ SPEC CHECKSUMS:
BrazeKit: 4da9eda353092104add9d3fcbb272afbd14dd3de
CleverTap-iOS-SDK: 36c21b8a671d87a0f9c7b389b339d02528bbe4d7
DoubleConversion: 76ab83afb40bddeeee456813d9c04f67f78771b5
FBAEMKit: 9900b2edd99a2d21629a6277e6166f14c6215799
FBLazyVector: 898d14d17bf19e2435cafd9ea2a1033efe445709
FBSDKCoreKit: 0791f8f68a8630931a4c12aa23a56cc021551596
FBSDKCoreKit_Basics: 46d6b472c0dd0a5a7e972c025033d1c567f54eb4
FirebaseAnalytics: 1e06fe7d246af7230b08d1d9cdca54a4624dd461
FirebaseCore: 30e9c1cbe3d38f5f5e75f48bfcea87d7c358ec16
FirebaseCoreInternal: df84dd300b561c27d5571684f389bf60b0a5c934
Expand Down Expand Up @@ -1705,17 +1728,19 @@ SPEC CHECKSUMS:
Rudder-Appsflyer: d7eb1497781a64e4228c97edc1cc3c7893b6ced0
Rudder-Braze: 1906f75be3d6f04bd6e85ea1f250dafabd574ccd
Rudder-CleverTap: a0085aab472e0e60930c4301ef80bae5ff187e98
Rudder-Facebook: 24c9309373f13212d1139938aad86faa2914d342
Rudder-Firebase: 53976bb7f282366248212b5757389bd32995abb8
rudder-integration-amplitude-react-native: a9896aaef79714931f0edbd40f3cde602b429273
rudder-integration-appcenter-react-native: 6395a10a4396f56ff955603bfb47d1a0e374614d
rudder-integration-appsflyer-react-native: 393473fd43ee3c792484a36014fcfeae1169abe5
rudder-integration-braze-react-native: 237e030490811fa7eb3192e2800feb6e6d141bca
rudder-integration-clevertap-react-native: 3c640ce986bd66996a2e53ff415159dfca0f5c4d
rudder-integration-facebook-react-native: 0d3a8e6279b81c39495a81d7badf4c4c8815bd8f
rudder-integration-firebase-react-native: 49cdc474a8273432a8b363e966b27dda1a696dea
rudder-integration-moengage-react-native: a88e92d14c27edfb1d7c3d27cf2498e4d82cd36d
rudder-integration-singular-react-native: 52137a0c399ad1329b53bfe9e8af0a78e11168a3
Rudder-Moengage: c30465e23740673495ff853eed607a5641f22c5c
rudder-plugin-db-encryption-react-native: 59e6894cd18d3c35d03853372b652eb47645b32f
rudder-plugin-db-encryption-react-native: 5ef4cbd04e41c239c3df1a6af2a754d9990cc8b6
Rudder-Singular: e22a4101ce043aded86b777bea873bf6a2af42b9
RudderDatabaseEncryption: 95b436538412958eda771f5d81bd970a9ffe4eec
RudderKit: f272f9872183946452ac94cd7bb2244a71e6ca8f
Expand Down
1 change: 1 addition & 0 deletions apps/example/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
"@rudderstack/rudder-integration-appsflyer-react-native": "*",
"@rudderstack/rudder-integration-braze-react-native": "*",
"@rudderstack/rudder-integration-clevertap-react-native": "*",
"@rudderstack/rudder-integration-facebook-react-native": "*",
"@rudderstack/rudder-integration-firebase-react-native": "*",
"@rudderstack/rudder-integration-moengage-react-native": "*",
"@rudderstack/rudder-integration-singular-react-native": "*",
Expand Down
2 changes: 2 additions & 0 deletions apps/example/src/app/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import amplitude from '@rudderstack/rudder-integration-amplitude-react-native';
import appcenter from '@rudderstack/rudder-integration-appcenter-react-native';
import braze from '@rudderstack/rudder-integration-braze-react-native';
import clevertap from '@rudderstack/rudder-integration-clevertap-react-native';
import facebook from '@rudderstack/rudder-integration-facebook-react-native';
import firebase from '@rudderstack/rudder-integration-firebase-react-native';
import moengage from '@rudderstack/rudder-integration-moengage-react-native';
import singular from '@rudderstack/rudder-integration-singular-react-native';
Expand Down Expand Up @@ -109,6 +110,7 @@ const initRudderReactNativeSDK = async () => {
appcenter,
braze,
clevertap,
facebook,
firebase,
moengage,
singular,
Expand Down
20 changes: 20 additions & 0 deletions libs/rudder-integration-facebook-react-native/.eslintrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"extends": ["plugin:@nrwl/nx/react", "../../.eslintrc.json"],
"ignorePatterns": ["!**/*", "public", ".cache", "node_modules"],
"overrides": [
{
"files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
"rules": {
"@typescript-eslint/ban-ts-comment": "off"
}
},
{
"files": ["*.ts", "*.tsx"],
"rules": {}
},
{
"files": ["*.js", "*.jsx"],
"rules": {}
}
]
}
Empty file.
Empty file.
18 changes: 18 additions & 0 deletions libs/rudder-integration-facebook-react-native/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# rudder-integration-facebook-react-native

## Getting started

`$ npm install @rudderstack/rudder-integration-facebook-react-native --save`

### Mostly automatic installation

`$ react-native link rudder-integration-facebook-react-native`

## Usage

```javascript
import RudderIntegrationFacebookReactNative from '@rudderstack/rudder-integration-facebook-react-native';

// TODO: What to do with the module?
RudderIntegrationFacebookReactNative;
```
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
describe('Facebook Integration Package', () => {
it('should have test configs', () => {
expect(true).toBeTruthy();
});
});
15 changes: 15 additions & 0 deletions libs/rudder-integration-facebook-react-native/android/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# README

If you want to publish the lib as a maven dependency, follow these steps before publishing a new version to npm:

1. Be sure to have the Android [SDK](https://developer.android.com/studio/index.html) and [NDK](https://developer.android.com/ndk/guides/index.html) installed
2. Be sure to have a `local.properties` file in this folder that points to the Android SDK and NDK

```
ndk.dir=/Users/{username}/Library/Android/sdk/ndk-bundle
sdk.dir=/Users/{username}/Library/Android/sdk
```

3. Delete the `maven` folder
4. Run `./gradlew installArchives`
5. Verify that latest set of generated files is in the maven folder with the correct version number
Loading

0 comments on commit 8cac746

Please sign in to comment.