+一、Android / iOS 原生基础对 RN 的重要性
1️⃣ RN 的本质:JS + Native Bridge
RN运行机制:
-
JS 写业务逻辑
-
通过 Bridge 调用原生模块(Java / Kotlin / Objective-C / Swift)
-
UI 最终还是原生渲染
👉 所以你可以理解为:
RN = 一个"调用原生能力的 JS 框架"
2️⃣ 为什么必须懂原生?
✅(1)第三方库很多依赖原生
比如:
-
相机(Camera)
-
地图(Map)
-
推送(Push)
-
文件系统(File)
这些库底层都是:
-
Android → Java / Kotlin
-
iOS → Objective-C / Swift
👉 不懂原生,你只能"会用但不会修"
✅(2)调试问题离不开原生
常见问题:
-
安卓闪退(Logcat)
-
iOS 编译失败(Xcode 报错)
-
权限问题(读写 / 相机 / 定位)
👉 这些都发生在原生层
✅(3)性能优化必须下沉原生
比如:
-
列表卡顿
-
动画掉帧
-
大量计算
👉 需要:
-
写 Native Module
-
或用 JSI / TurboModule
✅(4)打包发布必须操作原生工程
RN 的发布不是 npm build 就结束了:
-
Android → Gradle
-
iOS → Xcode
3️⃣ 建议掌握的原生基础(重点)
Android
-
Activity / 生命周期
-
Gradle 构建
-
权限机制
-
Logcat 日志
iOS
-
Xcode 基础
-
Provisioning Profile(证书)
-
Info.plist 配置
-
CocoaPods
二、RN 打包发布时原生端需要做的配置
这部分是实战重点,我直接按平台拆👇
📦 Android 打包发布
1️⃣ 生成签名(必须)
keytool -genkeypair -v -storetype PKCS12 -keystore my-release-key.keystore
然后在:
android/gradle.properties
配置:
MYAPP_RELEASE_STORE_FILE=my-release-key.keystore
MYAPP_RELEASE_KEY_ALIAS=xxx
MYAPP_RELEASE_STORE_PASSWORD=xxx
MYAPP_RELEASE_KEY_PASSWORD=xxx
2️⃣ 配置签名(build.gradle)
android/app/build.gradle
signingConfigs {
release {
storeFile file(MYAPP_RELEASE_STORE_FILE)
storePassword MYAPP_RELEASE_STORE_PASSWORD
keyAlias MYAPP_RELEASE_KEY_ALIAS
keyPassword MYAPP_RELEASE_KEY_PASSWORD
}
}
3️⃣ 开启 Proguard(混淆)
minifyEnabled true
shrinkResources true
避免包体积过大 + 保护代码
4️⃣ 配置版本号
versionCode 1
versionName "1.0"
5️⃣ 权限 & 网络配置
<uses-permission android:name="android.permission.INTERNET" />
6️⃣ 打包 APK / AAB
cd android
./gradlew assembleRelease
👉 Google Play 要用 .aab
🍎 iOS 打包发布
1️⃣ 证书 + 描述文件(最重要)
需要在 Apple Developer 配置:
-
App ID
-
证书(Certificate)
-
描述文件(Provisioning Profile)
2️⃣ 修改 Bundle Identifier
在 Xcode:
General → Bundle Identifier
3️⃣ Info.plist 权限配置
比如:
<key>NSCameraUsageDescription</key>
<string>需要访问相机</string>
4️⃣ Release 构建配置
cd ios
pod install
5️⃣ 打包
Xcode:
-
Product → Archive
-
上传 App Store Connect
6️⃣ JS Bundle 生成(关键)
RN 在发布时需要把 JS 打包:
npx react-native bundle \
--platform ios \
--dev false \
--entry-file index.js \
--bundle-output ios/main.jsbundle
三、总结一句话
👉 RN开发的真实门槛 = 前端能力 + 原生基础
如果你只会JS:
-
✅ 能开发
-
❌ 很难解决问题
如果你懂原生:
-
✅ 能调试、优化、扩展
-
✅ 能独立上线
四、给你的建议(结合你前端背景)
你已经是 7 年前端了,我建议这样补原生👇
优先级路线
1️⃣ Android 基础(优先)
2️⃣ RN 调试 + 打包
3️⃣ iOS 基础(证书搞懂即可)