学习背景:

查看官网教程,有点蒙,搜集各个大牛博客以及维基百科整理一下,在此记录方便以后查看资源整理:    Mars源码下载:
Github链接:(有时候网真的不行啊)https://github.com/Tencent/mars
网盘链接: https://pan.baidu.com/s/1tNKH937ncLArsHrjwWTkgg 提取码: z5aqpyelliptic-百度网盘链接: https://pan.baidu.com/s/1BqFbFyyZMWv3jjCF8ywGxg 提取码: tgen

环境配置: JDK + NDK + Python + CMake

运行环境:
1. 系统:Ubuntu20.04 LTS 64位
2. Android Studio 4.0配置环境:
Ubuntu配置环境主要操作 bashrc 文件,常用的两个命令:打开bashrc文件:sudo gedit ~/.bashrc使bashrc文件改动立即生效:source ~/.bashrc1. 配置jdk环境2. 配置ndk环境:下载android-ndk-r20b(其它版本会出现编译错误的问题),下载网址:https://developer.android.com/ndk/downloads/older_releases配置环境变量:命令1:Ctrl + Alt + T 打开终端,输入命令:sudo gedit ~/.bashrc在文本最下方加入ndk环境配置:#ndkexport NDK_ROOT=/../../android-ndk-r20bexport PATH=$PATH:$NDK_ROOT命令2:验证ndk环境是否配置成功输入命令:ndk-build -v 3. 配置CMake环境命令1:安装Cmakesudo apt-get intsall CMake命令2:验证CMake是否安装成功cmake --version4. 配置Python环境             命令1:安装Pythonsudo apt-get intsall python命令2:验证CMake是否安装成功python

编译指定架构的库

1. 下载mars源码,git仓库地址为:https://github.com/Tencent/mars2. 进入源码中:mars/mars目录,执行脚本:生成armeabi-v7a架构:python build_android.py (默认生成)生成arm64-v8a架构:python build_android.py (修改此文件中的arch参数为arm64-v8a)选择3,然后Enter,只生成xlog模块的库;其它架构生成方式也是如此;3. 生成后的库保存在:sample/mars-master/mars/libraries/mars_xlog_sdk/libs目录下;

项目配置:

1. build.gradle(app)--->android标签下加入:externalNativeBuild {cmake {cppFlags "-std=c++11"abiFilters 'armeabi-v7a', 'arm64-v8a'}}2. 创建与java目录平级别的目录jniLibs,分别将刚生成的两个架构so文件复制进去3. 将xlog的完整路径复制到项目中,与包名同级4. 项目Application中进行XLog初始化(封装XLog,代替Log进行打印)//保存路径 final String SDCARD = Environment.getExternalStorageDirectory().getAbsolutePath();final String logPath = SDCARD + "/marssample/log";MarsLog.init(this, "app name", logPath);/*** 初始化操作* * true : 是否加载so库* Xlog.LEVEL_DEBUG 或  Xlog.LEVEL_INFO :打印日志的等级* Xlog.AppednerModeSync: 同步* Xlog.AppednerModeAsync: 异步* cachePath: 这个参数必传,而且要data下的私有文件目录,例如 /data/data/packagename/files/xlog, * mmap文件会放在这个目录,如果传空串,可能会发生 SIGBUS 的crash。  * logPath : xlog文件保存的路径* namePrefix: 一般填写项目名称* pub_key : 加/解密 用到的key (此处未加密)*/public class MarsLog {public static void init(Context context, String namePrefix, String logPath) {String cacheDir = context.getFilesDir() + "/xlog";if (BuildConfig.DEBUG) {Xlog.open(true, Xlog.LEVEL_DEBUG, Xlog.AppednerModeAsync, cacheDir, logPah, namePrefix, "");Xlog.setConsoleLogOpen(true);} else {Xlog.open(true, Xlog.LEVEL_INFO, Xlog.AppednerModeAsync, cacheDir, logPah, namePrefix, "");Xlog.setConsoleLogOpen(false);}Log.setLogImp(new Xlog());}此处也可以重新Log中打印的方法,使用MarsLog.v的形式进行日志打印,皆可}   5. 在文件需要导出之前,手动调用以下代码,将缓存区的日志刷新到文件存储里面,确保日志完整Log.appenderFlush();6. 在程序完全退出时,进行初始化,加入代码:Log.appenderClose();

