#ShadowsocksR Droid 协议和混淆插件开发规范v1.0
####开发步骤
#####准备:
-
挑选您熟悉的语言:C,C++,Java,Kotlin。
-
如果使用C/C++则需要利用JNI间接调用。
-
如果使用Java或Kotlin则可以直接上手了。
#####协议插件:
-
协议插件应写在com.proxy.shadowsocksr.impl.plugin.proto包下,并继承AbsProtocol类。根据协议类型,类名以Verify或Auth开头,以Protocol结尾。如:AuthSimpleProtocol。
-
AbsProtocol类已保存构造器参数,子类可以直接访问,如无特殊需要则无需再次保存。
-
shareParam用于存储协议用于每个连接的公用数据。
-
在资源文件arrays.xml中,tcp_protocol_entry为协议插件对用户显示的名字,tcp_protocol_value为协议插件被App识别的名字,二者顺序要对应。
-
修改ProtocolChooser类,使其可以识别您写的协议或混淆插件。
#####混淆插件:
-
混淆插件应写在com.proxy.shadowsocksr.impl.plugin.obfs包下,并继承AbsObfs类。以Obfs结尾。如:HttpSimpleObfs。
-
AbsObfs类已保存构造器参数,子类可以直接访问,如无特殊需要则无需再次保存。
-
在资源文件arrays.xml中,obfs_method_entry为混淆插件对用户显示的名字,obfs_method_value为混淆插件被App识别的名字,二者顺序要对应。
-
修改ObfsChooser类,使其可以识别您写的协议或混淆插件。
-
如果您的混淆插件需要用户输入字符串参数,请修改PrefFragment类的configSpecialPref()、setPrefEnabled(boolean isEnable)以及loadCurrentPref()方法,以便App可以正确启用EditTextPreference供用户输入。
####提示
-
由于添加了协议,可能会产生由协议本身导致的断包,粘包的问题,这些问题需由插件自己处理。
-
尽可能减少异常抛出,不必要的内存拷贝以保证效率。
-
在数据解析出错时,返回byte[0]而不是null。
####如果您既想使用我们开发的SSR Droid,又想用自己写的插件(或是协议,混淆的思路)并且愿意公开它,那么欢迎Pull Request或通过任何你能联系到我们的方式来提交您的智慧结晶,我们会视情况将其加入并发布出来。