网游源码编译修复-大叔小说pc版已修复

文章目录

前言

首先说一下这个软件修复的背景。 我是小说迷。 无意中发现了这位前辈做的软件。 经过一段时间的使用,我觉得这个软件非常好。 后来由于某些原因,这位前辈停止了更新,并封印了该软件。 。 该程序在github上开源:。 后来硬着头皮研究代码,改代码,编译。

如果你不想看下面的小故事,想直接获取软件包进行自助,链接如下:可以的话给个star吧。

1、需要解决的问题?

本软件是小说阅读器的PC版。 该软件已更新至5.0版本。 支持的功能如下:

三天后,软件作者决定停止更新和维护这款开源软件,同时对该软件进行了封存。 进入软件后网游源码编译修复,直接出现报警弹框,然后只能退出程序。 事实上,很难正常使用。 为了继续正常使用这个软件,就开始了阅读源码、修改源码、编译、打包的过程。

二、具体步骤 1.下载源码

如果访问github时网速较慢网游源码编译修复,可以直接下载源码的zip包,不带版本控制信息。 修改后的源码已经上传到我的github了。 我只是想知道源码改动或者直接编译打包。 可以从这个仓库地址下载源码:

ps:下面贴出的链接都是原仓库地址。

如果想保留版本控制相关信息,比如仓库信息、提交更新日志等,可以通过git下载源码:

git clone https://github.com/unclezs/uncle-novel.git

2.问题分析问题1:如何禁用手动软件更新?

我还是用C/C++做嵌入式开发。 我从来没有做过任何Java应用程序和Android APP的开发。 临时在网上了解到一些信息。 我赶紧上手,陷阱之路就开始了。

一开始的想法是直接更改软件中发起版本检测的源代码并获取更新,但后来发现不可能,因为软件运行后,首先运行的是一个启动器,并且这个启动器会主动进行版本检测和更新。 更新后,本地的 app.jar 包将替换为远程存储库中托管的更新文件。

再次查看源码,发现源码依赖于一个手动更新模块com.unclezs:jfx-launcher。 经过多方查找,我了解到这个模块源自另一个开源软件。 github仓库地址为:GitHub-unclezs/jfx-launcher :OpenJFX应用启动器,支持热更新。 使用模块化API动态加载模块启动,支持动态改变模块化破坏规则。 ,这又降低了工作难度。 另一种思路,直接拉取这个jfx-launcher的源码,注释掉jfx-launcher源码中手动检测更新并拉取更新文件的入口,然后编译成jar包替换到打包下uncle-novel路径,重新打包。 尝试了一下,毫无疑问失败了[茫然]。 这7天掉了不少头发,哈哈。

2、问题2:为什么更换jfx-launcher的jar包后不起作用?

继续看源码的编译过程,并在百度上搜索,又得到了几个知识点:

(1)uncle-novel使用gradle编译。 编译时,会从远程仓库拉取编译依赖的jar包及其他相关内容;

(2)软件作者将uncle-novel依赖的所有jar等资源托管在MavenRepository中;

再次搜索,找到了远程托管仓库MavenRepository。 地址是:,其实我没有权限发布这个远程托管仓库(有权限的话就不知道具体步骤了)。

根据之前的研究,我明白那些依赖的jar包肯定是下载到本地的,但是不知道具体路径。 我又在百度上搜索了解相关内容,又到了一个知识点:

(1)使用gradle编译时,会将依赖的jar包下载到本地的.gradle文件夹下,默认在用户目录下;

比如我的ubuntu中,这个目录是/home/ts/.gradle/; 在我的 Windows 中,该目录是 C:Usersts-lys.gradle。 这里的ts或者ts-lys是当前登录用户的名字。

然后,通过在该目录中搜索,找到jfx-launcher-1.1.9.jar jar包所在路径,然后将更改后重新编译的jfx-launcher包替换到对应目录中,并保持名称一致。

3.问题3:如何阻止jfx-launcher在本地拉取更新文件?