打印XLog与查看Xlog

1. 直接在项目中打印xlog,打印完毕,在logcat日志模块成功看到日志;使用studio自带Device File Explorer 工具,进入data/data/当前包名/files/log , 即可查看到xlog ,右键save as到本地2. 找到之前下载好的mars源码,寻找目录   mars-master/mars/log/crypt目录下,其中有两个文件我们将要使用:decode_mars_crypt_log_file.py :使用此脚本可以打开 加密 的xlog文件decode_mars_nocrypt_log_file.py : 使用此脚本可以打开 未加密 的xlog文件当前我们生成的是没有加密的xlog文件,在mars-master/mars/log/crypt目录下,打开终端,命令行输入:python decode_mars_nocrypt_log_file.py + 导出到本地的xlog文件路径 ,此时会在xlog文件同级的目录下,生成一个与xlog文件名称相同的 .xlog文件,使用文本编辑器 即可查看刚打印的日志

Xlog日志的加密与解密

1. 安装 openssl命令:sudo apt-get install openssl2.下载 pyelliptic1.5.7pyelliptic1.5.7 不支持 openssl 1.1 版本,会报以下错误:AttributeError: /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1: undefined symbol: ECDH_OpenSSL安装下面这个打补丁的版本pip install https://github.com/mfranciszkiewicz/pyelliptic/archive/1.5.10.tar.gz#egg=pyelliptic百度网盘链接: https://pan.baidu.com/s/1BqFbFyyZMWv3jjCF8ywGxg 提取码: tgen3. 复制文件到指定位置openssl安装完毕 且 pyelliptic1.5.7补丁版下载完毕,进入重要一步:解压:pyelliptic1.5.7,进入其根目录下,将其所有文件复制到 mars源码的 mars-master/mars/log/crypt目录下,执行命令:python gen_key.py,会生成private_key 和 appender_open`s parameter 两个key使用文本保存好这两个key,接下来要用;4. 将上一步得到的key设置到 mars-master/mars/log/crypt中的decode_mars_crypt_log_file.py脚本中,如:#PRIV_KEY : private_key#PUB_KEY : appender_open`s parameter5. 把 pulic key作为appender_open 函数参数设置进去,private key务必保存在安全的位置,防止泄露public class MarsLog {final String pub_key = “”;public static void init(Context context, String namePrefix, String logPath) {String cacheDir = context.getFilesDir() + "/xlog";if (BuildConfig.DEBUG) {Xlog.open(true, Xlog.LEVEL_DEBUG, Xlog.AppednerModeAsync, cacheDir, logPah, namePrefix, pub_key);Xlog.setConsoleLogOpen(true);} else {Xlog.open(true, Xlog.LEVEL_INFO, Xlog.AppednerModeAsync, cacheDir, logPah, namePrefix, pub_key);Xlog.setConsoleLogOpen(false);}Log.setLogImp(new Xlog());} 

验证加密,验证解密

1. 导出加密的日志:卸载之前运行的程序,加入pub_key参数运行程序,按照之前的方法,使用studio自带Device File Explorer 工具,进入data/data/当前包名/files/log , 即可查看到xlog ,右键save as到本地2. 错误的解密方式:使用不加密decode_mars_nocrypt_log_file的脚本,对xlog进行解密,命令1 :python decode_mars_nocrypt_log_file.py + 导出到本地的xlog文件路径 ,查看刚打印的日志提示:use wrong decode script ,这是因为xlog已经加密了,使用这个nocrypt的脚本错误导致的,需要使用另一个脚本3. 正确的解密方式:(确保private_key和pub_key设置正确)     命令1:python decode_mars_crypt_log_file.py + 导出到本地的xlog文件路径 ,查看刚打印的日志 

