前几天写了一个编译Openwrt ipk包的博客《Ubuntu 使用Openwrt SDK交叉编译ipk包过程全纪录(超多图)》,那篇文章是以WNDR4300为例,使用恩山上大神编译的纯净版固件,然后自己下载ss和luci的github源码使用openwrt SDK编译出ipk安装包,然后又在openwrt官网上找到ss和luci相关的依赖安装,实现了最新版的ss和luci界面,并支持UDP转发的ss代理。

但是WNDR4300昂贵的价格注定了它应用范围不会太广,只在家里用用都觉得奢侈。而将同样的功能移植到华为 hg255d这个又老又便宜的路由器上才是生产力。

首先华为hg255d具备16m ROM和32m RAM,已经具备了只能路由器的最低配置,完全可以跑Openwrt和ss插件。同样300m的路由器比如极路由1s要一百多快,而且刷好ss版的要更贵

其次我试过使用网山大神给的纯净版固件,不过内核版本都不一致,luci的依赖包kmod-iptable-tproxy安装不上,没有图形界面可用性就大大降低了。

最后其实最重要的是,刷好op的hg255d在某宝二手的售价仅为25人民币,想想这么点钱就能买一个能装插件的智能路由器,而且还能开发USB、多拨等功能,实在是太超值了。

所以一方面为了获得最新的ss和luci插件,另一方面避免固件内核不一致带来的烦恼,非常需要自己动手编译一套固件。

在我的操作过程中发现ImageBuilder编译固件的过程要比SDK编译ipk包容易的多,也不容易出错,但是想要把ss这样的功能直接编译进固件里面,还是需要学会SDK编译ipk包的方式,编译固件的主要目的不是为了添加新的软件,而是为了解决ipk包的依赖,因为openwrt官网上给出的依赖包内核版本经常变化,不能通用。

下文会以Openwrt CC 15.05 为例,具体介绍如何在Ubuntu环境下交叉编译纯净版固件,向固件中添加依赖库,制作整合ss等功能固件的方法

首先我们先通过SDK编译最新版的ss及其luci ipk安装包,具体方法可以看我之前的一篇文章:《Ubuntu 使用Openwrt SDK交叉编译ipk包过程全纪录(超多图)》

然后我们就有了shadowsocks-libev_2.5.5-2_ramips_24kec.ipk,luci-app-shadowsocks_1.3.6-1_all.ipk两个文件,先留着备用,当然没有这两个文件也不耽误我们编译固件,可以略过此步。

下面说一下各版本固件的作用:

纯净版固件:用于观察ss或者其他第三方程序的依赖包,为编译完整版做基础。也可以做普通上网用

依赖包版固件:因为ss等插件频繁更新,而固件我们只想编译一次,所以这个版本的固件只编译进ss的所有依赖包,方便以后opkg升级ss使用

完整版ss固件:方便别人安装使用,一劳永逸的固件。

下面我们编译一个纯净版固件,尽可能少的安装依赖和服务,力图将ROM大小降到最低,满足日常上网要求即可的高稳定性低资源消耗的纯净版本。

第一步:登录openwrt官网,根据CPU型号找到hg255d编译工具的下载界面,也就是:https://downloads.openwrt.org/chaos_calmer/15.05/ramips/rt305x/

其中,packages是我们安装ipk时寻找依赖包的地方

ImageBuilder是今天的主角,用来生成bin固件的

SDK是编译Github上c源码成ipk包的

下面我们就下载ImageBuilder准备生成固件吧,首先下载这个tar包,在windows上随意下载,linux上可以直接使用wget下载,不过国内的网速实在很慢,很容易失败,这个tar包大小在1.5G左右,尽量使用断点续传工具加国外代理进行下载。

