V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
HMYang33
V2EX  ›  React

折腾了好几天总算在 windows 系统本地打包 expo 项目出 apk 了,分享下经验

  •  
  •   HMYang33 ·
    HMYang33 · 13 小时 43 分钟前 · 938 次点击

    创建项目和写代码就不说了,主要说一下大部分视频教程未提及的打包部分

    主流都是在推荐 eas 云打包,不仅排队时间长,还总是排了老长的队又很容易出错,有时甚至是云打包所用的机器网络差点意思导致依赖安装失败了。就断掉整个打包流程。然后你就需要重新排队打包。不出意外又要排队两个小时。有点离谱。

    eas 也支持--local 参数进行本地打包,但是本地打包还要登录 eas 账号,没一点代码安全感。很离谱。

    不仅没安全感,就算你登上了,也会提示你 windows 不支持。离离原上谱。

    如果使用 windows subsystem for linux 又会大概率牵扯出不会正确使用 WSL 的各种疑惑。而且 expo 文档上也不会告诉你怎么通过 wsl 打包,因为 expo 团队就没想着兼容 windows 平台,也不会给你测试 wsl 能不能正常用于打包。

    有没有安全且方便的 windows 系统的打包 expo 项目的 apk 的方式呢,有的兄弟有的

    1.下载并安装 Android Studio

    https://r3---sn-i3b7knlk.gvt1.com/edgedl/android/studio/install/2025.1.3.7/android-studio-2025.1.3.7-windows.exe

    打开 exe 文件,跟着安装向导下一步下一步...

    2.Android Studio 初次运行需要下载的东西

    打开安装好的 Android Studio ,

    点击不给谷歌发送使用数据,

    提示需要下载 SDK 和安卓模拟器,下一步到 License 界面,会展示 android-sdk 的许可内容,点下面接受的单选按钮

    点击左侧 android-sdk-preview-license 查看第二个许可内容,再点下面的接受单选按钮

    SDK 和安卓模拟器的下载需要消耗 50 分钟(我的网速是 1.7MB/s)

    时间宝贵,你可以先干点别的。

    下载好了就重启一次电脑

    感觉内存不够用的可以打开虚拟内存(推荐勾选“自动管理所有驱动器的分页文件大小”)。

    3.在你的项目目录安装 node modules 并进行预构建

    使用 npm ci 强制使用 package-lock.json 的依赖清单安装依赖

    使用 npx expo prebuild 构建出 android 工程目录

    4.使用 Android Studio 打开构建出的 android 工程目录

    打开之后自动执行更新索引和下载项目的依赖包,这一步耗时70 分钟(我用的 4 核 CPU ,网速是 1.7MB/s)

    再次提醒,时间宝贵,你可以先干点别的。

    5.1 打包出调试基座

    点击左上角三个横线,鼠标放到 Build ,再放到二级菜单的 Generate App Bundles or APKs,点击 Generate APKs

    这一步同样耗时巨大,需要60 分钟

    5.2 打包出生产 APK

    点击左上角三个横线,鼠标放到 Build ,点击 Generate Signed App Bundle or APK

    选择 APK 单选框,下一步要求你使用签名,有的话就选创建好的,没有的话就创建新的

    再下一步,在 debug 和 release 之间选择 release ,点蓝色的 create 按钮。大部分依赖都在制作调试基座时缓存过了,所以这次打包大概五分钟后就生成好了

    5.2.1 创建新签名文件

    找个存放秘密的好地方,新建文本文件,并改名成后缀为 jks 的文件如 xxx 的签名.jks

    在 Android Studio 里面点 create new..., 第一个输入框是填你刚刚创建的 jks 文件路径,可以点击输入框右侧的文件夹图标选取你的 jks 文件。

    Validity Years 是签名有效时长多少年,如果过了这个时间需要重新制作签名。因签名文件变化也会导致老版本无法升级成新版本。只能卸载重装为新版。

    剩下的输入框如果没什么特别的安全性要求,无脑都写一样的就能用。如果有应用安全的要求就好好写。

    注意事项

    引入新的原生模块时需要重新制作调试基座,因为旧的调试基座不包含这部分新的原生代码。

    要用的系统权限需要在 app.json 里面提前列出来,并打入调试基座,否则代码里直接请求获取权限会得到 never ask again(拒绝且不再询问)

    顺带吐槽一下 Android studio 是真的很占磁盘,搞完这一套流程就占用我 25GB ,就算安装到别的盘,也会吃掉 C 盘大约 10GB 的空间

    11 条回复    2025-09-15 22:51:55 +08:00
    xbdsky
        1
    xbdsky  
       13 小时 22 分钟前
    下载慢,可以加代理试试,C 盘确实占用很多
    zhengfan2016
        2
    zhengfan2016  
       11 小时 34 分钟前   ❤️ 1
    25GB 不算多吧,手机下个原神,鳴潮都得 30GB 了,原神电脑版,三角洲这些 90GB+,xbox 极限竞速地平线,2077 至少也得 70GB ,有些像星空的大作上百 GB 都有,除了 256GB 的 mac 用户,25GB 真不算什么
    HojiOShi
        3
    HojiOShi  
       10 小时 47 分钟前   ❤️ 1
    * 除了第三点,这不就正常的打包 Android 项目的流程,至于弄几天时间?
    * C 盘占用就是 Gradle 缓存大而已,GRADLE_USER_HOME 环境变量设置一下,再把.gradle 目录转移掉也就差不多了。
    HMYang33
        4
    HMYang33  
    OP
       9 小时 51 分钟前
    @zhengfan2016 公司配的电脑,磁盘只有 256GB ,空间很紧张的。。。
    HMYang33
        5
    HMYang33  
    OP
       9 小时 47 分钟前
    @HojiOShi 首先感谢你的方案,解决了 gradle 缓存占太多 C 盘空间。

    再回复第一条,因为我是新手,在接触 react-native 的时候遇到了很多对新人来说很棘手的事,而且我只是下班时摆弄两个小时,说是折腾了几天一点也不为过
    zhengfan2016
        6
    zhengfan2016  
       7 小时 51 分钟前
    @HMYang33 #4 看看能不能和公司申请换大点的电脑咯,而且电脑空间小这不是好事吗,每次打包 android 都得经历清理磁盘,下载 android studio ,下载 sdk ,安装依赖,打包,这可是好几个小时的摸鱼时间呢,我同学经常借公司电脑卡 java 编译很久的借口摸鱼
    mouyase
        7
    mouyase  
       7 小时 0 分钟前
    但依旧不能编译 iOS 版
    zhangleijuly
        8
    zhangleijuly  
       6 小时 52 分钟前
    Expo 项目本地编译 apk 我几个月之前刚研究过怎么搞,本地安装 android 开发环境之后,npx expo prebuild 生成 android 目录,到 android 目录下运行./gradlew assembleRelease 或者./gradlew assembleDebug 指令即可。但是国内生成速度非常慢,因为有些包根本下载不动,所以需要换源,我是把 gradle 换成了腾讯源,maven 换成了阿里源,从零生成大概需要十几分钟。
    donaldturinglee
        9
    donaldturinglee  
       6 小时 43 分钟前
    打包我选择直接在 GitHub actions 打包..
    Rache1
        10
    Rache1  
       5 小时 38 分钟前
    下载慢的时候,配置代理的时候注意一下,dl.google.com 这个域名不要走走代理,让他直连,这个域名是没有被墙的,而且还很快走了代理反倒会变慢。
    XTTX
        11
    XTTX  
       3 小时 11 分钟前
    我用了一个月 expo , 得出的结论就是千万别用在 windows 下用 expo 。
    1.时不时就扔你一个 PathTooLongException 。
    2.不能编译 ios
    3.不能编译 ios
    4.不能编译 ios

    我买了个 m2 mac mini ,android/ios ,preview/production 都在本地打包。mac 下只要跑通两个端的流程一遍,剩下的整个流程越来越简单。
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1189 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 18:03 · PVG 02:03 · LAX 11:03 · JFK 14:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.