Skip to content

Commit e7d3530

Browse files
authored
feat: add dynamic libs support in brownfield-gradle-plugin (#128)
* feat: add dynamic libs support in brownfield-gradle-plugin * docs: update readme * chore: fix CI * chore: fix CI * chore: fix CI
1 parent 992cd94 commit e7d3530

File tree

7 files changed

+100
-62
lines changed

7 files changed

+100
-62
lines changed

.github/workflows/build.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,9 @@ jobs:
5353
steps:
5454
- uses: actions/checkout@v4
5555

56+
- name: Select Xcode 16.4
57+
run: sudo xcode-select -s /Applications/Xcode_16.4.app
58+
5659
- name: Setup Node.js
5760
uses: actions/setup-node@v4
5861
with:
@@ -82,4 +85,4 @@ jobs:
8285
- name: Build iOS App
8386
run: |
8487
cd example/swift
85-
xcodebuild -workspace SwiftExample.xcworkspace -scheme SwiftExample -configuration Debug -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 15' build CODE_SIGNING_ALLOWED=NO
88+
xcodebuild -workspace SwiftExample.xcworkspace -scheme SwiftExample -configuration Debug -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 16' build CODE_SIGNING_ALLOWED=NO

example/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
"babel-plugin-module-resolver": "5.0.0",
2727
"react-native-builder-bob": "^0.37.0",
2828
"react-native-safe-area-context": "^5.3.0",
29-
"react-native-screens": "^4.9.1"
29+
"react-native-screens": "^4.15.2"
3030
},
3131
"engines": {
3232
"node": ">=18"

example/swift/Podfile.lock

Lines changed: 54 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1527,7 +1527,7 @@ PODS:
15271527
- React-jsi (= 0.78.0)
15281528
- ReactAppDependencyProvider (0.78.0):
15291529
- ReactCodegen
1530-
- ReactBrownfield (1.0.0-rc.1):
1530+
- ReactBrownfield (1.2.0):
15311531
- DoubleConversion
15321532
- glog
15331533
- hermes-engine
@@ -1614,7 +1614,7 @@ PODS:
16141614
- React-logger (= 0.78.0)
16151615
- React-perflogger (= 0.78.0)
16161616
- React-utils (= 0.78.0)
1617-
- RNScreens (4.9.1):
1617+
- RNScreens (4.15.4):
16181618
- DoubleConversion
16191619
- glog
16201620
- hermes-engine
@@ -1635,9 +1635,9 @@ PODS:
16351635
- ReactCodegen
16361636
- ReactCommon/turbomodule/bridging
16371637
- ReactCommon/turbomodule/core
1638-
- RNScreens/common (= 4.9.1)
1638+
- RNScreens/common (= 4.15.4)
16391639
- Yoga
1640-
- RNScreens/common (4.9.1):
1640+
- RNScreens/common (4.15.4):
16411641
- DoubleConversion
16421642
- glog
16431643
- hermes-engine
@@ -1888,70 +1888,70 @@ SPEC CHECKSUMS:
18881888
fmt: a40bb5bd0294ea969aaaba240a927bd33d878cdd
18891889
glog: eb93e2f488219332457c3c4eafd2738ddc7e80b8
18901890
hermes-engine: b417d2b2aee3b89b58e63e23a51e02be91dc876d
1891-
RCT-Folly: e78785aa9ba2ed998ea4151e314036f6c49e6d82
1891+
RCT-Folly: 36fe2295e44b10d831836cc0d1daec5f8abcf809
18921892
RCTDeprecation: b2eecf2d60216df56bc5e6be5f063826d3c1ee35
18931893
RCTRequired: 78522de7dc73b81f3ed7890d145fa341f5bb32ea
18941894
RCTTypeSafety: c135dd2bf50402d87fd12884cbad5d5e64850edd
18951895
React: b229c49ed5898dab46d60f61ed5a0bfa2ee2fadb
18961896
React-callinvoker: 2ac508e92c8bd9cf834cc7d7787d94352e4af58f
1897-
React-Core: 325b4f6d9162ae8b9a6ff42fe78e260eb124180d
1898-
React-CoreModules: 558041e5258f70cd1092f82778d07b8b2ff01897
1899-
React-cxxreact: 8fff17cbe76e6a8f9991b59552e1235429f9c74b
1897+
React-Core: 13cdd1558d0b3f6d9d5a22e14d89150280e79f02
1898+
React-CoreModules: b07a6744f48305405e67c845ebf481b6551b712a
1899+
React-cxxreact: 1055a86c66ac35b4e80bd5fb766aed5f494dfff4
19001900
React-debug: 0a5fcdbacc6becba0521e910c1bcfdb20f32a3f6
1901-
React-defaultsnativemodule: 618dc50a0fad41b489997c3eb7aba3a74479fd14
1902-
React-domnativemodule: 7ba599afb6c2a7ec3eb6450153e2efe0b8747e9a
1903-
React-Fabric: 252112089d2c63308f4cbfade4010b6606db67d1
1904-
React-FabricComponents: 3c0f75321680d14d124438ab279c64ec2a3d13c4
1905-
React-FabricImage: 728b8061cdec2857ca885fd605ee03ad43ffca98
1901+
React-defaultsnativemodule: 4bb28fc97fee5be63a9ebf8f7a435cfe8ba69459
1902+
React-domnativemodule: b36a11c2597243d7563985028c51ece988d8ae33
1903+
React-Fabric: afc561718f25b2cd800b709d934101afe376a12c
1904+
React-FabricComponents: f4e0a4e18a27bf6d39cbf2a0b42f37a92fa4e37f
1905+
React-FabricImage: 37d8e8b672eda68a19d71143eb65148084efb325
19061906
React-featureflags: 19682e02ef5861d96b992af16a19109c3dfc1200
1907-
React-featureflagsnativemodule: 23528c7e7d50782b7ef0804168ba40bbaf1e86ab
1908-
React-graphics: fefe48f71bfe6f48fd037f59e8277b12e91b6be1
1909-
React-hermes: a9a0c8377627b5506ef9a7b6f60a805c306e3f51
1910-
React-idlecallbacksnativemodule: 7e2b6a3b70e042f89cd91dbd73c479bb39a72a7e
1911-
React-ImageManager: e3300996ac2e2914bf821f71e2f2c92ae6e62ae2
1912-
React-jserrorhandler: fa75876c662e5d7e79d6efc763fc9f4c88e26986
1913-
React-jsi: f3f51595cc4c089037b536368f016d4742bf9cf7
1914-
React-jsiexecutor: cca6c232db461e2fd213a11e9364cfa6fdaa20eb
1915-
React-jsinspector: 2bd4c9fddf189d6ec2abf4948461060502582bef
1916-
React-jsinspectortracing: a417d8a0ad481edaa415734b4dac81e3e5ee7dc6
1917-
React-jsitracing: 1ff7172c5b0522cbf6c98d82bdbb160e49b5804e
1918-
React-logger: 018826bfd51b9f18e87f67db1590bc510ad20664
1919-
React-Mapbuffer: 3c11cee7737609275c7b66bd0b1de475f094cedf
1920-
React-microtasksnativemodule: 843f352b32aacbe13a9c750190d34df44c3e6c2c
1921-
react-native-safe-area-context: 0f14bce545abcdfbff79ce2e3c78c109f0be283e
1922-
React-NativeModulesApple: 88433b6946778bea9c153e27b671de15411bf225
1923-
React-perflogger: 9e8d3c0dc0194eb932162812a168aa5dc662f418
1924-
React-performancetimeline: 5a2d6efef52bdcefac079c7baa30934978acd023
1907+
React-featureflagsnativemodule: d7cddf6d907b4e5ab84f9e744b7e88461656e48c
1908+
React-graphics: b0f78580cdaf5800d25437e3d41cc6c3d83b7aea
1909+
React-hermes: 71186f872c932e4574d5feb3ed754dda63a0b3bd
1910+
React-idlecallbacksnativemodule: dd2af19cdd3bc55149d17a2409ed72b694dfbe9c
1911+
React-ImageManager: a77dde8d5aa6a2b6962c702bf3a47695ef0aa32b
1912+
React-jserrorhandler: 9c14e89f12d5904257a79aaf84a70cd2e5ac07ba
1913+
React-jsi: 0775a66820496769ad83e629f0f5cce621a57fc7
1914+
React-jsiexecutor: 2cf5ba481386803f3c88b85c63fa102cba5d769e
1915+
React-jsinspector: 8052d532bb7a98b6e021755674659802fb140cc5
1916+
React-jsinspectortracing: bdd8fd0adcb4813663562e7874c5842449df6d8a
1917+
React-jsitracing: 2bab3bf55de3d04baf205def375fa6643c47c794
1918+
React-logger: 795cd5055782db394f187f9db0477d4b25b44291
1919+
React-Mapbuffer: 0502faf46cab8fb89cfc7bf3e6c6109b6ef9b5de
1920+
React-microtasksnativemodule: 663bc64e3a96c5fc91081923ae7481adc1359a78
1921+
react-native-safe-area-context: 286b3e7b5589795bb85ffc38faf4c0706c48a092
1922+
React-NativeModulesApple: 16fbd5b040ff6c492dacc361d49e63cba7a6a7a1
1923+
React-perflogger: ab51b7592532a0ea45bf6eed7e6cae14a368b678
1924+
React-performancetimeline: bc2e48198ec814d578ac8401f65d78a574358203
19251925
React-RCTActionSheet: 592674cf61142497e0e820688f5a696e41bf16dd
1926-
React-RCTAnimation: e6d669872f9b3b4ab9527aab283b7c49283236b7
1927-
React-RCTAppDelegate: de2343fe08be4c945d57e0ecce44afcc7dd8fc03
1928-
React-RCTBlob: 3e2dce94c56218becc4b32b627fc2293149f798d
1929-
React-RCTFabric: cac2c033381d79a5956e08550b0220cb2d78ea93
1930-
React-RCTFBReactNativeSpec: d10ca5e0ccbfeac8c047361fedf8e4ac653887b6
1931-
React-RCTImage: dc04b176c022d12a8f55ae7a7279b1e091066ae0
1932-
React-RCTLinking: 88f5e37fe4f26fbc80791aa2a5f01baf9b9a3fd5
1933-
React-RCTNetwork: f213693565efbd698b8e9c18d700a514b49c0c8e
1934-
React-RCTSettings: a2d32a90c45a3575568cad850abc45924999b8a5
1935-
React-RCTText: 54cdcd1cbf6f6a91dc6317f5d2c2b7fc3f6bf7a0
1936-
React-RCTVibration: 11dae0e7f577b5807bb7d31e2e881eb46f854fd4
1926+
React-RCTAnimation: 8fbb8dba757b49c78f4db403133ab6399a4ce952
1927+
React-RCTAppDelegate: 7f88baa8cb4e5d6c38bb4d84339925c70c9ac864
1928+
React-RCTBlob: f89b162d0fe6b570a18e755eb16cbe356d3c6d17
1929+
React-RCTFabric: 8ad6d875abe6e87312cef90e4b15ef7f6bed72e6
1930+
React-RCTFBReactNativeSpec: 8c29630c2f379c729300e4c1e540f3d1b78d1936
1931+
React-RCTImage: ccac9969940f170503857733f9a5f63578e106e1
1932+
React-RCTLinking: d82427bbf18415a3732105383dff119131cadd90
1933+
React-RCTNetwork: 12ad4d0fbde939e00251ca5ca890da2e6825cc3c
1934+
React-RCTSettings: e7865bf9f455abf427da349c855f8644b5c39afa
1935+
React-RCTText: 2cdfd88745059ec3202a0842ea75a956c7d6f27d
1936+
React-RCTVibration: a3a1458e6230dfd64b3768ebc0a4aac430d9d508
19371937
React-rendererconsistency: 64e897e00d2568fd8dfe31e2496f80e85c0aaad1
1938-
React-rendererdebug: 41ce452460c44bba715d9e41d5493a96de277764
1938+
React-rendererdebug: a3f6d3ae7d2fa0035885026756281c07ee32479e
19391939
React-rncore: 58748c2aa445f56b99e5118dad0aedb51c40ce9f
1940-
React-RuntimeApple: 7785ed0d8ae54da65a88736bb63ca97608a6d933
1941-
React-RuntimeCore: 6029ea70bc77f98cfd43ebe69217f14e93ba1f12
1940+
React-RuntimeApple: f0fda7bacabd32daa099cfda8f07466c30acd149
1941+
React-RuntimeCore: 683ee0b6a76d4b4bf6fbf83a541895b4887cc636
19421942
React-runtimeexecutor: a188df372373baf5066e6e229177836488799f80
1943-
React-RuntimeHermes: a264609c28b796edfffc8ae4cb8fad1773ab948b
1944-
React-runtimescheduler: 23ec3a1e0fb1ec752d1a9c1fb15258c30bfc7222
1943+
React-RuntimeHermes: 907c8e9bec13ea6466b94828c088c24590d4d0b6
1944+
React-runtimescheduler: a2e2a39125dd6426b5d8b773f689d660cd7c5f60
19451945
React-timing: bb220a53a795ed57976a4855c521f3de2f298fe5
1946-
React-utils: 3b054aaebe658fc710a8d239d0e4b9fd3e0b78f9
1947-
ReactAppDependencyProvider: a1fb08dfdc7ebc387b2e54cfc9decd283ed821d8
1948-
ReactBrownfield: f2e119f0241af9303f55556a63385efc58ce49b7
1949-
ReactCodegen: 008c319179d681a6a00966edfc67fda68f9fbb2e
1950-
ReactCommon: 0c097b53f03d6bf166edbcd0915da32f3015dd90
1951-
RNScreens: 0d4cb9afe052607ad0aa71f645a88bb7c7f2e64c
1946+
React-utils: 300d8bbb6555dcffaca71e7a0663201b5c7edbbc
1947+
ReactAppDependencyProvider: f2e81d80afd71a8058589e19d8a134243fa53f17
1948+
ReactBrownfield: bc84c03c54df3e69198697e9709c515cd15cea11
1949+
ReactCodegen: a63a0ab6ae824aef2e8c744981edd718b16eb9f2
1950+
ReactCommon: 3d39389f8e2a2157d5c999f8fba57bd1c8f226f0
1951+
RNScreens: afc14ca82e6acb997c2a866b471f9d66823a08b5
19521952
SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748
19531953
Yoga: afd04ff05ebe0121a00c468a8a3c8080221cb14c
19541954

19551955
PODFILE CHECKSUM: dd9bed4f3821ab08d739dbded562f749348cd4d7
19561956

1957-
COCOAPODS: 1.15.2
1957+
COCOAPODS: 1.16.2

example/yarn.lock

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6164,7 +6164,7 @@ __metadata:
61646164
react-native: 0.78.0
61656165
react-native-builder-bob: ^0.37.0
61666166
react-native-safe-area-context: ^5.3.0
6167-
react-native-screens: ^4.9.1
6167+
react-native-screens: ^4.15.2
61686168
languageName: unknown
61696169
linkType: soft
61706170

@@ -6200,6 +6200,16 @@ __metadata:
62006200
languageName: node
62016201
linkType: hard
62026202

6203+
"react-native-is-edge-to-edge@npm:^1.2.1":
6204+
version: 1.2.1
6205+
resolution: "react-native-is-edge-to-edge@npm:1.2.1"
6206+
peerDependencies:
6207+
react: "*"
6208+
react-native: "*"
6209+
checksum: 8fb6d8ab7b953c7d7cec8c987cef24f1c5348a293a85cb49c7c53b54ef110c0ca746736ae730e297603c8c76020df912e93915fb17518c4f2f91143757177aba
6210+
languageName: node
6211+
linkType: hard
6212+
62036213
"react-native-safe-area-context@npm:^5.3.0":
62046214
version: 5.3.0
62056215
resolution: "react-native-safe-area-context@npm:5.3.0"
@@ -6210,16 +6220,17 @@ __metadata:
62106220
languageName: node
62116221
linkType: hard
62126222

6213-
"react-native-screens@npm:^4.9.1":
6214-
version: 4.9.1
6215-
resolution: "react-native-screens@npm:4.9.1"
6223+
"react-native-screens@npm:^4.15.2":
6224+
version: 4.15.4
6225+
resolution: "react-native-screens@npm:4.15.4"
62166226
dependencies:
62176227
react-freeze: ^1.0.0
6228+
react-native-is-edge-to-edge: ^1.2.1
62186229
warn-once: ^0.1.0
62196230
peerDependencies:
62206231
react: "*"
62216232
react-native: "*"
6222-
checksum: f271a6e2cd3ddbba5fb62a570d70832debe52ce80589ba8ed44491b06be67aa6a1dac6a3951fa0f202377c63dbb3ce7f832bcc9df6a466602d957941c9f1e514
6233+
checksum: e0e5fbfcb77f0cd1b5358faa09b46661ef26fbcfa191ac49019967f2068feccf7cd3fa83e8dd7d52207443cd5f6263831440c365ba276fbb97def596a77626bb
62236234
languageName: node
62246235
linkType: hard
62256236

gradle-plugins/react/README.md

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,8 +131,9 @@ dependencies {
131131
```
132132

133133
<hr/>
134+
<br/>
134135

135-
- **Expo Support**
136+
**Expo Support**
136137

137138
By default expo support is disabled. You can enable it by setting the following to `true`:
138139

@@ -144,6 +145,19 @@ reactBrownfield {
144145

145146
This will take care of linking the expo dependencies like `expo-image` to your AAR.
146147

148+
<hr/>
149+
<br/>
150+
151+
**Dynamic libs**
152+
153+
By default only `libappmodules.so` and `libreact_codegen*.so` are bundled with the aar. If you would like to bundle other dynamic libs, you can define those in the `reactBrownfield` extension as shown below:
154+
155+
```kts
156+
reactBrownfield {
157+
dynamicLibs = listOf("libreact-native-mmkv.so", "libreact-native-fs-turbo.so")
158+
}
159+
```
160+
147161
<hr/>
148162

149163
## Tooling

gradle-plugins/react/brownfield/src/main/kotlin/com/callstack/react/brownfield/plugin/RNSourceSets.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ object RNSourceSets {
125125
)
126126
it.into(project.rootProject.file("$projectName/libs$capitalisedBuildType"))
127127
it.include("**/libappmodules.so", "**/libreact_codegen_*.so")
128+
extension.dynamicLibs.forEach { lib -> it.include("**/$lib") }
128129
}
129130

130131
project.tasks.named("preBuild").configure {

gradle-plugins/react/brownfield/src/main/kotlin/com/callstack/react/brownfield/utils/Extension.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,13 @@ open class Extension {
3636
* Default value is `false`
3737
*/
3838
var isExpo = false
39+
40+
/**
41+
* List of dynamic libs (.so) files that you wish to bundle with
42+
* the aar.
43+
*
44+
* By default only `libappmodules.so` and `libreact_codegen_*.so` are
45+
* bundled.
46+
*/
47+
var dynamicLibs = listOf<String>()
3948
}

0 commit comments

Comments
 (0)