Skip to content

FCL直装包制作——手机端教程

无法下载?

你可能需要一些加速镜像,例如 kgithub,或者这个下载工具

FCL启动器下载

重要提示

请注意,FCL 直装包为非官方团队修改

1. 准备基础

  1. 下载直装包模板 ,将其放置在合适的位置。

下载建议

建议下载图中所示 FCL-release-X.X.X.X-arm64-v8a.apk,版本保持最新即可。

重要提示

请注意,直装包部分目录下有一个名为 version 的文件,该文件不能删去,不然游戏无法启动。注意,不能删去!不能删去!不能删去!,里面的内容只能填写有效的数字。不能是小数,必须是整数!
值的范围只能在 -9223372036854775808~9223372036854775807

  1. 下载 MT 修改器
  2. 下载 APKTool M(用于修改包名,无该需求可以不下)。

2. 对客户端进行处理

  1. 打开客户端的 .minecraft 文件夹。
  2. 删除 logs(运行日志)、crash-reports(崩溃日志)文件夹。如果对大小有较高要求,还可删除 assetslibraries 文件夹(游戏会自行补全这两个文件夹的内容,但如果客户端包含 反作弊,则不建议删)。
    具体详见 包体压缩
  1. 打开客户端,在设置界面关闭“版本隔离”。之后确保游戏能够正常启动。

手动关闭版本隔离的方法

打开 versions 文件夹,将其下除 版本名称.jar版本名称.jsonoptions.txt(原版设置选项,其中包含默认启用资源包的选项)、optionsof.txt(Optifine 的设置文件)之外的文件移动到 .minecraft 中即可。

如何为游戏内置启用的资源包及服务器列表?

如果需要预安装资源包:

  • 在“设置->资源包...”界面,将对应资源包勾选并移动至右侧。 如果需要预设服务器列表:
  • 在“多人游戏->添加服务器”界面,填入服务器名称以及服务器地址(服务器地址会保存在 servers.dat 中)。
  1. 完成后,将整个 .minecraft 文件夹替换项目内的 .minecraft 文件夹。
  1. 在文件夹内加入 version 文件,将内容修改为数字。

为什么要创建 version 文件

如果启动器没有在目录里检测到这个文件,会导致游戏无法启动。

version 的妙用

更新客户端打包内容时可将 version 的内容修改为更大的值,这样可以更新客户端内容而无需重装启动器。

3. 软件名称修改

方案一:修改 resources.arsc

方案二:修改 AndroidManifest.xml

4. 软件图标修改

屏幕像素密度 DPI 图片分辨率 适用范围
mdpi(320x480或更低) 160 48x48 是Android应用程序的基准密度
hdpi(480x800或更低) 240 72x72 通常用于较大的高分辨率屏幕
xhdpi(720x1280或更低) 320 96x96 用于更高分辨率的屏幕
xxhdpi(1080x1920或更低) 480 144x144 适用于非常高分辨率的屏幕
xxxhdpi(1440x2560或更低) 640 192x192 用于极高分辨率的屏幕

可用于修改图片参数的网站

  1. PNG DPI 转换 --> 应用于 转换图片DPI
  2. JPG 转 PNG --> 应用于 文件格式转换
  3. 调整图片大小 --> 应用于 调整图片大小
  4. PNG 转 WEBP --> 应用于 将 PNG 转换成 WEBP
  5. PNG24 转 PNG32 --> 应用于 将 PNG24 转换成 PNG32
  6. 图片圆角处理 --> 应用于 为 PNG 文件添加圆角
  7. WEBP 调整
  8. AConvert(支持 PNG 和 WEBP 互转,支持修改导出格式大小)

第一步:转换图片DPI

打开 PNG DPI 转换网站,将图标按上方表格一一转换为指定 DPI 大小。

注意

请注意,将生成的不同 DPI 文件分清楚,以便后续操作。

第二步:文件格式转换

提示

由于转换完文件会自动变为 JPG 格式,所以我们需要将其重新转换成 PNG 格式。

打开 JPG 转 PNG 网址。

第三步:调整图片大小

提示

为了适应不同设备分辨率,我们需要用不同分辨率来适配。

各个文件夹中图片所需的分辨率在上表中也已一一呈现,只需按需求修改即可。

打开调整图片大小网址。

第四步:将 PNG24 转换成 PNG32(可选)

提示

由于该网站原因,转换分辨率后,图片位深度会变成24,我们需将其转换回32

打开 PNG24 转 PNG32 网址。

第五步:将 PNG 转换成 WEBP