继续看jfx-launcher的源码,了解到jfx-launcher的主窗口是通过继承java中的Application类来实现的,所以运行时的入口函数应该是main函数,而这部分代码在Launcher的源代码中也听到了。 java文件中,Launcher类继承了Application类,并重绘了它的一些功能。 Application类中的main函数经过一系列的内部初始化,最终调用start函数。 Launcher类源代码中重新绘制了start函数。 在start函数中调用startApplication函数。 startApplication函数中调用checkForUpgrade函数来检查更新升级信息。 checkForUpgrade函数调用syncManifest函数用于同步manifest并同步更新到本地。

我的做法是注释掉syncManifest函数中的大部分实现代码,直接返回false,即没有更新,并添加一些调试日志,改动如下:

  /**
   * 同步manifest
   *
   * @return true 有更新
   */
  public boolean syncManifest() {
    ui.setPhase("liangys1115说肯定没有新版本...");
    // try {
    //   log.log(Level.INFO, "liangys1115获取远程配置文件:{0}", manifest.remoteManifest());
    //   ui.setPhase("liangys1115正在检测是否有新版本...");
    //   Manifest remoteManifest = Manifest.load(manifest.remoteManifest());
    //   if (!checkNew(remoteManifest)) {
    //     ui.setPhase(String.format("liangys1115当前已是最新版本:%s", manifest.getVersion()));
    //     this.newVersion = false;
    //     return false;
    //   }
    //   // 显示更新内容
    //   ui.initUpdateView();
    //   ui.setPhase(String.format("liangys1115检测到新版本:%s", manifest.getVersion()));
    //   Path localManifest = manifest.localManifest();
    //   if (Files.notExists(localManifest)) {
    //     Files.createDirectories(localManifest.getParent());
    //   }
    //   Files.writeString(manifest.localManifest(), remoteManifest.toJson());
    //   manifest = remoteManifest;
    //   // 显示更新内容
    //   if (!manifest.getChangeLog().isEmpty()) {
    //     log.log(Level.INFO, "liangys1115更新内容:{0}", manifest.getChangeLog());
    //     ui.setWhatNew(manifest.getChangeLog());
    //   }
    //   return true;
    // } catch (Exception e) {
    //   // 忽略更新失败
    //   log.log(Level.SEVERE, "liangys1115更新失败", e);
    // }
    return false;
  }

4、问题四:如何严格禁止软件在主窗口弹出报警?

继续看源码,通过软件运行时报警弹窗的显示内容,在uncle-novel源码中全局搜索,找到代码位置:

看这部分代码,做过桌面应用的攻城狮应该都知道,这里实现的是显示一个模式对话框(ModalBox),只有取消一键选项,结束后直接退出程序(stopApp)点击。

注释掉几行代码,如下:

  /**
   * 启动
   *
   * @param stage 舞台
   * @throws Exception 启动失败
   */
  @Override
  public void start(Stage stage) throws Exception {
    super.init();
    super.start(stage);
    initStage(stage);
    stage.show();
    // ModalBox.none().message("bye~").title("bye~").cancel("bye~").showAndWait();
    // App.stopApp();
    // 检测更新
    // UpdateUtils.checkForUpdate(stage);
    // MixPanelHelper.event(EVENT_LAUNCH);
    log.trace("启动耗时:{}ms", (System.currentTimeMillis() - LAUNCH_TIME));
  }

下一步是重新编译、打包、运行自检。

3.配置编译打包环境编译环境要求

windows(我用的是win10)

OpenJDK11

包装环境要求

执行程序4j

4.源码编译

ps:不知道用什么IDE工具来开发java等桌面应用程序。 踩了这么多坑之后,我不想再踩配置IDE的坑了,所以干脆从命令行开始。

4.1 重新编译jfx-launcher

首先需要cd到对应的源码目录,然后执行命令:

./gradlew.bat build

编译成功后如右图:

编译成功后,将对应的jar包替换到.gradle路径下。

4.2 重新编译uncle-novel

./gradlew.bat build

编译成功后如右图:

4.3 包装uncle-novel

Windows中打包依赖于exe4j程序,打包前需要安装并配置环境变量。

./gradlew.bat packageWin64

打包成功后如图:

源码的app/build/packager/目录下有对应的包文件,将压缩包复制到自己的目录下,解压后运行Uncle novel.exe。

总结

如果您对uncle-novel的补丁步骤感兴趣,可以交流。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 源码编译 网游源码编译修复-大叔小说pc版已修复 https://www.wkzy.net/game/189950.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务