下载之后放到Ubuntu系统上,使用tar xjf Openwrt-ImageBuilder-15.05-ramips-rt305x.Linux-x86_64.tar.bz2解压这个tar包,由于这个包1.5G那么大,需要等个两三分钟,不要以为是死机了,耐心的等等就好。差一点的电脑可能要登上5分钟或更久。

解压完成之后,直接cd进解压完毕的文件夹中,现在我们有两件很重要的事情需要做

1、将ImageBuilder的Makefile放开对HG255d的支持

2、选择合适依赖包编译进固件

其中第一点尤为重要,要是没有处理ImageBuilder的Makefile,不管你编译多少次都编译不出能用的固件来的。方法也不麻烦,编辑如下文件:

nano target/linux/ramips/image/Makefile

搜索HG255D,去掉前面的注释符#,至于官方为什么要注释掉这一行,有一种说法是官方的版本只在lintel u-boot上测试过,如果刷在带原厂u-boot的HG255D上会出问题,这也许是官方没有提供HG255D固件下载的原因吧。

下面开始选择合适的依赖包。

为什么要选择依赖包呢,因为此时如果直接使用make是可以编译出openwrt固件来的,不过这样的固件几乎除了一个内核之外别的什么都没有,没有web界面的路由器后台。所以要把路由器后台的luci界面和一些其他和网络NAT有关的依赖包编译进去,语法格式是

make image PROFILE=HG255D

# HG255D为路由器名字, 默认只有基础包
make image PROFILE=HG255D PACKAGES=”pk1 pk2 pk3 -pk4”

# -pk4表示去掉pk4包

所以按照以往的经验,我这里给出一个基础依赖包的列表

make image PROFILE=HG255D PACKAGES="base-files busybox dropbear firewall fstools jsonfilter libc libgcc mtd netifd opkg procd swconfig ubox ubus ubusd uci usign kmod-lib-crc-ccitt kmod-ipv6 kmod-ip6tables kmod-ipt-conntrack kmod-ipt-core kmod-ipt-nat kmod-nf-conntrack kmod-nf-conntrack6 kmod-nf-ipt kmod-nf-ipt6 kmod-nf-nat kmod-ppp kmod-pppoe kmod-pppox kmod-slhc kmod-gpio-button-hotplug kmod-spi-bitbang kmod-spi-gpio kmod-ath kmod-ath9k-common kmod-cfg80211 kmod-mac80211 libip4tc libip6tc libxtables libblobmsg-json libexpat libiwinfo libjson-c libnl-tiny libubox libubus libuci ip6tables iptables hostapd-common iw odhcp6c odhcpd ppp ppp-mod-pppoe iwinfo jshn libjson-script uboot-envtools base-files libc libgcc busybox dropbear mtd uci opkg netifd fstools kmod-gpio-button-hotplug swconfig uboot-envtools kmod-usb-core kmod-usb-ohci kmod-usb2 kmod-ledtrig-usbdev wget luci iptables-mod-nat-extra bind-dig dnsmasq-full kmod-leds-gpio wpad-mini kmod-usb-dwc2"

其中,最后三个包是openwrt指明单独要给hg255d路由器添加的,可以使用make info来查看

其实就是LED指示灯和USB接口的驱动

在列表中luci就是路由器后台的web管理界面,luci-ssl指https连接,会因为没有证书报站点不安全的异常,所以我们不用luci-ssl,用luci。

wget是用于http下载,下载一些ipk包的时候会用的上。

iptables用来做端口转发,十分必要

dnsmasq换成dnsmasq-full,方便以后用ipset做域名过滤,功能比dnsmasq强大的多。网上有人说要先去掉dnsmasq再安装如"-dnsmasq dnsmasq-full"但是我也没详细测试,因为在我打出的版本中,dnsmasq已经支持ipset了,或许并非是真正的dnsmasq-full,但是对于ipset来说已经够用了

其余的包都是系统必备的一些包,多数我也不清楚是做什么用的。kmod开头的经常会因为openwrt.org提供的内核版本发生变化,所以为了以后扩展方便,尽量把常用的kmod包都打进去

