项目简介MarsMars 是微信官方的跨平台跨业务的终端基础组件。
comm:可以独立使用的公共库,包括 socket、线程、消息队列、协程等;
xlog:高可靠性高性能的运行期日志组件;
SDT: 网络诊断组件;
STN: 信令分发网络模块,也是 Mars 最主要的部分。
Samples
gradle 接入我们提供了两种接入方式:mars-wrapper或者mars-core。如果你只是想做个 sample 推荐使用 mars-wrapper,可以快速开发;但是如果你想把 mars 用到你的 app 中的话,推荐使用 mars-core,可定制性更高。
mars-wrapper
在 app/build.gradle 中添加 mars-wrapper 的依赖:
dependencies {
compile 'com.tencent.mars:mars-wrapper:1.1.3'}
或者
mars-core
在 app/build.gradle 中添加 mars-core 的依赖:
dependencies {
compile 'com.tencent.mars:mars-core:1.1.3'}
接着往下操作之前,论文,请先确保你已经添加了 mars-wrapper 或者 mars-core 的依赖
Xlog Init
在程序启动加载 Xlog 后紧接着初始化 Xlog。但要注意如果你的程序使用了多进程,不要把多个进程的日志输出到同一个文件中,保证每个进程独享一个日志文件。而且保存 log 的目录请使用单独的目录,不要存放任何其他文件防止被 xlog 自动清理功能误删。
System.loadLibrary("stlport_shared");
System.loadLibrary("marsxlog");
final String SDCARD = Environment.getExternalStorageDirectory().getAbsolutePath();
final String logPath = SDCARD + "/marssample/log";
//init xlog
if (BuildConfig.DEBUG) {
} else {
Xlog.appenderOpen(Xlog.LEVEL_INFO, Xlog.AppednerModeAsync, '', logPath, 'MarsSample'); Xlog.setConsoleLogOpen(false);}
Log.setLogImp(new Xlog());
程序退出时关闭日志:
Log.appenderClose();
STN Init
如果你是把 mars-core 作为依赖加入到你的项目中的话,你需要显式的初始化和反初始化 STN
在使用 STN 之前进行初始化
// set callback
AppLogic.setCallBack(stub);
StnLogic.setCallBack(stub);
SdtLogic.setCallBack(stub);
// Initialize the Mars PlatformComm
Mars.init(getApplicationContext(), new Handler(Looper.getMainLooper()));
// Initialize the Mars
StnLogic.setLonglinkSvrAddr(profile.longLinkHost(), profile.longLinkPorts());
StnLogic.setShortlinkSvrAddr(profile.shortLinkPort());
StnLogic.setClientVersion(profile.productID());
Mars.onCreate(true);
BaseEvent.onForeground(true);
StnLogic.makesureLongLinkConnected();
初始化顺序不一定要严格遵守上述代码的顺序,但在初始化时首先要调用 setCallBack 接口 (callback 文件的编写可以参考 demo),再调用 Mars.init,最后再调用onForeground 和 makesureLongLinkConnect,中间顺序可以随意更改。 注意:STN 默认是后端,所以初始化 STN 后需要主动调用一次 BaseEvent.onForeground(true)
需要释放 STN 或者退出程序时:
Mars.onDestroy();
Event Change
网络切换时:
BaseEvent.onNetworkChange()
如果你是把 mars-wrapper 作为依赖加入到你的项目中,你只需要显式的初始化 STN,不需要反初始化(因为 mars-wrapper 会进行反初始化)
MarsServiceProxy.init(this, getMainLooper(),null);
不管你是使用 mars-wrapper 还是 mars-core,你都需要特别注意以下事件:
前后端切换:
BaseEvent.onForeground(boolean);
应用的账号信息更改:
StnLogic.reset();
编译
python build_apple.py
把 mars.framework 作为依赖加入到你的项目中
Xlog Init
在程序启动加载 Xlog 后紧接着初始化 Xlog。但要注意保存 log 的目录请使用单独的目录,不要存放任何其他文件防止被 xlog 自动清理功能误删。
NSString* logPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingString:@"/log"];
// set do not backup for logpath
const char* attrName = "com.apple.MobileBackup";
u_int8_t attrValue = 1;
setxattr([logPath UTF8String], attrName, &attrValue, sizeof(attrValue), 0, 0);
// init xlogger
if DEBUGxlogger_SetLevel(kLevelDebug);
appender_set_console_log(true);
xlogger_SetLevel(kLevelInfo);
appender_set_console_log(false);
appender_open(kAppednerAsync, [logPath UTF8String], "Test");
在函数 "applicationWillTerminate" 中反初始化 Xlog
appender_close();
STN Init
在你用 STN 之前初始化:
(void)setCallBack {
mars::stn::SetCallback(mars::stn::StnCallBack::Instance()); mars::app::SetCallback(mars::app::AppCallBack::Instance());}
(void) createMars {
mars::baseevent::OnCreate();}
(void)setClientVersion:(UInt32)clientVersion {
mars::stn::SetClientVersion(clientVersion);}
(void)setShortLinkDebugIP:(NSString *)IP port:(const unsigned short)port {
std::string ipAddress([IP UTF8String]); mars::stn::SetShortlinkSvrAddr(port, ipAddress);}
(void)setShortLinkPort:(const unsigned short)port {
mars::stn::SetShortlinkSvrAddr(port);}
#p#分页标题#e#
(void)setLongLinkAddress:(NSString )string port:(const unsigned short)port debugIP:(NSString )IP {
std::string ipAddress([string UTF8String]); std::string debugIP([IP UTF8String]); std::vector<uint16_t> ports; ports.push_back(port); mars::stn::SetLonglinkSvrAddr(ipAddress,ports,debugIP);}
(void)setLongLinkAddress:(NSString *)string port:(const unsigned short)port {
std::string ipAddress([string UTF8String]); std::vector<uint16_t> ports; ports.push_back(port); mars::stn::SetLonglinkSvrAddr(ipAddress,ports);}
(void)reportEvent_OnForeground:(BOOL)isForeground {
mars::baseevent::OnForeground(isForground);}
(void)makesureLongLinkConnect {
mars::stn::MakesureLonglinkConnected();}
初始化顺序不一定要严格遵守上述代码的顺序,但在初始化时首先要调用 setCallBack 接口 (callback 文件的编写可以参考 demo),开题报告,再调用 Mars.init,最后再调用 onForeground 和 makesureLongLinkConnect,中间顺序可以随意更改。 注意:STN 默认是后端,所以初始化 STN 后需要主动调用一次 BaseEvent.onForeground(true)
需要释放 STN 或者退出程序时:
(void)destroyMars {
mars::baseevent::OnDestroy();}
Event Change
前后端切换时:
(void)reportEvent_OnForeground:(BOOL)isForeground {
mars::baseevent::OnForeground(isForeground);}
网络切换时:
(void)reportEvent_OnNetworkChange {
mars::baseevent::OnNetworkChange();}
github地址:https://github.com/Tencent/mars