EasyClick参考代码复制修改即可

//在主方法开头调用此方法
function yanKaMi() {
    //请求地址
    var 请求地址 = "https://api.yankami.cn/"

    //卡密后台登录账号 获取自己项目的信息
    var 开发者账号 = ""

    //卡密后台项目的ID
    var 项目ID = 0

    //如果当前版本与服务器返回的版本不一致则提示更新
    var 项目版本 = 0

    //卡密后台项目的项目秘钥
    var 项目秘钥 = ""

    //卡密后台登录账号 用户输入
    var 账号 = ""

    //获取界面输入的卡密 用户输入
    var 卡密 = ""

    //首次验证会保存到期时间,首次验证失败会停止!
    var 验证超时分钟 = 1440//可调整
    var 验证心跳频秒 = 10//可调整
    var 验证时间 = false//变量需要 不要调整
    var 获取卡密到期时间 = false//变量需要 不要调整

    var 设备编号 = DeviceWrapper.prototype.getAndroidId()

    获取项目信息()
    获取卡密信息()

    //开启一个线程(多线程方式,主线程必须在运行)
    setTimeout(function () {
        while (true) {
            sleep(验证心跳频秒 * 1000);
            获取卡密信息()
        }
    }, 0)

    function 获取项目信息() {
        var 验证码 = new Date().getTime()
        var 请求返回 = sendGet(请求地址 + "xm?phone=" + 开发者账号 + "&xmid=" + 项目ID + "&yzm=" + 验证码);
        console.log("获取项目信息:" + 请求返回)
        if (!请求返回.startsWith("{") || !请求返回.endsWith("}")) {
            toast("获取项目信息失败!")
            sleep(1000)
            exit()//停止辅助
        } else {
            //解析JSON
            var json = JSON.parse(请求返回)
            if (json["code"] == 201) {
                toast("项目不存在!")
                sleep(1000)
                exit()//停止辅助
            } else if (json["code"] != 200) {
                toast("获取项目信息失败!")
                sleep(1000)
                exit()//停止辅助
            }else {
                var md5 = UtilsWrapper.prototype.dataMd5((项目秘钥 + base64(json["data"]) + 验证码));
                if (md5.indexOf(json["md5"]) != 0) {
                    toast("非法的返回!")
                    sleep(1000)
                    exit()//停止辅助
                }
                //解析JSON
                var data = JSON.parse(json["data"])
                //项目状态 1启用 0停用
                console.log("项目状态:" + data["xmzt"])
                //版本状态 1启用 0停用
                console.log("版本状态:" + data["bbzt"])
                //项目版本
                console.log("项目版本:" + data["xmbb"])
                //下载地址
                console.log("下载地址:" + data["xzdz"])
                //最低状态 1启用 0停用
                console.log("最低状态:" + data["zdzt"])
                //最低版本
                console.log("最低版本:" + data["zdbb"])
                //更新地址
                console.log("更新地址:" + data["gxdz"])
                //公告状态 1启用 0停用
                console.log("公告状态:" + data["ggzt"])
                //项目公告
                console.log("项目公告:" + data["xmgg"])
                //试用状态 1启用 0停用
                console.log("试用状态:" + data["syzt"])
                //试用时长
                console.log("试用时长:" + data["sysc"])

                if (data["xmzt"] == 0) {
                    toast("项目已停用!")
                    sleep(1000)
                    exit()//停止辅助
                }

                if (data["bbzt"] == 1) {
                    if (data["xmbb"] != 项目版本) {
                        toast("项目有更新!")
                        //sleep(1000)
                        //exit()//停止辅助
                    }
                }
            }
        }
    }

    function 获取卡密信息() {
        var 验证码 = new Date().getTime()
        验证心跳频秒 = 验证心跳频秒 < 1 ? 1 : 验证心跳频秒
        if (!验证时间 || new Date().getTime() - 验证时间 >= 验证心跳频秒 * 1000 || 验证码 && 验证码 > 获取卡密到期时间 * 1000) {
            var 请求返回 = sendGet(请求地址 + "km?phone=" + 账号 + "&xmid=" + 项目ID + "&km=" + 卡密 + "&jqm=" + 设备编号 + "&yzm=" + 验证码);
            console.log("获取卡密信息:" + 请求返回)
            if (!请求返回.startsWith("{") || !请求返回.endsWith("}")) {
                if (!获取卡密到期时间 || parseInt((验证码 - 验证时间) / 1000) >= 验证超时分钟 * (1000 * 60)) {
                    toast("验证失败,请重新运行!")
                    sleep(1000)
                    exit()//停止辅助
                }
                if (验证码 > 获取卡密到期时间 * 1000) {
                    toast("卡密已经到期!")
                    sleep(1000)
                    exit()//停止辅助
                }
            } else {
                //解析JSON
                json = JSON.parse(请求返回)
                if (json["code"] == 201) {
                    toast("卡密不存在!")
                    sleep(1000)
                    exit()//停止辅助
                } else if (json["code"] == 202) {
                    toast("项目已停用!")
                    sleep(1000)
                    exit()//停止辅助
                } else if (json["code"] == 203) {
                    toast("卡密已经到期!")
                    sleep(1000)
                    exit()//停止辅助
                } else if (json["code"] == 204) {
                    toast("已经绑定其他设备!")
                    sleep(1000)
                    //换绑机器码
                    请求返回 = sendGet(请求地址 + "jqm?phone=" + 账号 + "&xmid=" + 项目ID + "&km=" + 卡密 + "&jqm=" + 设备编号);
                    if (!请求返回.startsWith("{") || !请求返回.endsWith("}")) {
                        toast("换绑失败!")
                    } else {
                        var json = JSON.parse(请求返回)
                        if (json["code"] != 200) {
                            toast("换绑失败!")
                        } else {
                            toast("换绑成功!")
                            sleep(1000)
                            toast("请重新运行!")
                        }
                    }
                    sleep(1000)
                    exit()//停止辅助
                } else if (json["code"] == 200) {
                    var md5 = UtilsWrapper.prototype.dataMd5((项目秘钥 + base64(json["data"]) + 验证码));
                    if (md5.indexOf(json["md5"]) != 0) {
                        toast("非法的返回!")
                        sleep(1000)
                        exit()//停止辅助
                    }
                    //解析JSON
                    var data = JSON.parse(json["data"])
                    //首次验证提示
                    if (!获取卡密到期时间) {
                        toast("卡密到期日期:" + dateFormat("YYYY-mm-dd HH:MM", new Date(data["dqsj"] * 1000)))
                        sleep(1000)
                    }
                    验证时间 = new Date().getTime();
                    获取卡密到期时间 = data["dqsj"];
                } else {
                    toast("获取卡密信息失败!")
                    sleep(1000)
                    exit()//停止辅助
                }
            }
        }
    }

    //编码
    function base64(str) {
        return java.lang.String(android.util.Base64.encode(java.lang.String(str).getBytes(), 2));
    }

    //发送Get请求
    function sendGet(target) {
        return "" + HttpWrapper.prototype.httpGet(target, null, 30000, null);
    }

    //解析时间格式
    function dateFormat(fmt, date) {
        let ret;
        const opt = {
            "Y+": date.getFullYear().toString(),        // 年
            "m+": (date.getMonth() + 1).toString(),     // 月
            "d+": date.getDate().toString(),            // 日
            "H+": date.getHours().toString(),           // 时
            "M+": date.getMinutes().toString(),         // 分
            "S+": date.getSeconds().toString()          // 秒
            // 有其他格式化字符需求可以继续添加,必须转化成字符串
        };
        for (let k in opt) {
            ret = new RegExp("(" + k + ")").exec(fmt);
            if (ret) {
                fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
            }
        }
        return fmt;
    }
}