Android項目中集成Mars 日誌模塊

學習背景:

項目中用到,但是隻停留在用的範疇,並未知曉如何使用,此行記錄一下,以便在其他項目中使用
    
資源整理:    
    
Mars源碼下載:
Github鏈接:(有時候網真的不行啊)https://github.com/Tencent/mars
網盤鏈接: https://pan.baidu.com/s/1tNKH937ncLArsHrjwWTkgg 提取碼: z5aq

pyelliptic-百度網盤鏈接: https://pan.baidu.com/s/1BqFbFyyZMWv3jjCF8ywGxg 提取碼: tgen

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

運行環境:
1. 系統:Ubuntu20.04 LTS 642. Android Studio 4.0

配置環境:
Ubuntu配置環境主要操作 bashrc 文件,常用的兩個命令:
    打開bashrc文件:sudo gedit ~/.bashrc
    使bashrc文件改動立即生效:source ~/.bashrc
   
1. 配置jdk環境
    
2. 配置ndk環境:
   下載android-ndk-r20b(其它版本會出現編譯錯誤的問題),下載網址:https://developer.android.com/ndk/downloads/older_releases
   配置環境變量:
     命令1:Ctrl + Alt + T 打開終端,輸入命令:sudo gedit ~/.bashrc
        在文本最下方加入ndk環境配置:
        #ndk
		export NDK_ROOT=/../../android-ndk-r20b
		export PATH=$PATH:$NDK_ROOT
	 命令2:驗證ndk環境是否配置成功
        輸入命令:ndk-build -v 
            
3. 配置CMake環境
	 命令1:安裝Cmake
            sudo apt-get intsall CMake
     命令2:驗證CMake是否安裝成功
            cmake --version
            
4. 配置Python環境             
	 命令1:安裝Python
            sudo apt-get intsall python
     命令2:驗證CMake是否安裝成功
            python

編譯指定架構的庫

1. 下載mars源碼,git倉庫地址爲:https://github.com/Tencent/mars

2. 進入源碼中: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.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 openssl
	
2.下載 pyelliptic1.5.7

	pyelliptic1.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 提取碼: tgen
	
3. 複製文件到指定位置
     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 parameter
	
5. 把 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文件路徑 ,查看剛打印的日誌 
		
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章