好了执行上面那一坨命令,开始编译,编译过程大概分一下几部:

1、从openwrt.org更新本地依赖包的列表

2、根据更新后的依赖包列表和上面要求编译的包名,去openwrt.org下载相应的ipk包

3、把指定的ipk包编译进固件中

速度视网速而定,一般三四分钟就可以搞定,多数时间都在下载,编译其实很快的。

编译中如果出现哪个包无法编译,直接把这个包从列表中拿走就行

比如我们在列表中加一个不存在的包“kmod-auth9k”就会报如下错误

这时候只要在列表中删掉它即可

正常编译的命令如下,注意列表上不要有换行

编译成功后的终端显示如下

然后就可以在/bin/ramips中找到编译好的固件,如下

然后我们的纯净版固件就这样做好了,整个过程比编译ipk简单。我编译出来的纯净版大小为5377KB,已经是比较大了,网上有很多纯净包甚至编译进ss的包菜3点几兆。所以说明我们的纯净包并不纯净,比如编译进了很多kmod和dnsmasq-full这样的程序。

现在把这个固件通过web后台或者tftp的方式刷进路由器看看长啥样

注意:在点击更新固件之后不要将路由器断电,大约要等10分钟左右,tftp会快一点,可以不停的ping 192.168.1.1,知道能稳定的ping通就算刷完了,可以浏览器打开192.168.1.1,这个固件因为没有配置LED指示灯,所以不插lan线所有灯都不亮属正常现象(包括电源指示灯都不亮)。

刷成功之后只有LAN灯亮,wifi默认关闭

下一步我们就要配置路由器后台的登录密码,不然没法用SSH登录路由器获取root权限,推荐用户名root,密码root

然后我们就可以通过SSH软件登陆路由器安装apk了,我使用的是Xshell5

可以看到纯净版没有安装ss。

下面我们将ss的ipk安装包通过winscp上传到路由器上尝试安装,并解决依赖。

先安装ss,再安装luci界面

从图中可以看出,安装ss非常顺利,不需要解决什么依赖(我在wndr4300上装需要解决两个依赖)在安装luci界面的时候提示安装ipset依赖,于是我们去openwrt官网下载ipset ipk安装包

放到路由器上去继续安装

然后发现ipset还需要依赖包libmnl,那我们就先安装libmnl,再安装ipset,再安装luci-Shadowsocks,如上图

luci安装好之后我们就可以试试能不能用啦

可以看到Shadowsocks-libev已经可以正常运行了

路由器后台也出现了Shadowsocks的服务按钮

点进去之后发现已经可以配置了,只是UDP转发还不能用,提示缺少iptables-mod-tproxy和ip两个包,那么我们继续下载安装

这其中发现还需要额外安装一个依赖包kmod-ipt-tproxy

现在应该都能用了

好了,现在路由器已经从纯净版武装了各种依赖和插件刷好,可以使用ss服务了,下面整理一下这个过程安装的各种依赖

我上面编译的纯净版固件下载地址:

HG255d路由器Openwrt CC 15.05纯净版固件

上面所列的所有ipk包的下载地址:

HG255D_OP_15.05_ss_luci_所需ipk包

有了上面两个包,下载下来就可以复制我上面的操作

如果想实现以后光升级ss和luci界面的ipk就好的目的,我们可以把这次安装的各种依赖直接打包到固件中去,下次就不需要去openwrt.org下载这么多依赖包了,而且,有些依赖包随着内核更新会无法安装,为日后升级带来困难,所以我们要在纯净版固件的基础上添加依赖支持

make image PROFILE=HG255D PACKAGES="base-files busybox dropbear firewall fstools jsonfilter libc libgcc mtd netifd opkg procd swconfig ubox ubus ubusd uci usign kmod-lib-crc-ccitt kmod-ipv6 kmod-ip6tables kmod-ipt-conntrack kmod-ipt-core kmod-ipt-nat kmod-nf-conntrack kmod-nf-conntrack6 kmod-nf-ipt kmod-nf-ipt6 kmod-nf-nat kmod-ppp kmod-pppoe kmod-pppox kmod-slhc kmod-gpio-button-hotplug kmod-spi-bitbang kmod-spi-gpio kmod-ath kmod-ath9k-common kmod-cfg80211 kmod-mac80211 libip4tc libip6tc libxtables libblobmsg-json libexpat libiwinfo libjson-c libnl-tiny libubox libubus libuci ip6tables iptables hostapd-common iw odhcp6c odhcpd ppp ppp-mod-pppoe iwinfo jshn libjson-script uboot-envtools base-files libc libgcc busybox dropbear mtd uci opkg netifd fstools kmod-gpio-button-hotplug swconfig uboot-envtools kmod-usb-core kmod-usb-ohci kmod-usb2 kmod-ledtrig-usbdev wget luci iptables-mod-nat-extra bind-dig dnsmasq-full kmod-leds-gpio wpad-mini kmod-usb-dwc2 libmnl kmod-ipt-tproxy ipset ip-full iptables-mod-tproxy"

后面几个以来的名字就是上面我们用到的以来的名字,ImageBuilder会自动的去openwrt.org下载需要的ipk包然后编译到固件中去。

我编译好的固件下载地址:华为HG255D包含ss所需依赖的 OP CC 15.05固件

下载之后可以直接把用SDK编译好的ss固件刷入进去,不需要解决依赖,防止内核版本变化。

有时候我们编译了固件并不只给自己用,可以分享给网上的小伙伴,所以我们可以把Shadowsocks-libev和它的luci界面打成一个完成的固件,交给其他人直接刷到HG255D中,但是openwrt.org上又没有ss和luci的ipk包,我们怎样编译呢。

我们把要编译的自定义包放到packages/base下,再修改make后面的包名列表,就可以把我们自己编好的ipk包打进去了

然后在make后面的包列表中把上面两个自编译包添加进去

make image PROFILE=HG255D PACKAGES="base-files busybox dropbear firewall fstools jsonfilter libc libgcc mtd netifd opkg procd swconfig ubox ubus ubusd uci usign kmod-lib-crc-ccitt kmod-ipv6 kmod-ip6tables kmod-ipt-conntrack kmod-ipt-core kmod-ipt-nat kmod-nf-conntrack kmod-nf-conntrack6 kmod-nf-ipt kmod-nf-ipt6 kmod-nf-nat kmod-ppp kmod-pppoe kmod-pppox kmod-slhc kmod-gpio-button-hotplug kmod-spi-bitbang kmod-spi-gpio kmod-ath kmod-ath9k-common kmod-cfg80211 kmod-mac80211 libip4tc libip6tc libxtables libblobmsg-json libexpat libiwinfo libjson-c libnl-tiny libubox libubus libuci ip6tables iptables hostapd-common iw odhcp6c odhcpd ppp ppp-mod-pppoe iwinfo jshn libjson-script uboot-envtools base-files libc libgcc busybox dropbear mtd uci opkg netifd fstools kmod-gpio-button-hotplug swconfig uboot-envtools kmod-usb-core kmod-usb-ohci kmod-usb2 kmod-ledtrig-usbdev wget luci iptables-mod-nat-extra bind-dig dnsmasq-full kmod-leds-gpio wpad-mini kmod-usb-dwc2 libmnl kmod-ipt-tproxy ipset ip-full iptables-mod-tproxy shadowsocks-libev luci-app-shadowsocks"

这个固件也许对很多人都有用,我就把它放出来供大家下载,下载这个固件之后只需刷到HG255D中就能使用,不需要登录SSH再设置

==================================================

后记:

在多次编译测试出一个能用的ss版本之后,使用ss上网没什么问题了,但是发现电源指示灯和WAN指示灯不亮,而且第一次启动路由器的时候wifi不会自动启动,于是准备着手解决指示灯的问题。

我发现直接在路由器后台配置LED的配置就可以不改动任何代码而修改LED的点亮情况,于是我直接从当前路由器的/etc/config目录下把system文件拷贝出来,准备当作配置直接打进固件里面,同样打进去的还有network文件,这里面可以修改路由器网卡的mac地址,路由器的默认ip地址,子网掩码等等信息,都可以直接从配置好的路由器直接拷贝一份打进去,另外还有wireless文件,打进这个就可以实现路由器首次开机wifi自动开启,这三个文件如下。

控制LED灯的system文件

config systemoption hostname 'OpenWrt'option timezone 'UTC'config timeserver 'ntp'list server '0.openwrt.pool.ntp.org'list server '1.openwrt.pool.ntp.org'list server '2.openwrt.pool.ntp.org'list server '3.openwrt.pool.ntp.org'option enabled '1'option enable_server '0'config led 'led_wifi_led'option name 'wifi'option sysfs 'hg255d:wlan'option dev 'wlan0'option trigger 'netdev'option mode 'link tx rx'option default '0'config led 'led_usb'option name 'USB'option sysfs 'hg255d:usb'option dev '1-1'option trigger 'usbdev'option interval '50'option default '0'config led 'led_lan'option name 'lan'option sysfs 'hg255d:internet'option default '0'option trigger 'netdev'option dev 'eth0.2'option mode 'rx'config ledoption default '0'option name 'Power'option sysfs 'hg255d:power'option trigger 'default-on'

控制无线自动开启的wireless文件

config wifi-device 'radio0'option type 'mac80211'option channel '11'option hwmode '11g'option path '10180000.wmac'option htmode 'HT20'config wifi-ifaceoption device 'radio0'option network 'lan'option mode 'ap'option ssid 'OpenWrt'option encryption 'none'

控制网卡mac地址和ip地址的network文件

config interface 'loopback'option ifname 'lo'option proto 'static'option ipaddr '127.0.0.1'option netmask '255.0.0.0'config globals 'globals'option ula_prefix 'fd97:273f:919a::/48'config interface 'lan'option ifname 'eth0.1'option force_link '1'option macaddr '00:0c:43:32:52:77'option type 'bridge'option proto 'static'option ipaddr '192.168.1.1'option netmask '255.255.255.0'option ip6assign '60'config interface 'wan'option ifname 'eth0.2'option force_link '1'option macaddr '00:0c:43:32:52:78'option proto 'dhcp'config interface 'wan6'option ifname 'eth0.2'option proto 'dhcpv6'config switchoption name 'switch0'option reset '1'option enable_vlan '1'config switch_vlanoption device 'switch0'option vlan '1'option ports '1 2 3 4 6t'config switch_vlanoption device 'switch0'option vlan '2'option ports '0 6t'

在ImageBuilder的目录下新建一个files文件夹,把这三个文件放到 files/etc/config下就可以,打包的时候添加参数FILES = files/即可,如图

编译命令改为