Mars XLog日志模块集成相关推荐

  1. 微信终端跨平台组件 mars 系列(一) - 高性能日志模块xlog

    前言 mars 是微信官方的终端基础组件,是一个使用 C++ 编写的业务性无关,平台性无关的基础组件.目前已接入微信 Android.iOS.Mac.Windows.WP 等客户端.现正在筹备开源中, ...

  2. 整理:微信终端跨平台组件 mars 系列(一) - 高性能日志模块xlog

    学习网站:微信终端跨平台组件 mars 系列(一) - 高性能日志模块xlog 其中涉及知识: 垃圾回收机制 垃圾回收(garbage collection,简称GC)可以自动清空堆中不再使用的对象. ...

  3. Android高性能日志模块-Xlog 正篇

    Android高性能日志模块-Xlog 前言 日志可以帮助我们定位问题,记录当前程序的运行状态.与后端开发不同的是,Android中的Log原生支持的仅是本地调试和信息记录,并不能很方便地定位远程问题 ...

  4. windows11 mars xlog解密环境配置

    参考后面的参考文章1配置即可,但需要注意以下几点: 1.只需要参考文章1中的1.2.3.5步即可,python2.7.12安装后自带有pip工具 2.第2步的openssl下载1.1.1p版本,1.1 ...

  5. 腾讯mars xlog源码解析

    前言   之前由于公司发展需要,app网络请求日志始终没有一个良好的分析手段,故公司成立了apm项目小组,通过AOP编程获取app网络请求日志并上报到服务端,然后通过网页多维度分析用户网络请求数据,类 ...

  6. 【SpringBoot】 logback 日志的集成

    logback 日志的集成 logback.xml 配置文件 具体类中使用日志 使用默认日志配置 SpringBoot 核心知识点整理! Logback 是由 log4j 创始人设计的又一个开源日志组 ...

  7. logging日志模块

    集成logging日志模块 logger = logging.getLogger('test') logger.setLevel(logging.DEBUG) # 输出所有大于DEBUG级别的log ...

  8. Android Mars XLog的编译

    由于官方文档关于编译部分文档较少,摸索了半天终于编译成功. 所以本文记录下windows下编译Mars需要的配置,环境是windows10 64位. 切换指定XLog版本 需要切换到指定版本的代码再编 ...

  9. Android Mars XLog 自定义存储格式

    经过前两篇文章 Android 微信高性能日志存储库Xlog的使用 Android Mars XLog的编译 我们大概了解了XLog,但是微信开源的XLog日志库,格式是写死的,如下图所示 那我们如果 ...

最新文章

  1. [目录]Linux 核心系统命令目录
  2. 【转载】C#中List集合使用Exists方法判断是否存在符合条件的元素对象
  3. 秒杀多线程第五篇 经典线程同步 关键段CS
  4. mongoDB 特别指令用法
  5. 2.5D休闲娱乐生活类插画素材,给设计添彩!
  6. 樊登高效休息法心得400字_超级干货!让你快速恢复精力的高效休息法!!
  7. 大麦盒子显示服务器超时,大麦盒子卡顿怎么办?这几个方法可以快速解决
  8. RIME鼠须管保姆级五笔配置教程
  9. [算法学习no5]kmp
  10. 迷茫的程序员和中国软件业
  11. matlab qpsk调试 rls均衡,通信系统仿真速成第2天:QPSK调制与解调(实验)
  12. 重定向(Redirect)和请求转发(forward)的区别?
  13. python中3or5什么意思_解析python中and与or用法
  14. 在maven中安装及配置 本地仓库、阿里云代理下载、固定的jdk版本——详细过程
  15. [人物]一个预言家的命运:忽悠了马云的“骗子”,风口上的先知
  16. 市值破7000亿美元 贝索斯成全球新首富,成就亚马逊的正是人工智能
  17. c++调用偏僻数据库db2
  18. 利用D3.js快速绘制力导向图
  19. 分枝限界法求解0/1背包问题
  20. mysql8主从复制环境搭建docker实现

热门文章

  1. excel中怎么拆分表格
  2. 构建iOS持续集成平台
  3. 大数据上传-GB/T 32960测试开发实践
  4. 如何理性的调整「rwnd」和「cwnd」的大小
  5. 2022 年十大最佳网络分析工具介绍
  6. 11月14日:jquery
  7. ios 扫码枪外设 键盘模式_iPadOS 显威力,苹果 iPad Pro 终于用上带触控板的外接键盘...
  8. iOS开发 - 给Label加下划线、中划线
  9. 在页面上的输入框中即可以输入文字,又可以动态的插入图片的功能.
  10. 信创引领丨呼叫中心加速适配国产化