华硕改版的Koolshare软件中心插件开发方法汇总
相信使用华硕路由器
官方改版
或梅林
固件的小伙伴很大大部分是因为Koolshare
软件中心,有了它,可以通过安装插件获得更多玩法。
其实没有Koolshare
时,定制新功能也是可以的,只不过一切操作都是通过命令完成(只适合开发人员
),少了界面的直观和简单(更适合大众)。
那么,为了让新功能可以让更多人可以使用到,开发一个Koolshare
软件中心插件,并分享出来帮助大家使用。
v1.0版本软件中心插件开发方法
开发1.0版本插件有完整的开发教程: 梅林AM380软件中心插件开发教程详解
这个版本的文档编写的还算不错,基本上参考下来就可以编写出自己的插件来。
v1.0和v1.5两个版本都使用了
- skipdb: 嵌入式 k/v 数据库, 编译大小只有 300k。
skipdb可以代替nvram,并拥有比nvram更强大的功能。为了在嵌入式下更少的占用jffs的空间。建议最多使用配置条目为1w。(merlin正常使用nvram的配置条目为2000条) 当jffs占用大于8M时,会进行一次refresh,重新计算空间。 skipdbv2源码地址
了解更多可以阅读之前的文章380固件的Clash插件开发总结
v1.5版本软件中心插件开发方法
开发1.5版本插件需要提前阅读开发须知了解与1.0版本插件的差别。
API获取数据方法
var $j = jQuery.noConflict();
var dbus = {};
function get_dbus_data() {
$j.ajax({
type: "GET",
url: "/_api/clash",
async: false,
success: function(data) {
dbus = data.result[0];
conf2obj();
}
});
}
function conf2obj(){
var params = ['clash_group_type', 'clash_provider_file' ];
var params_chk = ['clash_gfwlist_mode', 'clash_trans', 'clash_enable', 'clash_use_local_dns' ];
for (var i = 0; i < params_chk.length; i++) {
if(dbus[params_chk[i]]){
E(params_chk[i]).checked = dbus[params_chk[i]] == "on";
}
}
for (var i = 0; i < params.length; i++) {
if(dbus[params[i]]){
E(params[i]).value = dbus[params[i]];
}
}
}
API提交数据方法
var $j = jQuery.noConflict();
//提交任务方法,实时日志显示
function post_dbus_data(script, arg, obj, flag){
var id = parseInt(Math.random() * 100000000);
var postData = {"id": id, "method": script, "params":[arg], "fields": obj};
$j.ajax({
type: "POST",
cache:false,
url: "/_api/",
data: JSON.stringify(postData),
dataType: "json",
success: function(response){
if(response.result == id){
if(flag && flag == "1"){
refreshpage();
}else if(flag && flag == "2"){
//continue;
//do nothing
}else{
document.getElementById("loadingIcon").style.display = "";
show_status();
}
}
}
});
}
function apply_action(action, data){
if( ! action ) {
return ;
}
if ( !data ) {
data = dbus
}
post_dbus_data("clash_control.sh", action, data);
}
function service_stop() {
apply_action("stop");
}
function service_start() {
apply_action("start");
}
function switch_service() {
if (document.getElementById('clash_enable').checked) {
dbus["clash_enable"] = "on";
service_start();
} else {
dbus["clash_enable"] = "off";
service_stop();
}
}
更新执行过程日志信息方法
- 脚本需要将执行日志内容保存到
/tmp/upload/xxxx.log
文件中。 - 通过调用
GET
方法获取日志信息,直到找到XU6J03M6
结束字符串(384/386版本
需要在脚本中输出,380版本
是CGI服务自动输出)为止。
//显示脚本执行过程的日志信息
function show_status() {
$j.ajax({
url: '/_temp/clash_status.log',
type: 'GET',
async: true,
cache: false,
dataType: 'text',
success: function(response) {
var retArea = E("clash_text_log");
if (response.search("XU6J03M6") != -1) {
document.getElementById("loadingIcon").style.display = "none";
retArea.value = response.replace("XU6J03M6", " ");
retArea.scrollTop = retArea.scrollHeight;
return true;
}
if (_responseLen == response.length) {
noChange++;
} else {
noChange = 0;
}
if (noChange > 1000) {
document.getElementById("loadingIcon").style.display = "none";
return false;
} else {
setTimeout("show_status();", 500);
}
retArea.value = response.replace("XU6J03M6", " ");
retArea.scrollTop = retArea.scrollHeight;
_responseLen = response.length;
},
error: function() {
setTimeout("show_status();", 500);
}
});
}
离线安装非法关键词检测屏蔽方法
离线安装时,非法关键词检测是在ks_tar_install.sh
脚本中设置的,检测关键词信息如下:
local ILLEGAL_KEYWORDS="ss|ssr|shadowsocks|shadowsocksr|v2ray|trojan|clash|wireguard|koolss|brook|fuck"
屏蔽它的方法就是将关键词替换个无意义的词,例如"xxxxxxxxx"。
接下来,我们就来实现这个操作,在路由器控制台终端执行如下命令:
# 先检查关键词变量是否存在
grep ILLEGAL_KEYWORDS /koolshare/scripts/ks_tar_install.sh
# 替换掉非法关键词信息
sed -i 's/local ILLEGAL_KEYWORDS=.*/local ILLEGAL_KEYWORDS="xxxxxxxxxxxxxxxxxxx"/g' /koolshare/scripts/ks_tar_install.sh
就这样,以后可以通过离线上传安装了。
牛皮!