Mars
(中文版本请参看这里)
Mars — это кроссплатформенный инфраструктурный компонент, разработанный мобильной командой WeChat. Он доказал свою эффективность для миллиардов пользователей WeChat.
Начните с примера использования здесь.
Скрипты Python поддерживают только Python 3.10 и выше.
Выберите Android, iOS/OS X или Windows.
Вы можете использовать либо mars-wrapper, либо mars-core. Мы рекомендуем вам использовать mars-wrapper, когда вы просто хотите создать образец или демонстрацию, в то время как mars-core предпочтительнее использовать в вашем приложении.
Добавьте зависимости, добавив следующие строки в ваш app/build.gradle.
dependencies {
compile 'com.tencent.mars:mars-wrapper:1.2.5'
}
ИЛИ
Добавьте зависимости, добавив следующие строки в ваш app/build.gradle.
dependencies {
compile 'com.tencent.mars:mars-core:1.2.5'
}
ИЛИ
Если вы просто хотите использовать xlog, добавьте зависимости, добавив следующие строки в ваш app/build.gradle. Обратите внимание: xlog включён в mars-core и mars-wrapper.
dependencies {
compile 'com.tencent.mars:mars-xlog:1.2.5'
}
Если вы читаете здесь, убедитесь, что вы добавили зависимости от mars-wrapper, mars-core или mars-xlog.
Инициализируйте Xlog при запуске вашего приложения. Не забудьте использовать эксклюзивную папку для сохранения файлов журналов, никакие другие файлы не допускаются в папке, так как они будут автоматически удалены функцией очистки в Xlog.
Когда в вашем приложении используется несколько процессов, убедитесь, что каждый процесс имеет свой собственный файл журнала.
System.loadLibrary("c++_shared");
System.loadLibrary("marsxlog");
final String SDCARD = Environment.getExternalStorageDirectory().getAbsolutePath();
final String logPath = SDCARD + "/marssample/log";
// this is necessary, or may crash for SIGBUS
final String cachePath = this.getFilesDir() + "/xlog"
//init xlog
Xlog xlog = new Xlog();
Log.setLogImp(xlog);
if (BuildConfig.DEBUG) {
Log.setConsoleLogOpen(true);
Log.appenderOpen(Xlog.LEVEL_DEBUG, Xlog.AppednerModeAsync, "", logPath, logFileName, 0);
} else {
Log.setConsoleLogOpen(false);
Log.appenderOpen(Xlog.LEVEL_INFO, Xlog.AppednerModeAsync, "", logPath, logFileName, 0);
}
Неинициализированный Xlog, когда ваше приложение завершает работу
Log.appenderClose();
Если вы добавляете зависимости mars-core в свой проект, вам необходимо инициализировать и освободить STN. Инициализируйте STN перед использованием.
// set callback **AppLogic.setCallBack(stub);**
**StnLogic.setCallBack(stub);**
**SdtLogic.setCallBack(stub);**
// Инициализация Mars PlatformComm
**Mars.init(getApplicationContext(), new Handler(Looper.getMainLooper()));**
// Инициализация Mars
**StnLogic.setLonglinkSvrAddr(profile.longLinkHost(), profile.longLinkPorts());**
**StnLogic.setShortlinkSvrAddr(profile.shortLinkPort());**
**StnLogic.setClientVersion(profile.productID());**
**Mars.onCreate(true);**
**BaseEvent.onForeground(true);**
**StnLogic.makesureLongLinkConnected();**
*Сначала следует вызвать интерфейс setCallBack, а затем Mars.init. Затем, чтобы инициализировать Mars, необходимо строго следовать порядку четырёх команд. Наконец, после инициализации Mars можно вызывать onForeground и makesureLongLinkConnect.*
Уничтожить STN или выйти из приложения:
**Mars.onDestroy();**
#### Событие изменения
Изменение сети:
**BaseEvent.onNetworkChange()**
Если вы добавите зависимости mars-wrapper в свой проект, вам просто нужно инициализировать STN и не нужно его деинициализировать.
**MarsServiceProxy.init(this, getMainLooper(), null);**
Независимо от того, какой способ зависимостей вы использовали, вы должны обратить внимание на следующее.
Состояние (фон или передний план) приложения изменилось:
**BaseEvent.onForeground(boolean);**
Изменилась учётная запись приложения:
**StnLogic.reset();**
Если вы хотите изменить алгоритм шифрования Xlog, упаковщик/распаковщик longlink/shortlink или хотите определить другие компоненты самостоятельно, обратитесь [сюда](https://github.com/Tencent/mars/wiki/Mars-Android-%E6%8E%A5%E5%85%A5%E6%8C%87%E5%8D%97).
### iOS/OS X
Скомпилируйте:
**python build_ios.py**
или
**python build_osx.py**
1. Добавьте mars.framework как зависимость вашего проекта.
2. Переименуйте файлы в mars/libraries/mars_android_sdk/jni с расширением .rewriteme в расширение .cc.
3. Добавьте заголовочные файлы в mars/libraries/mars_android_sdk/jni и исходные файлы из шага 2 в ваш проект.
#### Инициализация Xlog
Инициализируйте Xlog при запуске приложения. Не забудьте использовать эксклюзивную папку для сохранения файлов журнала, никакие другие файлы не допускаются в папке, так как они будут удалены функцией очистки в Xlog автоматически.
**NSString* logPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingString:@"/log"];**
// Установите запрет на резервное копирование для logpath
**const char* attrName = "com.apple.MobileBackup";**
**u_int8_t attrValue = 1;**
**setxattr([logPath UTF8String], attrName, &attrValue, sizeof(attrValue), 0, 0);**
// инициализируем xlogger
**#if DEBUG**
**xlogger_SetLevel(kLevelDebug);**
**appender_set_console_log(true);**
**#else**
**xlogger_SetLevel(kLevelInfo);**
**appender_set_console_log(false);**
**#endif**
**XLogConfig config;**
**config.mode_ = kAppenderAsync;**
**config.logdir_ = [logPath UTF8String];**
**config.nameprefix_ = "Test";**
**config.pub_key_ = "";**
**config.compress_mode_ = kZlib;**
**config.compress_level_ = 0;**
**config.cachedir_ = "";**
**config.cache_days_ = 0;**
**appender_open(config);**
Закройте xlog в функции «applicationWillTerminate»:
**appender_close();**
#### Инициализация STN
Инициализируйте 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);**
**}**
**- (void)setLongLinkAddress:(NSString *)string port:(const unsigned short)port debugIP:(NSString *)IP {**
**std::string ipAddress([string UTF8String]);**
**std::string debugIP([IP UTF8String]);** **Текст запроса:**
Firstly, you should call the setCallBack interface, and secondly, the Mars.init. Then, to initialize the Mars, there is to need to strictly follow the orders of the four commands. Finally, after Mars are initialized, onForeground and makesureLongLinkConnect can be called.
If you want to destroy STN or exit App:
```objc
- (void)destroyMars {
mars::baseevent::OnDestroy();
}
Event Change:
When the App's state of background or foreground is changed:
- (void)reportEvent_OnForeground:(BOOL)isForeground {
mars::baseevent::OnForeground(isForeground);
}
Network change:
- (void)reportEvent_OnNetworkChange {
mars::baseevent::OnNetworkChange();
}
Windows: Install Visual Studio 2015. Compile:
python build_windows.py
Xlog Init: Initialize Xlog when your app starts. Remember to use an exclusive folder to save the log files, no other files are acceptable in the folder since they would be removed by the cleansing function in Xlog automatically.
std::string logPath = ""; //use your log path
std::string pubKey = ""; //use you pubkey for log encrypt
// init xlog
#if DEBUG
xlogger_SetLevel(kLevelDebug);
appender_set_console_log(true);
#else
xlogger_SetLevel(kLevelInfo);
appender_set_console_log(false);
#endif
appender_open(kAppenderAsync, logPath.c_str(), "Test", 0, pubKey.c_str());
Uninitialized xlog before your app exits:
appender_close();
STN Init:
Initialize STN before you use it:
void setShortLinkDebugIP(const std::string& _ip, unsigned short _port)
{
mars::stn::SetShortlinkSvrAddr(_port, _ip);
}
void setShortLinkPort(unsigned short _port)
{
mars::stn::SetShortlinkSvrAddr(_port, "");
}
void setLongLinkAddress(const std::string& _ip, unsigned short _port, const std::string& _debug_ip)
{
vector<uint16_t> ports;
ports.push_back(_port);
mars::stn::SetLonglinkSvrAddr(_ip, ports, _debug_ip);
}
void Init()
{
mars::stn::SetCallback(mars::stn::StnCallBack::Instance());
mars::app::SetCallback(mars::app::AppCallBack::Instance());
mars::baseevent::OnCreate();
//todo
//mars::stn::SetClientVersion(version);
//setShortLinkDebugIP(...)
//setLongLinkAddress(...)
mars::baseevent::OnForeground(true);
mars::stn::MakesureLonglinkConnected();
}
Firstly, you should call the setCalBack interface, and secondly, the Mars.init. Then, to initialize the Mars, there is to need to strictly follow the orders of the four commands. Finally, after Mars are initialized, onForeground and makesureLongLinkConnect can be called.
If you want to destroy STN or exit App:
mars::baseevent::OnDestroy();
Перевод текста на русский язык:
Прежде всего необходимо вызвать интерфейс setCallBack, а затем — Mars.init. Затем, чтобы инициализировать Mars, необходимо строго следовать порядку четырёх команд. Наконец, после инициализации Mars можно вызывать onForeground и makesureLongLinkConnect.
Если вы хотите уничтожить STN или закрыть приложение:
- (void)destroyMars {
mars::baseevent::OnDestroy();
}
Изменение события:
При изменении состояния приложения на фоновое или переднее:
- (void)reportEvent_OnForeground:(BOOL)isForeground {
mars::baseevent::OnForeground(isForeground);
}
Сетевое изменение:
- (void)reportEvent_OnNetworkChange {
mars::baseevent::OnNetworkChange();
}
Для Windows: Установите Visual Studio 2015. Скомпилируйте:
python build_windows.py
Инициализация Xlog: Инициализируйте Xlog при запуске вашего приложения. Не забудьте использовать эксклюзивную папку для сохранения файлов журнала, никакие другие файлы не должны находиться в этой папке, так как они будут удалены функцией очистки в Xlog автоматически.
std::string logPath = ""; //используйте свой путь к журналу
std::string pubKey = ""; //используйте ключ шифрования журнала
// инициализируем xlog
#if DEBUG
xlogger_SetLevel(kLevelDebug);
appender_set_console_log(true);
#else
xlogger_SetLevel(kLevelInfo);
appender_set_console_log(false);
#endif
appender_open(kAppenderAsync, logPath.c_str(), «Test», 0, pubKey.c_str());
Неинициализированный xlog перед выходом из приложения:
appender_close();
Инициализация STN:
Инициализируйте STN перед использованием:
void setShortLinkDebugIP(const std::string& _ip, unsigned short _port)
{
mars::stn::SetShortlinkSvrAddr(_port, _ip);
}
void setShortLinkPort(unsigned short _port)
{
mars::stn::SetShortlinkSvrAddr(_port, "");
}
void setLongLinkAddress(const std::string& _ip, unsigned short _port, const std::string& _debug_ip)
{
vector<uint16_t> ports;
ports.push_back(_port);
mars::stn::SetLonglinkSvrAddr(_ip, ports, _debug_ip);
}
void Init()
{
mars::stn::SetCallback(mars::stn::StnCallBack::Instance());
mars::app::SetCallback(mars::app::AppCallBack::Instance());
mars::baseevent::OnCreate();
//todo
//mars::stn::SetClientVersion(version);
//setShortLinkDebugIP(...)
//setLongLinkAddress(...)
mars::baseevent::OnForeground(true);
mars::stn::MakesureLonglinkConnected();
}
Прежде всего необходимо вызвать интерфейс setCalBack, а затем Mars.init. Затем, чтобы инициализировать Mars, необходимо строго следовать порядку четырёх команд. Наконец, после того как Mars будет инициализирован, можно вызывать onForeground и makeSureLongLinkConnected. Mars
Лицензия
Mars находится под лицензией MIT. Подробнее см. в файле LICENSE.
Mars — это официальный кроссплатформенный и межотраслевой базовый компонент для терминалов от WeChat.
Для получения информации об использовании образцов см. здесь.
python >= 3,10 Подключение к Android, iOS/OS X или Windows.
Gradle предлагает два способа подключения: mars-wrapper или mars-core. Если вы просто хотите создать образец, рекомендуется использовать mars-wrapper для быстрой разработки. Однако, если вы хотите использовать Mars в своём приложении, рекомендуется использовать mars-core, который обеспечивает большую гибкость настройки.
Добавьте зависимость mars-wrapper в файл app/build.gradle:
dependencies {
compile 'com.tencent.mars:mars-wrapper:1.2.5'
}
Или
Добавьте зависимость mars-core в файл app/build.gradle:
dependencies {
compile 'com.tencent.mars:mars-core:1.2.5'
}
Или
Если вы хотите использовать только xlog, добавьте зависимость xlog (mars-core и mars-wrapper уже включают xlog):
dependencies {
compile 'com.tencent.mars:mars-xlog:1.2.5'
}
Прежде чем продолжить, убедитесь, что вы добавили зависимость mars-wrapper, mars-core или mars-xlog.
После загрузки Xlog в начале программы необходимо инициализировать Xlog. Однако обратите внимание, что если ваше приложение использует несколько процессов, не следует выводить журналы нескольких процессов в один и тот же файл. Кроме того, сохраняйте файлы журналов в отдельном каталоге, чтобы избежать их автоматической очистки xlog.
System.loadLibrary("c++_shared");
System.loadLibrary("marsxlog");
final String SDCARD = Environment.getExternalStorageDirectory().getAbsolutePath();
final String logPath = SDCARD + "/marssample/log";
// this is necessary, or may crash for SIGBUS
final String cachePath = this.getFilesDir() + "/xlog"
//init xlog
Xlog.XLogConfig logConfig = new Xlog.XLogConfig();
logConfig.mode = Xlog.AppednerModeAsync;
logConfig.logdir = logPath;
logConfig.nameprefix = logFileName;
logConfig.pubkey = "";
logConfig.compressmode = Xlog.ZLIB_MODE;
logConfig.compresslevel = 0;
logConfig.cachedir = "";
logConfig.cachedays = 0;
if (BuildConfig.DEBUG) {
logConfig.level = Xlog.LEVEL_VERBOSE;
Xlog.setConsoleLogOpen(true);
} else {
logConfig.level = Xlog.LEVEL_INFO;
Xlog.setConsoleLogOpen(false);
}
Log.setLogImp(new Xlog());
При выходе из программы закройте журнал:
Log.appenderClose();
Если вы включили 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 (обратный вызов файла можно посмотреть в demo), затем вызвать Mars.init, а затем onForeground и makesureLongLinkConnect. Порядок между ними можно изменить по своему усмотрению. Обратите внимание: STN по умолчанию работает в фоновом режиме, поэтому сначала необходимо инициализировать STN. После необходимо явно вызвать один раз BaseEvent.onForeground(true)
При необходимости освободить STN или выйти из программы:
Mars.onDestroy();
При переключении сети:
BaseEvent.onNetworkChange()
Если вы добавляете mars-wrapper в качестве зависимости в свой проект, вам нужно только явно инициализировать STN, не нужно выполнять обратную инициализацию (поскольку mars-wrapper выполняет обратную инициализацию).
MarsServiceProxy.init(this, getMainLooper(),null);
Независимо от того, используете ли вы mars-wrapper или mars-core, вы должны обратить особое внимание на следующие события:
BaseEvent.onForeground(boolean);
StnLogic.reset();
Если вы хотите изменить алгоритм шифрования Xlog или часть упаковки длинного и короткого соединения или даже изменить другие части компонента, обратитесь к здесь.
Компиляция
python build_ios.py
или
python build_osx.py
Добавьте mars.framework в качестве зависимости в ваш проект и удалите суффикс «rewriteme» из файлов в каталоге mars/libraries/mars_android_sdk/jni и заголовочные файлы вместе и добавьте их в свой проект.
После запуска программы загрузите Xlog и сразу же инициализируйте его. Но обратите внимание, что для сохранения каталога журналов используйте отдельный каталог, чтобы предотвратить случайное удаление файлов 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 DEBUG
xlogger_SetLevel(kLevelDebug);
appender_set_console_log(true);
#else
xlogger_SetLevel(kLevelInfo);
appender_set_console_log(false);
#endif
XLogConfig config;
config.mode_ = kAppenderAsync;
config.logdir_ = [logPath UTF8String];
config.nameprefix_ = "Test";
config.pub_key_ = "";
config.compress_mode_ = kZlib;
config.compress_level_ = 0;
config.cachedir_ = "";
config.cache_days_ = 0;
appender_open(config);
В функции applicationWillTerminate выполните обратную инициализацию Xlog
appender_close();
Перед использованием 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);
}
- (void)setLongLinkAddress:(NSString *)string port:(const unsigned short)port debugIP:(NSString *)IP {
std::string ipAddress([string 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 (обратный вызов файла можно написать в соответствии с демонстрацией), затем вызовите Mars.init, а затем вызовите onForeground и makesureLongLinkConnect. Порядок между ними может быть произвольно изменён. Обратите внимание: STN по умолчанию находится в фоновом режиме, поэтому после инициализации STN необходимо явно вызватьBaseEvent.onForeground(true)
Для освобождения STN или выхода из программы:
- (void)destroyMars {
mars::baseevent::OnDestroy();
}
Переключение переднего и заднего плана:
- (void)reportEvent_OnForeground:(BOOL)isForeground {
mars::baseevent::OnForeground(isForeground);
}
Сетевое переключение:
- (void)reportEvent_OnNetworkChange {
mars::baseevent::OnNetworkChange();
}
Установите Visual Studio 2015
Скомпилируйте
python build_windows.py
Поместите
Примечание: в ответе могут быть неточности, поскольку некоторые фрагменты исходного текста невозможно перевести без контекста. mars.lib в качестве зависимости добавляется к вашему проекту, файлы из каталога mars/libraries/mars_android_sdk/jni с суффиксом «rewriteme» удаляются вместе с этим суффиксом и включаются в ваш проект.
После загрузки Xlog при запуске программы следует сразу же его инициализировать. При этом необходимо использовать отдельный каталог для сохранения логов, чтобы избежать их автоматической очистки xlog.
std::string logPath = ""; //use your log path
std::string pubKey = ""; //use you pubkey for log encrypt
// init xlog
#if DEBUG
xlogger_SetLevel(kLevelDebug);
appender_set_console_log(true);
#else
xlogger_SetLevel(kLevelInfo);
appender_set_console_log(false);
#endif
appender_open(kAppenderAsync, logPath.c_str(), "Test", 0, pubKey.c_str());
Перед завершением работы программы необходимо выполнить обратную инициализацию Xlog:
appender_close();
Перед использованием STN необходимо выполнить инициализацию:
void setShortLinkDebugIP(const std::string& _ip, unsigned short _port)
{
mars::stn::SetShortlinkSvrAddr(_port, _ip);
}
void setShortLinkPort(unsigned short _port)
{
mars::stn::SetShortlinkSvrAddr(_port, "");
}
void setLongLinkAddress(const std::string& _ip, unsigned short _port, const std::string& _debug_ip)
{
vector<uint16_t> ports;
ports.push_back(_port);
mars::stn::SetLonglinkSvrAddr(_ip, ports, _debug_ip);
}
void Init()
{
mars::stn::SetCallback(mars::stn::StnCallBack::Instance());
mars::app::SetCallback(mars::app::AppCallBack::Instance());
mars::baseevent::OnCreate();
//todo
//mars::stn::SetClientVersion(version);
//setShortLinkDebugIP(...)
//setLongLinkAddress(...)
mars::baseevent::OnForeground(true);
mars::stn::MakesureLonglinkConnected();
}
Порядок инициализации не обязательно должен строго соответствовать указанному коду, но важно сначала вызвать интерфейс setCallBack (обратный вызов), затем Mars.init, после чего — onForeground и makesureLongLinkConnect. Порядок между этими вызовами можно изменять по своему усмотрению. Обратите внимание: STN по умолчанию работает в фоновом режиме, поэтому после инициализации STN нужно активно вызвать BaseEvent.onForeground(true).
При необходимости освободить STN или завершить программу:
mars::baseevent::OnDestroy();
Если у вас есть другие вопросы:
Для получения информации о ветвлении Mars, управлении проблемами и рекомендациями PR, пожалуйста, прочитайте Mars Contributing Guide.
Mars использует протокол MIT, подробности см. в LICENSE.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )