上一课,我们解决了编译rom的问题,但我们做改版不可能在Linux环境里,还是要回到鸿蒙本地环境的。
但是,通过融合开发引擎的共享目录是无法完成编译的(谁试谁知道)
这节课要讲的这个方案的核心就一句话:代码放在共享目录里编辑,但编译时先复制到 Linux 自己的“内部工作区”,编译完再把产物拿回来。
为什么这样行得通?因为融合开发引擎的共享目录(/mnt/linux_share)权限比较特殊,编译工具在里面会“闹脾气”。而 Linux 环境自己的目录(比如 /home/你的用户名/ 下面)权限是正常的,编译工具在里面就能好好干活。
第一步:一次性准备(只需要做一次)
- 在 Linux 内部建一个“编译工作区”
打开融合开发引擎的终端,执行下面这条命令,创建一个专门用来编译的文件夹:
mkdir -p ~/build_workspace这个 ~/build_workspace 就是 Linux 环境自己的目录,权限完全正常,编译工具在里面不会报错。
- 把“鸿蒙侧工程目录”和“编译产物要放哪”想清楚
假设你的鸿蒙工程在共享目录里,路径大概是这样的:
/mnt/linux_share/你的工程文件夹
你希望编译出来的.gba文件,最后能出现在鸿蒙侧方便你使用。那就在共享目录里找个地方放产物,比如:
/mnt/linux_share/编译产物
你只需要知道这两个路径大概是什么,下一步写脚本时会用到。
- 创建编译脚本(把下面的内容复制进去,改几处地方)
在终端里执行:
nano ~/build_workspace/build.sh因为nano真的更人性化,所有我单独安装了,洗头自带的有vim可以用。
然后把下面这段内容完整复制进去:
#!/bin/bash
# ===== 需要你修改的地方 =====
# 你鸿蒙侧绿宝石工程文件夹的实际路径
PROJECT_SOURCE="/mnt/linux_share/storage/Users/currentUser/你的绿宝石工程"
# 编译产物 (.gba) 想放回共享目录的哪个位置
OUTPUT_DEST="/mnt/linux_share/storage/Users/currentUser/编译产物"
# ===========================
echo "开始增量同步绿宝石工程到 Linux 工作区..."
mkdir -p ~/build_workspace/emerald
cd ~/build_workspace/emerald
# 增量同步:只传改动的源码,排除 build 这种大目录
rsync -ac --delete \
--exclude 'build' \
"$PROJECT_SOURCE/" ~/build_workspace/emerald/
if [ $? -ne 0 ]; then
echo "同步失败!请检查 PROJECT_SOURCE 路径。"
exit 1
fi
echo "同步完成,开始编译绿宝石 ROM..."
# 清理旧的编译结果,然后开始编译
#make clean
make -j$(nproc)
if [ $? -ne 0 ]; then
echo "编译失败!请查看上方的错误信息。"
exit 1
fi
echo "编译成功,开始复制 ROM 到共享目录..."
mkdir -p "$OUTPUT_DEST"
# 绿宝石默认生成的 ROM 叫 pokeemerald.gba,在工程根目录
cp pokeemerald.gba "$OUTPUT_DEST/"
echo "完成!ROM 已经出现在:$OUTPUT_DEST"- 保存并赋予执行权限
在 nano 编辑器里,按 Ctrl + O 保存,按 Enter 确认,再按 Ctrl + X 退出。
然后执行:
chmod +x ~/build_workspace/build.sh这样脚本就有“运行”的权限了。
- 修改脚本里的路径
用 nano 再打开脚本,把你实际的信息填进去:
nano ~/build_workspace/build.sh需要改的就是开头那几行带 # 注释的地方:
PROJECT_SOURCE:你的鸿蒙工程在共享目录里的实际路径。如果不确定,可以在终端里输入 ls /mnt/linux_share/ 看看里面有什么。
OUTPUT_DEST:你希望产物出现在哪里。
改完保存退出。
第二步:日常使用(每次改完代码后)
- 在鸿蒙侧正常编辑你的代码
你还是在原来的地方写代码,保存。
- 在 Linux 终端里运行一条命令
bash ~/build_workspace/build.sh然后等它跑完。脚本会自动做这些事:
把你的工程从共享目录复制到 Linux 内部工作区
在内部工作区里执行编译(这里权限正常,不会出错)
把编译出的 .gba 复制回共享目录里你指定的位置
- 去共享目录拿产物
编译完成后,去你设置的 OUTPUT_DEST 目录里,就能找到 .gba文件了。
发表评论