前言:由于typora在1.0版本正式推出后以前的beta版本都会弹出错误提示“This beta version of Typora is expired, please download and install a newer version.”导致必须升级正式版本付费使用,本次内容教大家如何跳过beta版本的提示信息继续使用typora

1、下载beta版本typroa并安装

地址:https://github.com/Light-of-Fireworks/typroa_bata_0.11

2、下载typoraCracker解包/打包工具

注意:typoraCracker使用python语言编写,请提前安装好python3环境

地址:https://github.com/Light-of-Fireworks/typoraCracker

3、解压typoraCracker,并在typoraCracker根目录下打开cmd

4、解压typora资源

python typora.py C:/Users/Administrator/AppData/Local/Programs/Typora/resources/app.asar ./out

注:C:/Users/Administrator/AppData/Local/Programs/Typora代表的是你安装typora的路径,不清楚的可以右键typora图标选择打开文件所在位置即可 ./out意思是解压至当前目录的out目录下,即会在当前目录下创建一个名为out的目录并解码app.asar文件

注意!!! app.asar的位置必须是你typroa安装位置,不可以将app.asar复制到其他地方进行解码,必须解码typroa安装位置的app.asar,因为需要解码的不止是app.asar,还有其他拓展文件

5、修改License.js

打开刚刚生成的out\dec_app目录,可以看到一个License.js文件,使用文本编辑器进行编辑,可以使用idea等工具进行格式化后查看源代码。

其中可以使用Ctrl+F搜索”This beta version of Typora is expired, please download and install a newer version.”就可以看到如下代码

const firstValidateLicense = e => {
    licenseInitialed = !0;
    const t = readLicenseInfo(), {license: n, email: i} = t || {};
    n && i ? (fillLicense(i, n), renewLicense(t, e)) : unfillLicense()
}, showDialog = (e, t) => electron.dialog.showMessageBox(null, {
    type: "error",
    buttons: ["OK"],
    defaultId: 0,
    cancelId: 0,
    title: e,
    message: t
}), endDevTest = function () {
    app.expired = !0, showDialog(Dict.getPanelString("Error"), Dict.getPanelString("This beta version of Typora is expired, please download and install a newer version.")).then(() => {
        shell.openExternal("https://typora.io/#download"), setTimeout(() => {
            process.exit(1)
        }, 1e3)
    })
}, validateDevTest = function () {
    if (!hasLicense && !isLinux && global.devVersion && global.PRODUCTION_MODE) {
        var e = getInstallDate(), t = new Date;
        console.log("buildTime is 1637125121389"), (isNaN(1637125121389) || t - 1637125121389 > 20736e6) && endDevTest(), e -= 0, console.log("verInitTime is " + e), !isNaN(e) && t - e > 1728e7 && endDevTest()
    }
}, showLicensePanelIfNeeded = function () {
    shouldShowNoLicenseHint(!0) && !app.setting.inFirstShow && (isLinux && Math.random() < .95 || (!lastShown || new Date - lastShown > 18e6 || getTrailRemains(!0, 30) <= 0) && showLicensePanel())
};

其中validateDevTest方法会验证版本是否过期

5.1函数释义:

endDevTest 函数用于显示一个对话框,提示用户下载并安装更新版本。然后,它会打开 Typora 的下载页面,并在 1 秒后退出程序。

validateDevTest 函数用于检查开发版本的有效性。如果没有许可证且不是 Linux 系统,则会检查安装日期和构建时间。如果超过了指定时间,则调用 endDevTest 函数。

5.2代码释义(validateDevTest ):

console.log(“buildTime is 1637125121389”):打印typora构建日期

(isNaN(1637125121389) || t - 1637125121389 > 20736e6) && endDevTest():查构建时间是否为数字(使用 isNaN 函数),并检查当前时间与构建时间之差是否大于 20736e6 毫秒(约 240 天)。如果满足这些条件之一,则调用 endDevTest 函数。

20736e6 是科学计数法的表示方法,它等于 20736 * 10^6,也就是 20736000000约 240 天。

console.log(“verInitTime is “ + e), !isNaN(e) && t - e > 1728e7 && endDevTest():使用 console.log 函数打印安装日期 e,然后检查安装日期是否为数字(使用 isNaN 函数),并检查当前时间 t 与安装日期之差是否大于 1728e7 毫秒(约 200 天)。如果满足这些条件,则调用 endDevTest 函数。

1728e7 是科学计数法的表示方法,它等于 1728 * 10^7,也就是 17280000000约 200 天。

根据如上代码我们仅需要修改一处地方即可,即将validateDevTest函数返回true即可,这样endDevTest函数就不会被调用也就不会有提示框了。

修改代码如下:

validateDevTest = function () {
    return true;
}

6、回编译

将我们修改好的dec_app目录重新打包为app.asar,命令如下(在typoraCracker根目录执行):

python typora.py -u ./out/dec_app .

注意最后面有一个小数点不要漏了,代表将dec_app回编译后的文件放置typoraCracker根目录

7、替换app.asar

将编译好的typoraCracker/app.asar替换C:/Users/Administrator/AppData/Local/Programs/Typora/resources/app.asar后重新打开typora即可使用