make image PROFILE=HG255D PACKAGES="base-files busybox dropbear firewall fstools jsonfilter libc libgcc mtd netifd opkg procd swconfig ubox ubus ubusd uci usign kmod-lib-crc-ccitt kmod-ipv6 kmod-ip6tables kmod-ipt-conntrack kmod-ipt-core kmod-ipt-nat kmod-nf-conntrack kmod-nf-conntrack6 kmod-nf-ipt kmod-nf-ipt6 kmod-nf-nat kmod-ppp kmod-pppoe kmod-pppox kmod-slhc kmod-gpio-button-hotplug kmod-spi-bitbang kmod-spi-gpio kmod-ath kmod-ath9k-common kmod-cfg80211 kmod-mac80211 libip4tc libip6tc libxtables libblobmsg-json libexpat libiwinfo libjson-c libnl-tiny libubox libubus libuci ip6tables iptables hostapd-common iw odhcp6c odhcpd ppp ppp-mod-pppoe iwinfo jshn libjson-script uboot-envtools base-files libc libgcc busybox dropbear mtd uci opkg netifd fstools kmod-gpio-button-hotplug swconfig uboot-envtools kmod-usb-core kmod-usb-ohci kmod-usb2 kmod-ledtrig-usbdev wget luci iptables-mod-nat-extra bind-dig dnsmasq-full kmod-leds-gpio wpad-mini kmod-usb-dwc2 shadowsocks-libev libmnl kmod-ipt-tproxy ipset ip-full iptables-mod-tproxy luci-app-shadowsocks" FILES=files/

下载我编译好的内置ss的固件:

内核版本:kernel_3.18.20-1-c8b57a131072a3198e594822481af3e0_ramips_24kec

ss版本:2.5.5-2

ss-luci版本:1.3.6-1

注:

1、原版uboot不能刷,会变砖

2、web页面升级和tftp刷均可,不要使用wifi升级,会变砖

3、ss支持开机自启(不开启UDP转发)

4、支持UDP转发(不推荐开启)

4、需要自己配置一个防DNS污染的地址,否则facebook这样的网站可能上不了

5、各个LED灯都正常点亮

下载地址: HG255D OP chaos_calmer 15.05带ss固件(11.2更新)

使用截图如下

注:即使如上图使用了OpenDNS,但是在某些地方还是不能阻止DNS污染,比如我在测试的时候facebook就上不去,但是google,twitter等正常,我只用pdnsd修复的这一问题

开启DNS转发示意图:

附:编译进固件的各个组件的作用

base-files:

OpenWrt wiki:This package contains a base filesystem and system scripts for OpenWrt.
翻译:这个包含了Openwrt的一个基础的文件系统和系统脚本

busybox :

OpenWrt wiki:OpenWRT uses BusyBox to implement the shell environment and most of the usual Unix commands. Instead of having a collection of separate binaries, BusyBox condenses them into one. Executables like vi, ls and grep are merely symbolic links to the BusyBox binary. BusyBox Command Help

翻译:OpenWrt使用busybox来实现shell环境和常规的Unix命令。BusyBox把一系列单独的二进制可执行文件合并成了一个,比如vi,ls和grep这些仅仅是一个BusyBox二进制文件的象征性连接

dropbear:

配置文件: /etc/config/dropbear

翻译:SSH服务器配置

firewall :

配置文件:/etc/config/firewall

OpenWrt wiki:OpenWrt relies on netfilter for packet filtering, NAT and mangling. The UCI Firewall provides a configuration interface that abstracts from the iptables system to provide a simplified configuration model that is fit for most regular purposes while enabling the user to supply needed iptables rules on his own when needed.

翻译:OpenWrt依靠netfilter来实现包过滤,NAT和包标记。UCI防火墙提供了一个从iptbales系统中抽象出的配置接口并实现了一个简单的配置模型。当用户需要的时候,该配置模板提供了很多iptables规则来满足多数的常规应用。

libc:安装bash需要的依赖库

libgcc:GCC依赖库

mtd:

OpenWrt wiki:mtd is a utility we use to write to an MTD (Memory Technology Device). Please read theNotes to learn more. cd /tmp wget http://www.example.org/original_firmware.bin mtd -r write /tmp/original_firmware.bin firmware

翻译:mtd是一个我们用来写内存设备的工具

netifd:

OpenWrt wiki:netifd can (probably) bring up a wired, static ip configuration without shell scripts. For everything else (PPPoE or 3G) it needs protocol handlers implemented as sets of shell functions.