打开 PNG 转 WEBP 网站,选择你的图片。

第六步:为 PNG 文件添加圆角

打开 图片圆角处理 网址,选择你的图片,并将值改为 100

第七步:将你修改的图片替换模板中的图片

示例

5. 修改包名(多端共存)

  1. 打开 APKTool M 并找到你下载的模板。
  1. 单击该文件,并点击快速编辑
  1. 修改包名,然后保存。

提示

似乎新版模板秩序修改包名即可,第4、5步可以不用,但如果你在测试时,分享按键/日志时会报错,则需执行第4、5步的操作

  1. 重新回到 MT管理器 中,在模板文件夹下会生成一个 XX_mod.APK 文件,打开 AndroidManifest.xml
  1. 点右上角三个点,点击搜索 FileProvider ,修改 android:authorities 的值为 com.tungsten.fcl.server.provider ,然后保存。
  1. 安装即可。

6. 修改版本号

修改 android:versionCodeandroid:versionName 即可。

7. 配置项修改

信息

自定义各个参数是直装包的一大优势,下文将简述 assets 中各配置项的修改。

文件名 路径 文件介绍
eula.txt /assets/ 点击跳转
authlib_injector_server.json /assets/app_config 点击跳转
config.json /assets/app_config 点击跳转
general_setting.properties /assets/app_config 点击跳转
launcher_rules.json /assets/app_config 点击跳转
menu_setting.json /assets/app_config 点击跳转
custom_renderer.json /assets/app_config 点击跳转

1. eula.txt(最终用户许可协议)

想必开过服务器的对此并不陌生,此文件中的内容为用户第一次安装打开时显示的内容。

使用示例:

默认配置
txt
FoldCraftLauncher — 整合包一键安装版


  1. 你可以尝试修改APK的『assets/eula.txt』文件来改变该页面显示内容

  2. 该启动器一般用于『服务器客户端』或『个人整合包』的一键安装。

  3. 只接受启动器功能缺陷报告,不接受游戏崩溃报告;手机上不是所有MOD都能运行,不要用Java软件是跨平台来反驳(因为这样回答显得你很弱智)

  4. 游戏资源默认安装到当前APK的私有目录下,即『/storage/emulated/0/Android/data/com.tungsten.fcl.server/files/.minecraft/』路径下。

  5. 每次安装前会删除原路径下所有的游戏文件,某些人制作的APK可能会把你原公有目录下资源删除,你需要自行甄别!

  6. 该启动器的所有设置选项可以在APK的『assets/app_config』目录下进行修改;修改前请确保对应文件格式正确,且尽量使用英文值。

  7. APK的默认包名是『com.tungsten.fcl.server』,如果你需要修改包名请根据群文件要求来;千万不要使用『NP/MT』管理器自带的『APK共存』功能!!!

  8. 在APK的『assets』目录下,有些目录内自带的『version』文件请不要删除,否则会造成应用崩溃或卡加载!

  9. 禁止直接反编译APK的dex文件;请使用Git克隆该项目源码,并使用IDE集成开发环境进行修改

2. settings_launcher_pictures 文件夹 (启动器主页和鼠标贴图)

提示

请仔细阅读该文件夹下的 格式说明.pdf

该目录下只能上传下表中的文件:

文件名 功能 文件大小 分辨率
lt.png 亮色模式背景图片 ≤2MB ≤2560x1440
dk.png 暗色模式背景图片 ≤2MB ≤2560x1440
cursor.png 鼠标指针图片 ≤48KB ≤128x128
menu_icon.png 菜单键图片 ≤32KB ≤64x64

3. authlib_injector_server.json(皮肤站地址)

默认配置
authlib_injector_server.json
json
{
  "注意事项": {
    "配置文件说明1": "只能在“server-address”数组内写内容,其余地方禁止改动",
    "配置文件说明2": "请确保配置文件编码是UTF-8!!!",
    "格式说明1": "请严格按照JSON文件格式编辑,若格式出现问题启动器将不会解析任何地址",
    "格式说明2": "server-address数组内只能只能为字符串格式,数组的最后一个元素后面不需要加英文逗号",
    "格式说明3": "若皮肤站链接是http协议的不能省开头,必须写完整的;如:http://makeblock.net.cn",
    "格式说明4": "若数组内只有一个元素也不允许加英文逗号",
    "server-address对象值说明": "一行一个服务器地址,接受格式如下:",
    "正确的服务器格式1": "littleskin.cn",
    "正确的服务器格式2": "https://littleskin.cn/api/yggdrasil",
    "正确的服务器格式3": "littleskin.cn/api/yggdrasil",
    "正确的服务器格式补充": "其他格式也可以,只要你在FCL启动器内能添加的认证地址都可以写进来"
  },
  "server-address": [
    "littleskin.cn"
  ]
}

