Skip to content

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

无法下载?

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

FCL启动器下载

重要提示

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

1. 准备基础

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

下载建议

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

重要提示

请注意,直装包部分目录下有一个名为 version 的文件,该文件不能删去,不然游戏无法启动。注意,不能删去!不能删去!不能删去!

  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或更低)16048x48是Android应用程序的基准密度
hdpi(480x800或更低)24072x72通常用于较大的高分辨率屏幕
xhdpi(720x1280或更低)32096x96用于更高分辨率的屏幕
xxhdpi(1080x1920或更低)480144x144适用于非常高分辨率的屏幕
xxxhdpi(1440x2560或更低)640192x192用于极高分辨率的屏幕

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

  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点击跳转

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": "/storage/emulated/0/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 ,否则该项检测会被忽略。

渲染器项说明

内置渲染器
启动器内置的渲染器
UUID渲染器名称
f7e985d8-6d4c-f63c-d9f1-06074dab823aHoly-GL4ES
417a7a93-d9b4-98b9-ec6e-1ea400259c1fVirGLRenderer
0fb718e4-64e3-83d4-a974-8204ea1d9f9fVGPU
18d93f17-ff53-a319-fa61-58709a77bf87Vulkan Zink
8d427e6c-9d22-2d19-db0c-3b9ac2c1543fFreedreno
1a46495a-5503-eaf5-9e3d-1ba08626b95bGL4ES+

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

自定义渲染器(即渲染器插件)

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

Json
{"packageName": "ren.test.com", "name": "Renderer name"}
键名键值
packageNameapp的包名
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
{
  "launcherRules": {
    "^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(菜单设置)

配置项默认值功能
autoFittrue自动吸附
autoFitDist0自动吸附间距(单位:dp)
lockMenuViewfalse锁定菜单键
hideMenuViewfalse隐藏菜单键
disableSoftKeyAdjustfalse禁用软键盘自适应
showLogfalse显示日志
disableGesturefalse禁用手势
disableBEGesturefalse禁用仿基岩版手势
gestureMode0触摸模式(0 为建筑模式,1 为战斗模式)
disableLeftTouchfalse禁用左半屏触控
enableGyroscopefalse启用陀螺仪
gyroscopeSensitivity10陀螺仪灵敏度
mouseMoveMode0鼠标控制模式(0 为点击,1 为拖动)
mouseSensitivity1.0鼠标灵敏度
mouseSensitivityCursor2.0鼠标灵敏度(当指针可见时)
mouseSize15鼠标尺寸
itemBarScale0物品栏缩放
windowScale1.0窗口分辨率
cursorOffset0.0鼠标指针偏移量
gamepadDeadzone1.0手柄死区

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 不会保留)。

11. 更新日志

版本号:1.2.4.4

  • 删除无用代码。
  • 增加Java检测规则。
  • 修复误报 配置文件安装失败 错误。
  • 给部分 Manager 类增加部分缺少方法。
  • 修复 launcher_rules.json 文件中某些数组内重复写值无法过滤重复问题。
  • 优化公告展示逻辑。
  • 优化自定义内部Java逻辑。
  • 优化文件检测代码。
  • 修复渲染器规则检查时机问题。
  • 将渲染器规则检查从 checkRenderer 移至 setGameRule 方法。
  • 确保渲染器规则在 FCLBridge 设置前完成验证和修改。

版本号:1.2.4.3

  • 进一步减少工具类对 Activity 的依赖。
  • 修复 setGameRule 方法异常处理中的线程问题。
  • 支持使用 TouchController 时启用指针跟随手指。
  • setGameRule 中设置渲染器的逻辑迁移到 checkRenderer
  • 微调渲染器设置规则。
  • 删除 InstallResources 中Activity依赖。
  • 将UI更新内容恢复到 RuntimeFragment 中执行。

贡献者

页面历史