1. React Native 在 Windows 环境下的打包准备在 Windows 系统上为 React Native 项目打包 APK 文件首先需要确保开发环境配置正确。与 macOS 不同Windows 需要特别注意以下几个关键环节1.1 JDK 安装与配置必须安装 Java Development Kit (JDK) 8 而不是更高版本因为 React Native 的 Gradle 构建系统对 JDK 版本有特定要求。安装完成后需要设置以下环境变量JAVA_HOME指向 JDK 安装目录如C:\Program Files\Java\jdk1.8.0_291在 Path 中添加%JAVA_HOME%\bin验证安装是否成功java -version javac -version1.2 Android Studio 的必要组件通过 Android Studio 的 SDK Manager 安装以下必需组件Android SDK Platform 28对应 React Native 0.60 的默认配置Android SDK Build-Tools 28.0.3Android Support RepositoryGoogle RepositoryNDK版本需与 React Native 版本匹配设置 ANDROID_HOME 环境变量指向 SDK 安装路径通常为C:\Users\你的用户名\AppData\Local\Android\Sdk并在 Path 中添加%ANDROID_HOME%\platform-tools%ANDROID_HOME%\tools%ANDROID_HOME%\tools\bin1.3 Node.js 和 Python 环境React Native 依赖 Node.js 运行环境建议安装 LTS 版本如 14.x。同时需要 Python 2.7不是 Python 3这是 React Native 打包脚本的硬性要求。注意Windows 系统上如果同时安装了多个 Python 版本需要确保在命令行中python命令默认指向 2.7 版本。2. 项目配置调整2.1 Gradle 配置优化React Native 项目中的android/gradle/wrapper/gradle-wrapper.properties文件需要指定兼容的 Gradle 版本。对于 React Native 0.60 推荐使用distributionUrlhttps\://services.gradle.org/distributions/gradle-6.7.1-all.zip在android/build.gradle中需要确保 buildToolsVersion 和 compileSdkVersion 设置正确buildscript { ext { buildToolsVersion 29.0.3 compileSdkVersion 29 targetSdkVersion 29 supportLibVersion 28.0.0 } }2.2 解决 Windows 路径问题Windows 系统特有的路径分隔符可能导致构建失败需要在android/app/build.gradle中添加以下配置android { // 添加以下代码解决 Windows 路径问题 tasks.withType(JavaCompile) { options.encoding UTF-8 } }3. 生成签名密钥3.1 创建发布密钥使用 keytool 生成签名密钥在项目根目录执行keytool -genkeypair -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000执行后会提示输入密钥库密码、密钥密码以及一些识别信息。生成的.keystore文件应当妥善保管。3.2 配置 Gradle 签名在android/gradle.properties末尾添加MYAPP_RELEASE_STORE_FILEmy-release-key.keystore MYAPP_RELEASE_KEY_ALIASmy-key-alias MYAPP_RELEASE_STORE_PASSWORD你的store密码 MYAPP_RELEASE_KEY_PASSWORD你的key密码然后在android/app/build.gradle的 android 配置块中添加signingConfigs { release { if (project.hasProperty(MYAPP_RELEASE_STORE_FILE)) { storeFile file(MYAPP_RELEASE_STORE_FILE) storePassword MYAPP_RELEASE_STORE_PASSWORD keyAlias MYAPP_RELEASE_KEY_ALIAS keyPassword MYAPP_RELEASE_KEY_PASSWORD } } } buildTypes { release { signingConfig signingConfigs.release } }4. 执行打包流程4.1 清理和准备构建在项目根目录执行以下命令确保所有依赖最新npm install cd android gradlew clean cd ..4.2 执行打包命令进入 android 目录执行打包命令gradlew assembleRelease完整构建过程可能需要 5-15 分钟取决于机器性能和网络状况。构建成功后APK 文件会生成在android/app/build/outputs/apk/release/目录下。4.3 构建优化技巧启用 Gradle 守护进程在gradle.properties中添加org.gradle.daemontrue可以加速后续构建并行构建添加org.gradle.paralleltrue增加内存添加org.gradle.jvmargs-Xmx4096m -XX:MaxPermSize512m -XX:HeapDumpOnOutOfMemoryError -Dfile.encodingUTF-85. 常见问题排查5.1 内存不足错误如果遇到Java heap space错误可以尝试以下解决方案在gradle.properties中增加内存设置org.gradle.jvmargs-Xmx4096m -XX:MaxPermSize512m设置临时环境变量set _JAVA_OPTIONS-Xmx4096m5.2 NDK 相关问题如果报错关于NDK not configured或No toolchains found确认已通过 Android Studio 安装了正确版本的 NDK在android/app/build.gradle中指定 NDK 版本android { ndkVersion 21.4.7075529 }5.3 资源文件冲突如果遇到Duplicate resources错误可能是因为不同模块包含了相同名称的资源文件。解决方案检查android/app/src/main/res/目录下的资源命名在android/app/build.gradle中添加android { packagingOptions { exclude META-INF/* } }6. 构建产物优化6.1 减少 APK 体积启用 ProGuard 代码混淆 在android/app/build.gradle中设置buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile(proguard-android.txt), proguard-rules.pro } }生成不同 ABI 的 APKsplits { abi { enable true reset() include x86, x86_64, armeabi-v7a, arm64-v8a universalApk false } }6.2 构建变体管理可以创建不同的构建变体来应对不同环境flavorDimensions environment productFlavors { dev { dimension environment applicationIdSuffix .dev } prod { dimension environment } }然后可以通过gradlew assembleDevRelease或gradlew assembleProdRelease分别构建不同环境的 APK。7. 自动化构建脚本对于持续集成环境可以创建自动化构建脚本build.sh#!/bin/bash # 清理缓存 npm cache clean --force rm -rf node_modules npm install # 清理安卓构建 cd android ./gradlew clean cd .. # 执行打包 cd android ./gradlew assembleRelease cd .. # 复制APK到指定目录 mkdir -p dist cp android/app/build/outputs/apk/release/app-release.apk dist/app-$(date %Y%m%d).apk在 Windows 上可以通过 Git Bash 或 WSL 来执行此脚本。8. 性能监控与优化8.1 构建时间分析使用--profile参数生成构建报告gradlew assembleRelease --profile报告会生成在android/app/build/reports/profile/目录下可以分析各阶段耗时。8.2 依赖树分析查看项目依赖关系gradlew android:dependencies对于重复或冲突的依赖可以在android/app/build.gradle中使用configurations.all { resolutionStrategy { force com.facebook.react:react-native:0.64.2 } }9. 安全加固建议9.1 密钥保护不要将签名密钥提交到版本控制系统考虑使用环境变量替代直接写在gradle.properties中的密码对于团队项目使用密钥管理系统分发密钥9.2 代码混淆除了启用 ProGuard还可以考虑使用商业加固方案如腾讯乐固360加固保阿里云移动安全这些工具可以提供更高级的反逆向工程保护。10. 进阶打包策略10.1 使用 App BundleGoogle Play 推荐使用 Android App Bundle (.aab) 格式gradlew bundleRelease生成的.aab文件位于android/app/build/outputs/bundle/release/10.2 分片构建对于大型项目可以拆分基础包和业务包在android/settings.gradle中配置动态特性模块使用react-native dynamic features插件实现按需加载10.3 多环境配置通过不同的gradle.properties文件管理多环境配置# config/dev.properties API_URLhttps://dev.api.example.com APP_NAMEMyApp(Dev) # config/prod.properties API_URLhttps://api.example.com APP_NAMEMyApp然后在构建时通过-Pconfigdev参数指定使用哪个配置。11. 构建缓存管理11.1 Gradle 缓存清理当遇到奇怪的构建问题时可以尝试清理缓存gradlew cleanBuildCache11.2 缓存位置配置可以修改 Gradle 缓存目录以节省系统盘空间设置环境变量GRADLE_USER_HOME指向其他磁盘或者在gradle.properties中配置gradle.user.homeD:\\gradle_cache12. 构建监控与报警对于自动化构建系统建议添加以下监控构建时间监控超过阈值时发出警告APK 大小监控防止意外引入大体积资源依赖更新监控使用gradlew dependencyUpdates检查过时依赖可以集成到 CI/CD 系统中实现自动化监控。13. 构建环境容器化为了确保构建环境一致性可以考虑使用 Docker 容器FROM openjdk:8-jdk # 安装 Node.js RUN curl -sL https://deb.nodesource.com/setup_14.x | bash - RUN apt-get install -y nodejs # 安装 Android SDK ENV ANDROID_SDK_ROOT /opt/android-sdk RUN mkdir -p ${ANDROID_SDK_ROOT}/cmdline-tools \ wget https://dl.google.com/android/repository/commandlinetools-linux-6858069_latest.zip \ unzip commandlinetools-linux-6858069_latest.zip -d ${ANDROID_SDK_ROOT}/cmdline-tools \ mv ${ANDROID_SDK_ROOT}/cmdline-tools/cmdline-tools ${ANDROID_SDK_ROOT}/cmdline-tools/tools \ rm commandlinetools-linux-6858069_latest.zip ENV PATH ${PATH}:${ANDROID_SDK_ROOT}/platform-tools:${ANDROID_SDK_ROOT}/tools/bin # 接受 licenses RUN yes | sdkmanager --licenses # 安装必要的 Android 组件 RUN sdkmanager platform-tools platforms;android-29 build-tools;29.0.3 WORKDIR /app这样可以在任何支持 Docker 的环境中确保一致的构建结果。