4. config.json

信息

为了实现多端共存,请将私有目录的路径 /storage/emulated/0/Android/data/com.tungsten.fcl.server/files/.minecraft 改为 /storage/emulated/0/Android/data/你的包名/files/.minecraft,并确保按键解压目录不同,修改按键解压目录见 general_setting.properties

修改可参考 MinecraftArgs

默认配置
config.json
json
{
  // 自动选择下载方式(官方源/镜像源)
  "autoChooseDownloadType": true,
  // 自动选择下载线程
  "autoDownloadThreads": true,
  "_version": 0,
  "configurations": {
    "内部目录": {
      "global": {
        // 开启后会在『.minecraft/versions/xxxx』版本下生成一个『fclversion.cfg』文件,然后会使用该文件的设置项游戏设置项依据。
        "usesGlobal": true,
        // Java虚拟机参数(不懂的别乱改)
        "javaArgs": "",
        // 游戏参数(不懂的别乱改)
        "minecraftArgs": "",
        // 游戏内存设置『值低于0则会根据设备运行内存大小自动设置』。
        "maxMemory": -1,
        // 启动器的『自动分配内存』选项。
        "autoMemory": true,
        // 启动器的『内存永久保留区域』选项。
        "permSize": "",
        // 启动器的『服务器地址』选项。
        "serverIp": "",
        // 启动器的『Java版本』选项,可以设置Auto、jre8、jre11、jre17、jre21。
        "java": "Auto",
        // 启动器的『窗口分辨率』选项,范围为25~100。
        "newScaleFactor": 1.0,
        // 启动器的『不检查游戏完整性』选项,可以设置false、true。
        "notCheckGame": false,
        // 启动器的『不检查JVM兼容性』选项,可以设置false、true。
        "notCheckJVM": false,
        // 启动器的『基岩版触控手势』选项,可以设置false、true。
        "beGesture": true,
        // 启动器的『允许Zink使用系统Vulkan驱动』选项,可以设置false、true。
        "vulkanDriverSystem": false,
        // 使用哪个按键布局,这个建议保留默认别乱动。
        "controller": "00000000",
        // 启动器的『渲染器』选项,具体可设置内容见『launcher_rules.json』文件;需要注意的是,该设置是设置第一次运行启动器选择哪个渲染器。
        "renderer": "",
        // 启动器的『Vulkan驱动』选项,这是给Zink渲染器设置的;需要注意的是Zink渲染器通常不支持最新的设备。
        "driver": "",
        // 启动器的『版本隔离』选项,可以设置false、true。
        "isolateGameDir": false,
        // 启动器的『强制渲染器在大核上运行(Pojav后端)』选项,可以设置false、true。
        "pojavBigCore": false
      },
      // 储存目录
      "gameDir": "/data/data/com.tungsten.fcl.server/.minecraft",
      "selectedMinecraftVersion": ""
    },
    "私有目录": {
      "global": {
        // 开启后会在『.minecraft/versions/xxxx』版本下生成一个『fclversion.cfg』文件,然后会使用该文件的设置项游戏设置项依据。
        "usesGlobal": true,
        // Java虚拟机参数(不懂的别乱改)
        "javaArgs": "",
        // 游戏参数(不懂的别乱改)
        "minecraftArgs": "",
        // 游戏内存设置『值低于0则会根据设备运行内存大小自动设置』。
        "maxMemory": -1,
        // 启动器的『自动分配内存』选项。
        "autoMemory": true,
        // 启动器的『内存永久保留区域』选项。
        "permSize": "",
        // 启动器的『服务器地址』选项。
        "serverIp": "",
        // 启动器的『Java版本』选项,可以设置Auto、jre8、jre11、jre17、jre21。
        "java": "Auto",
        // 启动器的『窗口分辨率』选项,范围为25~100。
        "newScaleFactor": 1.0,
        // 启动器的『不检查游戏完整性』选项,可以设置false、true。
        "notCheckGame": false,
        // 启动器的『不检查JVM兼容性』选项,可以设置false、true。
        "notCheckJVM": false,
        // 启动器的『基岩版触控手势』选项,可以设置false、true。
        "beGesture": true,
        // 启动器的『允许Zink使用系统Vulkan驱动』选项,可以设置false、true。
        "vulkanDriverSystem": false,
        // 使用哪个按键布局,这个建议保留默认别乱动。
        "controller": "00000000",
        // 启动器的『渲染器』选项,具体可设置内容见『launcher_rules.json』文件;需要注意的是,该设置是设置第一次运行启动器选择哪个渲染器。
        "renderer": "",
        // 启动器的『Vulkan驱动』选项,这是给Zink渲染器设置的;需要注意的是Zink渲染器通常不支持最新的设备。
        "driver": "",
        // 启动器的『版本隔离』选项,可以设置false、true。
        "isolateGameDir": false,
        // 启动器的『强制渲染器在大核上运行(Pojav后端)』选项,可以设置false、true。
        "pojavBigCore": false
      },
      // 储存目录
      "gameDir": "/storage/emulated/0/Android/data/com.tungsten.fcl.server/files/.minecraft",
      "selectedMinecraftVersion": ""
    }
  },
  "downloadThreads": 64,
  "downloadType": "bmclapi",
  "last": "私有目录",
  "versionListSource": "balanced"
}

