{"id":4837,"date":"2026-07-19T21:33:19","date_gmt":"2026-07-19T16:03:19","guid":{"rendered":"https:\/\/itsupportwale.com\/blog\/mastering-react-native-build-cross-platform-apps-faster\/"},"modified":"2026-07-19T21:33:19","modified_gmt":"2026-07-19T16:03:19","slug":"mastering-react-native-build-cross-platform-apps-faster","status":"publish","type":"post","link":"https:\/\/itsupportwale.com\/blog\/mastering-react-native-build-cross-platform-apps-faster\/","title":{"rendered":"Mastering React Native: Build Cross-Platform Apps Faster"},"content":{"rendered":"<p>text<br \/>\n$ npx react-native run-android<br \/>\ninfo Starting JS server&#8230;<br \/>\ninfo Building and installing the app on the device (failed reverse-proxy)&#8230;<\/p>\n<blockquote>\n<p>Task :app:installDebug FAILED<\/p>\n<\/blockquote>\n<p>FAILURE: Build failed with an exception.<\/p>\n<ul>\n<li>What went wrong:<br \/>\nExecution failed for task &#8216;:app:mergeLibDexDebug&#8217;.<\/p>\n<blockquote>\n<p>A failure occurred while executing com.android.build.gradle.internal.tasks.CheckDuplicatesRunnable<br \/>\n  Duplicate class com.facebook.jni.HybridData found in modules jetified-fbjni-0.5.1 (com.facebook.fbjni:fbjni:0.5.1) and jetified-hermes-android-0.74.2-debug (com.facebook.react:hermes-android:0.74.2)<\/p>\n<\/blockquote>\n<\/li>\n<\/ul>\n<p>Go to the documentation to learn how to Fix duplicate class errors:<br \/>\n  https:\/\/developer.android.com\/r\/tools\/gradle-multi-dex-error<\/p>\n<ul>\n<li>Try:<br \/>\nRun with &#8211;stacktrace option to get the stack trace. Run with &#8211;info or &#8211;debug option to get more log output. Run with &#8211;scan to get full insights.<\/li>\n<\/ul>\n<p>BUILD FAILED in 4m 12s<\/p>\n<pre class=\"codehilite\"><code>I remember when we thought the Bridge was the solution to all our problems. We were wrong. \n\nBack in the PhoneGap days, we were just happy to see a `console.log` show up in a Safari web inspector connected to a physical iPhone 4. We thought we were geniuses for wrapping a slow-as-molasses WebView in a native container and calling it an &quot;app.&quot; Then **react native** showed up, promising us the &quot;native&quot; feel without the &quot;native&quot; effort. They told us we could write JavaScript and get a real UI. They didn't tell us we\u2019d spend 40% of our lives fighting with Ruby versions and another 40% watching Gradle download the entire internet just to tell us that two versions of a C++ library are fighting for dominance in a `dex` file.\n\nSit down. Grab a drink. If you\u2019re going to survive a **react native** 0.74 migration, or even just a Tuesday morning build, you need to stop thinking like a web developer and start thinking like a demolition expert. One wrong move in your `node_modules`, and the whole thing comes down.\n\n## 1. The Dependency Hellscape: Why your `package.json` is a ticking time bomb.\n\nIn the web world, a minor version mismatch in a dependency usually just means a slightly larger bundle or a missing CSS feature. In **react native**, a minor version mismatch is a death sentence. You\u2019re not just managing JavaScript; you\u2019re managing a fragile ecosystem of Java, Kotlin, Objective-C, C++, and Swift.\n\nThe `package.json` is a lie. It\u2019s a list of suggestions, not a list of reality. When you see `^0.73.0`, you\u2019re inviting the chaos of the universe into your project. I\u2019ve seen teams lose an entire sprint because a transitive dependency\u2014something three levels deep that they didn't even know they were using\u2014decided to update its `android\/build.gradle` to use a newer version of the Android Gradle Plugin (AGP) that wasn't compatible with the current version of **react native**.\n\nHere is a war story for you. We had a production app for a major logistics firm. We added a simple library for SVG support. Everything worked on the dev machines. We pushed to the CI\/CD pipeline. The build failed. Why? Because the SVG library pulled in a version of `react-native-render-html` that had a peer dependency conflict with the core. The autolinking script tried to link a library that didn't exist in the iOS workspace, leading to a `Linker Command Failed with Exit Code 1`. \n\nIf you want to survive, you treat `yarn.lock` or `package-lock.json` like a holy relic. You don't just `npm install`. You audit. You use `npx react-native-clean-project` like a ritualistic cleansing. And for the love of all that is holy, you check your `node_modules` for duplicate versions of `fbjni`. If you see two versions of that library, your Android build is already dead; it just hasn't stopped breathing yet.\n\n## 2. The JSI and the Ghost of the Bridge: A Post-Mortem.\n\nFor years, we blamed &quot;The Bridge.&quot; The Bridge was that narrow, asynchronous pipe where we serialized everything into JSON, sent it to the native side, and waited for a response. It was like trying to build a skyscraper by sending instructions through a carrier pigeon. \n\nNow, we have the &quot;New Architecture.&quot; Fabric and TurboModules. They gave us the JSI (JavaScript Interface). No more JSON serialization. Now, JavaScript can hold a reference to a C++ HostObject. It sounds like heaven, doesn't it? It\u2019s not. It\u2019s just a different kind of hell.\n\nThe New Architecture requires you to write `codegen`. You have to define your specs in TypeScript or Flow, and then **react native** generates the C++ glue code. If you\u2019ve never had to debug a C++ stack trace inside a JavaScript environment, you haven't lived. You\u2019ll be looking at `AppDelegate.mm` or a `TurboModule` implementation, and suddenly you\u2019re dealing with memory management and pointer arithmetic.\n\n```cpp\n\/\/ This is the &quot;future&quot; they promised. \n\/\/ A snippet of a TurboModule C++ implementation.\n\/\/ Hope you remember your pointers, kid.\n\n#include &quot;NativeSampleModule.h&quot;\n\nnamespace facebook::react {\n\nNativeSampleModule::NativeSampleModule(std::shared_ptr&lt;CallInvoker&gt; jsInvoker)\n    : NativeSampleModuleSpecJSI(jsInvoker) {}\n\nstd::string NativeSampleModule::getString(jsi::Runtime&amp; rt, jsi::String stringArgument) {\n  return stringArgument.utf8(rt);\n}\n\n\/\/ If this fails, the app doesn't just 'red box'. \n\/\/ It crashes the entire OS process with a SIGSEGV.\n} \/\/ namespace facebook::react\n<\/code><\/pre>\n<p>The &#8220;Ghost of the Bridge&#8221; still haunts us because most of the ecosystem hasn&#8217;t fully migrated. You\u2019ll find yourself in a &#8220;hybrid&#8221; state where half your libraries use the old bridge and half use TurboModules. This &#8220;interop layer&#8221; is where performance goes to die. You\u2019re paying the memory overhead for both systems. It\u2019s like trying to run a marathon while carrying a bicycle on your back because you might hit a paved road eventually.<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_80 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<label for=\"ez-toc-cssicon-toggle-item-6a5ee8a080c8c\" class=\"ez-toc-cssicon-toggle-label\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/label><input type=\"checkbox\"  id=\"ez-toc-cssicon-toggle-item-6a5ee8a080c8c\"  aria-label=\"Toggle\" \/><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/itsupportwale.com\/blog\/mastering-react-native-build-cross-platform-apps-faster\/#3_Android_Gradle_Files_The_Place_Where_Joy_Goes_to_Die\" >3. Android Gradle Files: The Place Where Joy Goes to Die.<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/itsupportwale.com\/blog\/mastering-react-native-build-cross-platform-apps-faster\/#4_iOS_CocoaPods_and_the_Infinite_Rebuild_Loop\" >4. iOS CocoaPods and the Infinite Rebuild Loop.<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/itsupportwale.com\/blog\/mastering-react-native-build-cross-platform-apps-faster\/#5_State_Management_Overkill_Why_Redux_is_not_a_personality_trait\" >5. State Management Overkill: Why Redux is not a personality trait.<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/itsupportwale.com\/blog\/mastering-react-native-build-cross-platform-apps-faster\/#6_Performance_Tuning_When_the_Frame_Rate_Drops_to_Zero\" >6. Performance Tuning: When the Frame Rate Drops to Zero.<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/itsupportwale.com\/blog\/mastering-react-native-build-cross-platform-apps-faster\/#The_Final_Debrief\" >The Final Debrief<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/itsupportwale.com\/blog\/mastering-react-native-build-cross-platform-apps-faster\/#Related_Articles\" >Related Articles<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"3_Android_Gradle_Files_The_Place_Where_Joy_Goes_to_Die\"><\/span>3. Android Gradle Files: The Place Where Joy Goes to Die.<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>If you spend enough time in <strong>react native<\/strong>, you start to recognize the specific smell of a failing Gradle build. It smells like ozone and wasted billable hours. The <code>android\/build.gradle<\/code> and <code>android\/app\/build.gradle<\/code> files are the most dangerous files in your repository.<\/p>\n<p>The problem is that <strong>react native<\/strong> is a moving target. Version 0.73 moved to Java 17. Version 0.74 changed how the <code>hermes-engine<\/code> is consumed. If you\u2019re upgrading, you can\u2019t just change the version number in <code>package.json<\/code>. You have to go into the guts of the Android folder and perform surgery.<\/p>\n<p>Take ProGuard, for example. You want to shrink your APK? Great. Now your app crashes only in production because ProGuard decided that the C++ method names used by Hermes weren&#8217;t &#8220;important&#8221; and stripped them out. You\u2019ll spend three days staring at a <code>Mapping.txt<\/code> file trying to figure out why <code>com.facebook.react.bridge.NativeModule<\/code> disappeared.<\/p>\n<pre class=\"codehilite\"><code class=\"language-gradle\">\/\/ The ProGuard\/R8 rules you'll eventually copy-paste from a \n\/\/ 4-year-old StackOverflow post just to get the app to launch.\n-keep class com.facebook.hermes.unicode.** { *; }\n-keep class com.facebook.jni.** { *; }\n-keepattributes Signature, InnerClasses, EnclosingMethod\n-dontwarn com.facebook.react.**\n\n\/\/ And then you hit the 64k method limit because \n\/\/ your dependencies are bloated.\nandroid {\n    defaultConfig {\n        multiDexEnabled true\n    }\n}\n<\/code><\/pre>\n<p>And don&#8217;t get me started on the <code>ndk.abiFilters<\/code>. You\u2019ll build an APK that works on your Pixel, but the moment it hits a user with an older ARMv7 device, it\u2019s an instant crash because you forgot to include the right <code>.so<\/code> files. You\u2019re not a developer; you\u2019re a configuration manager who occasionally writes a <code>View<\/code>.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"4_iOS_CocoaPods_and_the_Infinite_Rebuild_Loop\"><\/span>4. iOS CocoaPods and the Infinite Rebuild Loop.<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>On the iOS side, we have CocoaPods. It\u2019s a dependency manager written in Ruby, which is the first sign of trouble. To run a <strong>react native<\/strong> app on iOS, you need the right version of Node, the right version of Ruby, the right version of Xcode, and the right version of the Command Line Tools. If any of these are off by a patch version, <code>pod install<\/code> will fail with a cryptic error about <code>ffi<\/code> or <code>deployment targets<\/code>.<\/p>\n<p>The M1\/M2 Mac transition was a bloodbath for <strong>react native<\/strong> developers. We spent a year prefixing every command with <code>arch -x86_64<\/code>. We were fighting the hardware, the OS, and the framework all at once. Even now, with 0.74, you\u2019ll find yourself stuck in an infinite rebuild loop. You change one line in <code>AppDelegate.mm<\/code> to initialize a library, and Xcode decides it needs to recompile 400 files, including the entire Yoga layout engine.<\/p>\n<pre class=\"codehilite\"><code class=\"language-objectivec\">\/\/ ios\/YourProject\/AppDelegate.mm\n\/\/ The &quot;New Architecture&quot; entry point. \n\/\/ One missing bracket here and Xcode will give you 200 unrelated errors.\n\n#import &quot;AppDelegate.h&quot;\n#import &lt;React\/RCTBundleURLProvider.h&gt;\n#import &lt;React\/RCTRootView.h&gt;\n#import &lt;React\/RCTAppSetupUtils.h&gt;\n\n@implementation AppDelegate\n\n- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions\n{\n  self.moduleName = @&quot;YourProject&quot;;\n  \/\/ You used to just init the bridge. Now you have to manage the \n  \/\/ Fabric TurboModule delegate and the concurrent root.\n  self.initialProps = @{};\n\n  return [super application:application didFinishLaunchingWithOptions:launchOptions];\n}\n<\/code><\/pre>\n<p>The real pain is the <code>Podfile.lock<\/code>. You\u2019ll have a developer on a Mac with Xcode 15.3 and another on 15.0. Their <code>Podfile.lock<\/code> will keep fighting each other, changing checksums every time someone runs <code>pod install<\/code>. You\u2019ll end up with merge conflicts in a 5,000-line generated file. My advice? If the pods are working, don&#8217;t touch them. Don&#8217;t even look at them. If you breathe too hard on the <code>ios<\/code> folder, you\u2019ll be spending your afternoon deleting <code>DerivedData<\/code> and praying to the ghost of Steve Jobs.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"5_State_Management_Overkill_Why_Redux_is_not_a_personality_trait\"><\/span>5. State Management Overkill: Why Redux is not a personality trait.<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Somewhere along the line, people decided that a simple Todo list app needed a &#8220;Single Source of Truth&#8221; with actions, reducers, sagas, and selectors. I\u2019ve walked into projects where it takes 15 files to update a boolean. <\/p>\n<p>In <strong>react native<\/strong>, state management isn&#8217;t just about data flow; it&#8217;s about performance. Every time your &#8220;Global Store&#8221; updates, you risk triggering a re-render of the entire component tree. On a web browser, you might not notice. On a mid-range Android phone from 2021, you\u2019ll see the frame rate drop to single digits.<\/p>\n<p>People treat Redux like a personality trait. They refuse to use local state even for a text input. So, every keystroke travels from the native text input, across the bridge (or JSI), into the Redux store, through a series of reducers, and back down to the component. It\u2019s a 300ms round trip for a single character. The user is typing faster than the state can keep up, and suddenly the cursor is jumping around like it\u2019s possessed.<\/p>\n<p>Then came the &#8220;Context API&#8221; era, where everyone thought they could replace Redux. They just ended up creating &#8220;Provider Hell,&#8221; where changing the user&#8217;s theme color causes the entire navigation stack to unmount and remount. <\/p>\n<p>If you want to survive, use Zustand or signals. Or better yet, use local state. Not everything needs to be global. Your &#8220;User Profile&#8221; doesn&#8217;t need to know that the &#8220;Settings Toggle&#8221; on page 4 was clicked. Stop over-engineering your data and start worrying about your memory footprint. Hermes is good, but it\u2019s not a miracle worker. If you leak memory in your state, Hermes will eventually just give up and let the OS kill your app.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"6_Performance_Tuning_When_the_Frame_Rate_Drops_to_Zero\"><\/span>6. Performance Tuning: When the Frame Rate Drops to Zero.<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>This is where the men are separated from the boys. In <strong>react native<\/strong>, you have two main threads: the UI thread (Main thread) and the JS thread. If the JS thread is busy calculating the Fibonacci sequence or parsing a 5MB JSON response, your UI thread is stuck. The user taps a button, and&#8230; nothing. The app is frozen.<\/p>\n<p>The Yoga layout engine is what calculates the positions of your views. It\u2019s a C++ implementation of Flexbox. It\u2019s fast, but it\u2019s not free. If you have a deeply nested view hierarchy, Yoga has to do a lot of math. If you\u2019re doing that inside a <code>FlatList<\/code> with 500 items, you\u2019re going to see the &#8220;White Screen of Death&#8221; while scrolling.<\/p>\n<pre class=\"codehilite\"><code class=\"language-javascript\">\/\/ The classic &quot;Why is my app slow?&quot; snippet.\n\/\/ Using an anonymous function in a render item.\n\/\/ Every scroll tick creates a new function, triggering a re-render.\n\n&lt;FlatList\n  data={hugeArray}\n  renderItem={({ item }) =&gt; (\n    &lt;TouchableOpacity onPress={() =&gt; handlePress(item.id)}&gt; \n      &lt;Text&gt;{item.title}&lt;\/Text&gt;\n    &lt;\/TouchableOpacity&gt;\n  )}\n  \/\/ If you don't use getItemLayout, \n  \/\/ Yoga has to measure every item on the fly.\n\/&gt;\n<\/code><\/pre>\n<p>I once worked on an app that had a &#8220;smooth&#8221; 60fps on the iPhone 15 Pro, but on a Samsung A12, it was a slideshow. We found out the developer was using <code>onLayout<\/code> to calculate the height of every element to manually position a floating action button. Every time the layout changed, it triggered a state update, which triggered a re-render, which triggered another <code>onLayout<\/code>. It was a feedback loop that consumed 100% of the CPU.<\/p>\n<p>You have to learn to use the Profiler. You have to understand why <code>useMemo<\/code> and <code>useCallback<\/code> exist\u2014not because they\u2019re &#8220;cool,&#8221; but because they are the only things keeping your app from collapsing under its own weight. You have to look at the &#8220;Shadow Tree&#8221; and realize that every <code>&lt;View&gt;<\/code> you add is a memory allocation on the native side.<\/p>\n<p>And for the love of everything, use <code>FlashList<\/code> from Shopify instead of the standard <code>FlatList<\/code>. The standard <code>FlatList<\/code> doesn&#8217;t actually recycle views; it just unmounts them and mounts new ones. It\u2019s a garbage collection nightmare. <code>FlashList<\/code> actually does what a native list does: it reuses the underlying native views. It\u2019s the difference between a professional tool and a toy.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"The_Final_Debrief\"><\/span>The Final Debrief<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>You\u2019re still here? Good. You might just have the stomach for this. <\/p>\n<p><strong>react native<\/strong> is a powerful tool, but it\u2019s a deceptive one. It lures you in with the promise of &#8220;Learn Once, Write Anywhere,&#8221; but the reality is &#8220;Learn Everything, Debug Everywhere.&#8221; You\u2019ll spend more time in <code>Xcode<\/code> and <code>Android Studio<\/code> than you will in <code>VS Code<\/code> if you\u2019re doing anything meaningful.<\/p>\n<p>If you want a &#8220;seamless&#8221; experience (wait, I&#8217;m not allowed to say that), if you want a smooth ride, go native. Write Swift. Write Kotlin. But if you\u2019re stuck in the trenches with us, if you need to ship one codebase to two platforms on a startup budget, then welcome to the war. <\/p>\n<p>Just remember:<br \/>\n1. Lock your versions.<br \/>\n2. Respect the JSI but fear the C++.<br \/>\n3. Keep your Gradle files clean and your ProGuard rules tighter.<br \/>\n4. Don&#8217;t let CocoaPods smell your fear.<br \/>\n5. Keep your state local and your lists recycled.<\/p>\n<p>Now, get out of here. I hear a <code>yarn install<\/code> calling your name, and you\u2019ve got about 4,000 peer dependency warnings to ignore before the sun comes up. Just don&#8217;t come crying to me when your <code>AppDelegate.mm<\/code> won&#8217;t compile because you forgot to add the <code>RCTAppDelegate<\/code> header. You\u2019re on your own now. <\/p>\n<p>And hey&#8230; if you see a &#8220;Bridge is disconnected&#8221; error? Just restart the Metro bundler. It\u2019s the only &#8220;magic&#8221; we have left.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Related_Articles\"><\/span>Related Articles<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Explore more insights and best practices:<\/p>\n<ul>\n<li><a href=\"https:\/\/itsupportwale.com\/blog\/what-is-aws-the-ultimate-guide-to-amazon-web-services\/\">What Is Aws The Ultimate Guide To Amazon Web Services<\/a><\/li>\n<li><a href=\"https:\/\/itsupportwale.com\/blog\/master-python-code-essential-tips-and-best-practices\/\">Master Python Code Essential Tips And Best Practices<\/a><\/li>\n<li><a href=\"https:\/\/itsupportwale.com\/blog\/cybersecurity-best-practices-guide\/\">Cybersecurity Best Practices Guide<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>text $ npx react-native run-android info Starting JS server&#8230; info Building and installing the app on the device (failed reverse-proxy)&#8230; Task :app:installDebug FAILED FAILURE: Build failed with an exception. What went wrong: Execution failed for task &#8216;:app:mergeLibDexDebug&#8217;. A failure occurred while executing com.android.build.gradle.internal.tasks.CheckDuplicatesRunnable Duplicate class com.facebook.jni.HybridData found in modules jetified-fbjni-0.5.1 (com.facebook.fbjni:fbjni:0.5.1) and jetified-hermes-android-0.74.2-debug (com.facebook.react:hermes-android:0.74.2) Go &#8230; <a title=\"Mastering React Native: Build Cross-Platform Apps Faster\" class=\"read-more\" href=\"https:\/\/itsupportwale.com\/blog\/mastering-react-native-build-cross-platform-apps-faster\/\" aria-label=\"Read more  on Mastering React Native: Build Cross-Platform Apps Faster\">Read more<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-4837","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Mastering React Native: Build Cross-Platform Apps Faster - ITSupportWale<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/itsupportwale.com\/blog\/mastering-react-native-build-cross-platform-apps-faster\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Mastering React Native: Build Cross-Platform Apps Faster - ITSupportWale\" \/>\n<meta property=\"og:description\" content=\"text $ npx react-native run-android info Starting JS server&#8230; info Building and installing the app on the device (failed reverse-proxy)&#8230; Task :app:installDebug FAILED FAILURE: Build failed with an exception. What went wrong: Execution failed for task &#8216;:app:mergeLibDexDebug&#8217;. A failure occurred while executing com.android.build.gradle.internal.tasks.CheckDuplicatesRunnable Duplicate class com.facebook.jni.HybridData found in modules jetified-fbjni-0.5.1 (com.facebook.fbjni:fbjni:0.5.1) and jetified-hermes-android-0.74.2-debug (com.facebook.react:hermes-android:0.74.2) Go ... Read more\" \/>\n<meta property=\"og:url\" content=\"https:\/\/itsupportwale.com\/blog\/mastering-react-native-build-cross-platform-apps-faster\/\" \/>\n<meta property=\"og:site_name\" content=\"ITSupportWale\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Itsupportwale-298547177495978\" \/>\n<meta property=\"article:published_time\" content=\"2026-07-19T16:03:19+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/itsupportwale.com\/blog\/wp-content\/uploads\/2021\/05\/android-chrome-512x512-1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"512\" \/>\n\t<meta property=\"og:image:height\" content=\"512\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Techie\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Techie\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/itsupportwale.com\/blog\/mastering-react-native-build-cross-platform-apps-faster\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/itsupportwale.com\/blog\/mastering-react-native-build-cross-platform-apps-faster\/\"},\"author\":{\"name\":\"Techie\",\"@id\":\"https:\/\/itsupportwale.com\/blog\/#\/schema\/person\/8c5a2b3d36396e0a8fd91ec8242fd46d\"},\"headline\":\"Mastering React Native: Build Cross-Platform Apps Faster\",\"datePublished\":\"2026-07-19T16:03:19+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/itsupportwale.com\/blog\/mastering-react-native-build-cross-platform-apps-faster\/\"},\"wordCount\":1520,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/itsupportwale.com\/blog\/#organization\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/itsupportwale.com\/blog\/mastering-react-native-build-cross-platform-apps-faster\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/itsupportwale.com\/blog\/mastering-react-native-build-cross-platform-apps-faster\/\",\"url\":\"https:\/\/itsupportwale.com\/blog\/mastering-react-native-build-cross-platform-apps-faster\/\",\"name\":\"Mastering React Native: Build Cross-Platform Apps Faster - ITSupportWale\",\"isPartOf\":{\"@id\":\"https:\/\/itsupportwale.com\/blog\/#website\"},\"datePublished\":\"2026-07-19T16:03:19+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/itsupportwale.com\/blog\/mastering-react-native-build-cross-platform-apps-faster\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/itsupportwale.com\/blog\/mastering-react-native-build-cross-platform-apps-faster\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/itsupportwale.com\/blog\/mastering-react-native-build-cross-platform-apps-faster\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/itsupportwale.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Mastering React Native: Build Cross-Platform Apps Faster\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/itsupportwale.com\/blog\/#website\",\"url\":\"https:\/\/itsupportwale.com\/blog\/\",\"name\":\"ITSupportWale\",\"description\":\"Tips, Tricks, Fixed-Errors, Tutorials &amp; Guides\",\"publisher\":{\"@id\":\"https:\/\/itsupportwale.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/itsupportwale.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/itsupportwale.com\/blog\/#organization\",\"name\":\"itsupportwale\",\"url\":\"https:\/\/itsupportwale.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/itsupportwale.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/itsupportwale.com\/blog\/wp-content\/uploads\/2023\/09\/cropped-Logo-trans-without-slogan.png\",\"contentUrl\":\"https:\/\/itsupportwale.com\/blog\/wp-content\/uploads\/2023\/09\/cropped-Logo-trans-without-slogan.png\",\"width\":1119,\"height\":144,\"caption\":\"itsupportwale\"},\"image\":{\"@id\":\"https:\/\/itsupportwale.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Itsupportwale-298547177495978\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/itsupportwale.com\/blog\/#\/schema\/person\/8c5a2b3d36396e0a8fd91ec8242fd46d\",\"name\":\"Techie\",\"sameAs\":[\"https:\/\/itsupportwale.com\",\"iswblogadmin\"],\"url\":\"https:\/\/itsupportwale.com\/blog\/author\/iswblogadmin\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Mastering React Native: Build Cross-Platform Apps Faster - ITSupportWale","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/itsupportwale.com\/blog\/mastering-react-native-build-cross-platform-apps-faster\/","og_locale":"en_US","og_type":"article","og_title":"Mastering React Native: Build Cross-Platform Apps Faster - ITSupportWale","og_description":"text $ npx react-native run-android info Starting JS server&#8230; info Building and installing the app on the device (failed reverse-proxy)&#8230; Task :app:installDebug FAILED FAILURE: Build failed with an exception. What went wrong: Execution failed for task &#8216;:app:mergeLibDexDebug&#8217;. A failure occurred while executing com.android.build.gradle.internal.tasks.CheckDuplicatesRunnable Duplicate class com.facebook.jni.HybridData found in modules jetified-fbjni-0.5.1 (com.facebook.fbjni:fbjni:0.5.1) and jetified-hermes-android-0.74.2-debug (com.facebook.react:hermes-android:0.74.2) Go ... Read more","og_url":"https:\/\/itsupportwale.com\/blog\/mastering-react-native-build-cross-platform-apps-faster\/","og_site_name":"ITSupportWale","article_publisher":"https:\/\/www.facebook.com\/Itsupportwale-298547177495978","article_published_time":"2026-07-19T16:03:19+00:00","og_image":[{"width":512,"height":512,"url":"https:\/\/itsupportwale.com\/blog\/wp-content\/uploads\/2021\/05\/android-chrome-512x512-1.png","type":"image\/png"}],"author":"Techie","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Techie","Est. reading time":"13 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/itsupportwale.com\/blog\/mastering-react-native-build-cross-platform-apps-faster\/#article","isPartOf":{"@id":"https:\/\/itsupportwale.com\/blog\/mastering-react-native-build-cross-platform-apps-faster\/"},"author":{"name":"Techie","@id":"https:\/\/itsupportwale.com\/blog\/#\/schema\/person\/8c5a2b3d36396e0a8fd91ec8242fd46d"},"headline":"Mastering React Native: Build Cross-Platform Apps Faster","datePublished":"2026-07-19T16:03:19+00:00","mainEntityOfPage":{"@id":"https:\/\/itsupportwale.com\/blog\/mastering-react-native-build-cross-platform-apps-faster\/"},"wordCount":1520,"commentCount":0,"publisher":{"@id":"https:\/\/itsupportwale.com\/blog\/#organization"},"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/itsupportwale.com\/blog\/mastering-react-native-build-cross-platform-apps-faster\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/itsupportwale.com\/blog\/mastering-react-native-build-cross-platform-apps-faster\/","url":"https:\/\/itsupportwale.com\/blog\/mastering-react-native-build-cross-platform-apps-faster\/","name":"Mastering React Native: Build Cross-Platform Apps Faster - ITSupportWale","isPartOf":{"@id":"https:\/\/itsupportwale.com\/blog\/#website"},"datePublished":"2026-07-19T16:03:19+00:00","breadcrumb":{"@id":"https:\/\/itsupportwale.com\/blog\/mastering-react-native-build-cross-platform-apps-faster\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/itsupportwale.com\/blog\/mastering-react-native-build-cross-platform-apps-faster\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/itsupportwale.com\/blog\/mastering-react-native-build-cross-platform-apps-faster\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/itsupportwale.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Mastering React Native: Build Cross-Platform Apps Faster"}]},{"@type":"WebSite","@id":"https:\/\/itsupportwale.com\/blog\/#website","url":"https:\/\/itsupportwale.com\/blog\/","name":"ITSupportWale","description":"Tips, Tricks, Fixed-Errors, Tutorials &amp; Guides","publisher":{"@id":"https:\/\/itsupportwale.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/itsupportwale.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/itsupportwale.com\/blog\/#organization","name":"itsupportwale","url":"https:\/\/itsupportwale.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/itsupportwale.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/itsupportwale.com\/blog\/wp-content\/uploads\/2023\/09\/cropped-Logo-trans-without-slogan.png","contentUrl":"https:\/\/itsupportwale.com\/blog\/wp-content\/uploads\/2023\/09\/cropped-Logo-trans-without-slogan.png","width":1119,"height":144,"caption":"itsupportwale"},"image":{"@id":"https:\/\/itsupportwale.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Itsupportwale-298547177495978"]},{"@type":"Person","@id":"https:\/\/itsupportwale.com\/blog\/#\/schema\/person\/8c5a2b3d36396e0a8fd91ec8242fd46d","name":"Techie","sameAs":["https:\/\/itsupportwale.com","iswblogadmin"],"url":"https:\/\/itsupportwale.com\/blog\/author\/iswblogadmin\/"}]}},"_links":{"self":[{"href":"https:\/\/itsupportwale.com\/blog\/wp-json\/wp\/v2\/posts\/4837","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/itsupportwale.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/itsupportwale.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/itsupportwale.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/itsupportwale.com\/blog\/wp-json\/wp\/v2\/comments?post=4837"}],"version-history":[{"count":0,"href":"https:\/\/itsupportwale.com\/blog\/wp-json\/wp\/v2\/posts\/4837\/revisions"}],"wp:attachment":[{"href":"https:\/\/itsupportwale.com\/blog\/wp-json\/wp\/v2\/media?parent=4837"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/itsupportwale.com\/blog\/wp-json\/wp\/v2\/categories?post=4837"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/itsupportwale.com\/blog\/wp-json\/wp\/v2\/tags?post=4837"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}