翻译:netifd能够在适用用shell脚本的情况下搞一个有线的固定ip配置。对于其他的(PPPoE或3G)他需要通过一系列的shell功能该实现的协议处理机制。

procd:

OpenWrt wiki:procd is the new OpenWrt process management daemon written in C. It keeps track of processes started from init scripts (via ubus calls), and can suppress redundant service start/restart requests when the config/environment has not changed.

翻译:procd是一个用C写的新的OpenWrt 进程管理守护进程,它跟踪从init脚本中启动的进程(经过 ubus调用),并且能够在配置和环境没有改变的时候阻止重复的服务启动和重启请求。

swconfig:

OpenWrt wiki:The program swconfig allows you to configure configurable Ethernet network switches.

翻译:wsconfig允许你配置可配置的网络开关

ubus:为了在OpenWrt中提供守护进程和应用程序间的通讯,开发了ubus项目工程。它包含了守护进程、库以及一些额外的帮助程序。

uci:"uci"是"Unified Configuration Interface"(统一配置界面)的缩写,意在OpenWrt整个系统的配置集中化。

kmod-ipt-conntrack:

Openwrt wiki: kmod-ipt-conntrack Version: 3.3.8-1 Netfilter (IPv4) kernel modules for connection tracking Includes: - conntrack - defrag - iptables_raw - NOTRACK - state

翻译:Netfilter的连接跟踪核心组件

kmod-ppp:

OpenWrt wiki:Kernel modules for PPP support

翻译:为ppp提供支持的核心模块

iwinfo:

OpenWrt wiki:iwinfo is a CLI frontend to the custom library, which assembles information from various places. It is also used by LuCI

翻译:iwinfo是一个自定义CLI前端库,它可以组合来自多个位置的信息,并且它也被LuCI所使用

jshn:

OpenWrt wiki: Library for parsing and generating JSON from shell scripts

翻译:从shell脚本中解析和产生JSON格式的库

iw:

OpenWrt wiki: iw is the configuration utility for the nl80211 API.
翻译:iw是nl802.11API的一个配置功能

odhcpd:

用来通过relay方式使用ipv6网络的工具

kmod-usb-core:USB支持的内核

kmod-usb-ohci:OHCI USB控制器的核心支持

kmod-usb-uhci:UHCI USB控制器的核心支持

kmod-usb2: EHCI USB控制器的核心支持

kmod-ledtrig-usbdev: USB设备的LED指示灯驱动

usbutils: USB设备的列表功能