5. general_setting.properties(常规设置)

该文件注释非常清晰,文中不作赘述。

提示

按键默认解压目录见 general_setting.properties 中的 controller-dir

解决无法使用中文的问题

中文可能导致显示内容乱码,所以可将 中文 转化成 Unicode

6. launcher_rules.json(启动器规则)

提示

所有游戏设置规则只能填入 launcherRules 中,不能加在其他地方。
请严格按照 Json 文件语法,若出现错误则整个文件都不会识别。
请注意,只要是数组数据结构的一律有使用优先级;顺序越靠前越优先使用。
如果某个版本有多个适用规则,只读取首个有效的,其余均忽略。 支持使用正则表达式对游戏名称(即 minecraft/versions 目录下的文件夹名称)进行匹配筛选。 如 ^1\\.17(\\.\\d{1,2})?$ 可匹配所有以 1.17 开头的游戏目录,用于启动前进行校验。 若某个游戏有多个可用规则,则只会识别最顶部那个,其余都不会识别。

内存项说明

minMemory 项的值不能低于 1024 ,否则检测失效,确保设备满足最低内存要求。\

若设备内存达不到要求会提示用户,如『内存最低要求为“${minMemory}MB”』,引导用户满足配置。

常用占位符

占位符 功能
${minMemory} 当前规则要求最低内存
${totalMemory} 设备总内存大小
${setMemory} 当前启动器设置内存大小

渲染器项说明

内置渲染器
启动器内置的渲染器
UUID 渲染器名称
f7e985d8-6d4c-f63c-d9f1-06074dab823a Holy-GL4ES
417a7a93-d9b4-98b9-ec6e-1ea400259c1f VirGLRenderer
0fb718e4-64e3-83d4-a974-8204ea1d9f9f VGPU
18d93f17-ff53-a319-fa61-58709a77bf87 Vulkan Zink
8d427e6c-9d22-2d19-db0c-3b9ac2c1543f Freedreno
1a46495a-5503-eaf5-9e3d-1ba08626b95b GL4ES+

useRenderer 字段中,需填写上述渲染器对应的 UUID ,而非渲染器名称。

常用占位符

占位符 作用
${useRenderer} 当前规则设置的可使用渲染器列表
${downloadURL} 当前规则设置的下载链接
${requiredRenderer} 要求使用的渲染器,也就是规则列表中首个渲染器名称
${setRenderer} 当前启动器设置的渲染器
自定义渲染器(即渲染器插件)

需要在 useRenderer 字段中填写对象型数据,详细格式如下:

Json
{"packageName": "ren.test.com", "name": "Renderer name"}
键名 键值
packageName app的包名
name 渲染器别名

两个key的值必须合法,不合法的将自动忽略;获取包名方式请百度,这里不会介绍如何获取。 需要注意的是,若存在相同的包名会自动去重。

forceChange 说明

开启 forceChange 选项后,即使当前使用的渲染器已包含在 useRenderer 列表中 启动器在进行规则检查时仍会从列表中的第一个渲染器开始依次检查,直到找到一个可用的渲染器,并强制设置为该渲染器。

Java项说明

截至2025年8月3日,启动器内置的 Java 有如下 5 种:
Auto、jre8、jre11、jre17、jre21。
如果是 内置 Java,则只能填写上面的这5种值,不会区分大小写(建议按标准写)。
如果不是内置的则需要写对应解压以后 Java 目录名称即可。
若你不知道解压后的 Java 目录名称,可以用 MT/NP 挂载 APP 的路径在对应目录下就能找到。
需要注意的是,若在启动器设置中勾选了 不检查JVM兼容性 ,则 Java 规则依旧无效。

默认配置
launcher_rules.json
Json
{
  {
    "^1\\.(1[7-9]|[2-9][0-9]?)(\\.\\d+)?$": {
      "memory": {
        "minMemory": 3072,
        "tip": "内存最低要求为“${minMemory}MB”\n由于你的设备总运行内存只有“${totalMemory}GB”,不满足最低配置要求!"
      },
      "renderer": {
        "forceChange": false,
        "useRenderer": [{"packageName": "com.fcl.plugin.mobileglues", "name": "MobileGlues"}, {"packageName": "com.mio.plugin.renderer.ltw", "name": "OpenLTW"}],
        "downloadURL": "https://icraft.ren:90",
        "tip": "当前所使用的渲染器为『${setRenderer}』,要求的渲染器必须为『${requiredRenderer}』\n\n检测到您未安装该渲染器,请点击右下角按钮安装额外渲染器,否则游戏将不能启动!!!"
      },
      "java": {
        "useJava": ["Auto"],
        "downloadURL": "https://icraft.ren:90",
        "tip": "当前所使用的Java为“${useJava}”,要求必须是使用如下Java才可以启动游戏:\n${requiredJava}"
      }
    }
  }
}

7. menu_setting.json(菜单设置)

配置项 默认值 功能
autoFit true 自动吸附
autoFitDist 0 自动吸附间距(单位:dp)
lockMenuView false 锁定菜单键
hideMenuView false 隐藏菜单键
disableSoftKeyAdjust false 禁用软键盘自适应
showLog false 显示日志
disableGesture false 禁用手势
disableBEGesture false 禁用仿基岩版手势
gestureMode 0 触摸模式(0 为建筑模式,1 为战斗模式)
disableLeftTouch false 禁用左半屏触控
enableGyroscope false 启用陀螺仪
gyroscopeSensitivity 10 陀螺仪灵敏度
mouseMoveMode 0 鼠标控制模式(0 为点击,1 为拖动)
mouseSensitivity 1.0 鼠标灵敏度
mouseSensitivityCursor 2.0 鼠标灵敏度(当指针可见时)
mouseSize 15 鼠标尺寸
itemBarScale 0 物品栏缩放
windowScale 1.0 窗口分辨率
cursorOffset 0.0 鼠标指针偏移量
gamepadDeadzone 1.0 手柄死区

8. custom_renderer.json(自定义渲染器规则)<未完成>

默认配置
menu_setting.json
Json
{
  "com.mio.plugin.renderer.ltw": {
    "des": "OpenLTW(OpenGL 4.6)",
    "renderer": "LTW:libltw.so:libltw.so",
    "boatEnv": "",
    "pojavEnv": "LIBGL_ES=3:POJAV_RENDERER=opengles3_ltw",
    "minMCVer": "1.17",
    "maxMCVer": ""
  }
}

custom_renderer.json 中与 渲染器插件内置 的存在重复的id则不添加到列表中。
也就是说渲染器会自动去重。

优先级说明

内置的渲染器 > 渲染器插件 > 自定义的渲染器

提示

自带规则不会生效,因为对应的 so 文件 未引入

9. 按键配置

按键配置

按键配置存放在 /assets/controllers 目录中。

按键制作只能在启动器内进行。

10. 包体压缩

提示

对客户端处理时已经提出了一种减少包体大小的方法(即删去.minecraft文件夹下的 assetslibraries 文件夹)。

第二种方法为删去 assets\app_runtime 下的部分文件。

接下来,我将介绍该文件夹下各文件的作用:

文件夹名 作用
caciocavallo 如果用到 Java 8AWT/Swing 图形组件库会用到该运行库
caciocavallo11 如果用到 Java 11AWT/Swing 图形组件库会用到该运行库
caciocavallo17 如果用到 Java 17AWT/Swing 图形组件库会用到该运行库
java 各种Java运行环境
jna 允许Java程序调用系统本地库(不可删除)
lwjgl 游戏运行时需要用到的库,Pojav 启动端会用到(谨慎删除)
lwjgl-boat 游戏运行时需要用到的库,Boat 启动端会用到(谨慎删除)

使用说明

一般情况下,只需对 caciocavallojava 资源进行修改即可,其他文件不推荐改动

比如,我删除了 Java 11Java 17 运行环境(由于我删除了 Java 17Java 11,所以 caciocavallo11caciocavallo17 不会保留)。

贡献者

页面历史