OpenWrt Image Builder 制作带插件的HG255D固件记录相关推荐

  1. 使用python制作ArcGIS插件(2)代码编写

    使用python制作ArcGIS插件(2)代码编写 by 李远祥 上一章节已经介绍了如何去搭建AddIn的界面,接下来要实现具体的功能,则到了具体的编程环节.由于使用的是python语言进行编程,则开 ...

  2. 前端Vue制作日历插件FullCalendar

    前端Vue制作日历插件FullCalendar 官方文档:https://fullcalendar.io/ 效果图 安装 Vue2:npm install --save @fullcalendar/v ...

  3. “音游制作实用插件-Koreographer入门教程”,“Unity2D 音游案例-节奏大师(基于Koreographer)”

    看着目录来阅读 第一个是免费视频 音游制作实用插件-Koreographer入门教程) 第二个是siki学院的收费视频 Unity2D 音游案例-节奏大师(基于Koreographer) Demo 音 ...

  4. Cytoscape制作带bar图和pie图节点的网络图

    采用cytoscape制作带bar图和pie图节点的网络图 作者:中科院微生物所 陈亮博士 本教程旨在告诉大家如何使用cytoscape根据Node信息表格制作带有barplot信息节点的网络图.以安 ...

  5. WPF中制作带中国农历的万年历

    WPF中制作带中国农历的万年历 原文:WPF中制作带中国农历的万年历 本例应用.net 2.0中的ChineseLunisolarCalendar类,制作出带中国农历的万年历.  先看看效果图片(已缩 ...

  6. arcgis python工具-使用python制作ArcGIS插件(1)工具介绍

    使用python制作ArcGIS插件(1)工具介绍 by 李远祥 ArcGIS从10.0开始支持addin(ArcGIS软件中又叫作加载项)的方式进行插件制作.相对于以往9.x系列,addin的无论是 ...

  7. Python+selenium 自动化-启用带插件的chrome浏览器,调用浏览器带插件,浏览器加载配置信息。

    正常的话我们启用的 chrome 浏览器是不带插件的,如果你能登陆 chrome 的话,你会发现登陆信息也没有,还有不管你怎样设置每次新打开的 chrome 都是默认设置的. 我们正常启动的浏览器每次 ...

  8. 制作npm插件vue-toast-m实例练习

    制作npm插件vue-toast-m实例练习(消息弹窗) 一.使用npm插件 import VueToast from 'vue-toast-demo-cc'Vue.use(VueToast)this ...

  9. vue 带全选和多选的表格怎么写_EXCEL五分钟,批量制作带照片的工地出入证

    作者:祝洪忠 转自:Excel之家ExcelHome 小伙伴们好啊,今天和大家分享一个邮件合并的技巧--批量制作带照片的工地出入证. 先看效果图: 要准备的材料包括: 一.Excel资料表 资料表中包 ...

  10. 使用python制作ArcGIS插件(5)其他技巧

    使用python制作ArcGIS插件(5)其他技巧 by 李远祥 使用python做插件开发,除了了解ArcToolBox工具之外,还需要在了解ArcPy的相关函数和接口.只有掌握了这些,才可以顺利的 ...

最新文章

  1. 由 粗 到 精 学 习 LVI-SAM: imageProjection模块
  2. JavaScript 操作 Cookie
  3. 为何python不好找工作k-为何有人说Python不好找工作?
  4. javascript对XMLHttpRequest异步请求的面向对象封装
  5. 关于打印机共享的注意事项——又被叫去修电脑了
  6. 字符集GBK升级UTF8
  7. 承担集团数万应用、研发人员日常工作,阿里持续交付平台的设计、迭代之道... 1
  8. 如何将stdin、stdout、stderr重定向到/dev/null
  9. IOS Emoji表情
  10. #puppet#新版puppet的问题
  11. 英语影响计算机专业,英语不好对于学习计算机编程来说到底有没有影响?
  12. 构建Android Push Notification Service服务端及客户端
  13. Evenly Separated Strings
  14. 差分信号光电耦合隔离转换PCB焊接式模块
  15. 关于SQL sever中创建表时出现“对象名无效”的情况
  16. 安卓内存数据分析和内存脚本分析教程分享
  17. linux下flock函数,flock()函数 Unix/Linux
  18. Word下划线怎么打?速速get这5个实用方法!
  19. 数据库mysql中对于drop_数据库之删除表数据drop、truncate和delete的用法
  20. 【万字长文】——作者底层逻辑辨析【自组织场景宣言】,拉开未来序幕!

热门文章

  1. 【Coursera】DNS加速器
  2. python ocr 识别车牌_python 实现的车牌识别项目
  3. python情感词提取_Python 文本挖掘:使用情感词典进行情感分析(算法及程序设计)...
  4. Go专栏“改善Go语言编程质量的50个有效实践”上线了
  5. java游戏猿人时代_猿人时代增值版_JAVA游戏免费版下载_7723手机游戏[www.7723.cn]
  6. 免费java版我的世界下载教程,我的世界java版下载,我的世界java版下载教程
  7. linux看视频播放器官方下载,SMPlayer - Linux 电影播放器
  8. 获取他人ip的几种方法
  9. Third《高质量程序设计指南—C++/C语言》(第二版)
  10. python出租车收费_使用Python分析纽约出租车搭乘数据