firbase 如果收集JNI奔潰信息

工具安裝

如果你的終端提示找不到 brew重窟,這意味著 Homebrew 還沒(méi)有正確安裝或者它沒(méi)有被添加到你的 PATH 環(huán)境變量中载萌。以下是確保 Homebrew 安裝并能夠正確使用的步驟:

  1. 安裝 Homebrew
    首先惧财,按照以下命令安裝 Homebrew:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
這段命令會(huì)下載并運(yùn)行 Homebrew 的安裝腳本。安裝過(guò)程中可能需要你輸入管理員密碼扭仁。

  1. 將 Brew 添加到 PATH 變量
    安裝完成后垮衷,Homebrew 會(huì)給出一些關(guān)于如何將其路徑添加到你的 ~/.zshrc 或 ~/.zprofile 的提示。你可以手動(dòng)添加下面的行到你的 ~/.zshrc 或 ~/.zprofile 文件中(假設(shè)你使用的是 zsh乖坠,這是 macOS 的默認(rèn) shell):

echo 'eval "(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile eval "(/opt/homebrew/bin/brew shellenv)"
這兩行命令會(huì)將 Homebrew 添加到你的 PATH 環(huán)境變量中并立即生效搀突。

  1. 確認(rèn)安裝
    重新啟動(dòng)終端或者運(yùn)行以下命令將配置文件重新加載:

source ~/.zprofile
然后,驗(yàn)證 Homebrew 是否安裝成功:

brew --version
如果一切正常熊泵,你應(yīng)該能看到 Homebrew 的版本信息仰迁。

  1. 安裝 GNU Binutils
    使用 Homebrew 來(lái)安裝 binutils 包甸昏,其中包含 readelf 工具:

brew install binutils
安裝完成后,readelf 工具通常會(huì)被安裝到 /opt/homebrew/opt/binutils/bin 目錄徐许。

  1. 使用和配置 readelf
    現(xiàn)在你可以使用完整路徑來(lái)調(diào)用 readelf:

/opt/homebrew/opt/binutils/bin/readelf -n path/to/your/native/library.so
如果想要更方便地使用 readelf施蜜,可以將其添加到你的 PATH 環(huán)境變量中:

echo 'export PATH="/opt/homebrew/opt/binutils/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc

開(kāi)始行動(dòng)

Google原始地址

  1. 確保在模塊(應(yīng)用級(jí))Gradle 文件中將 nativeSymbolUploadEnabled 設(shè)置為 true
    要啟用符號(hào)文件的自動(dòng)上傳,你需在 build.gradle 文件中進(jìn)行配置雌隅。

android {
// ...
buildTypes {
release {
// Enable the Crashlytics mapping file upload process
firebaseCrashlytics {
nativeSymbolUploadEnabled true
}
}
}
}
這里的 nativeSymbolUploadEnabled 選項(xiàng)確保 Firebase Crashlytics 插件在構(gòu)建時(shí)自動(dòng)處理 NDK 符號(hào)文件翻默。

  1. 在每次構(gòu)建 NDK 庫(kù)后明確調(diào)用 uploadCrashlyticsSymbolFileBUILD_VARIANT 任務(wù)
    為了確保符號(hào)文件(symbol files)正確上傳,需要在每次構(gòu)建后調(diào)用 uploadCrashlyticsSymbolFile 任務(wù)恰起。

假設(shè)你的構(gòu)建變體是 release修械,你需要運(yùn)行以下命令:

./gradlew app:assembleRelease
app:uploadCrashlyticsSymbolFileRelease
這條命令會(huì)完成以下步驟:

assembleRelease:構(gòu)建 release 變體。
uploadCrashlyticsSymbolFileRelease:上傳構(gòu)建過(guò)程中生成的符號(hào)文件检盼。

  1. 驗(yàn)證二進(jìn)制文件中是否存在 GNU build ID
    Crashlytics 依賴(lài) GNU build ID 來(lái)關(guān)聯(lián)符號(hào)文件和崩潰報(bào)告肯污。你可以使用 readelf 工具來(lái)檢查你的 .so 文件是否包含 build ID。

運(yùn)行以下命令:

readelf -n path/to/your/library.so
如果輸出包含一個(gè)類(lèi)似 Build ID 的字段梯皿,說(shuō)明你的二進(jìn)制文件包含 GNU build ID仇箱。例如:

$ readelf -n your-library.so

Displaying notes found in: .note.gnu.build-id
Owner Data size Description
GNU 0x00000014 NT_GNU_BUILD_ID (unique build ID bitstring)
Build ID: c4b301917e8a4118a97d4a0e3f8b5ebc8a6b4b5d

  1. 如果 build ID 不存在,請(qǐng)?jiān)跇?gòu)建系統(tǒng)中添加 -Wl,--build-id 標(biāo)志
    為了確保生成的每個(gè)二進(jìn)制文件都包含 build ID东羹,你需要在鏈接階段添加 -Wl,--build-id 標(biāo)志剂桥。

對(duì)于 CMake,你可以這樣配置:

set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--build-id")
對(duì)于 ndk-build属提,你可以在 Android.mk 文件中增加相應(yīng)的 LOCAL_LDFLAGS:

LOCAL_LDFLAGS := -Wl,--build-id
這樣权逗,構(gòu)建的目標(biāo)庫(kù) (.so 文件) 將嵌入一個(gè)唯一的 build ID,保證 Crashlytics 能正確地關(guān)聯(lián)符號(hào)文件和發(fā)生的崩潰冤议。

總結(jié)操作步驟
在 build.gradle 文件中啟用 nativeSymbolUploadEnabled斟薇。
構(gòu)建應(yīng)用并上傳符號(hào)文件:
./gradlew app:assembleRelease
app:uploadCrashlyticsSymbolFileRelease
使用 readelf 工具驗(yàn)證生成的 .so 文件是否包含 GNU build ID。
如果 build ID 不存在恕酸,在構(gòu)建配置中添加 -Wl,--build-id 標(biāo)志堪滨。
通過(guò)這些步驟,即可確保 Firebase Crashlytics 能正確捕獲并報(bào)告基于 JNI 的崩潰蕊温。

在firebase上可能會(huì)看見(jiàn)一些系統(tǒng)庫(kù) 如libc.so 的崩潰日志袱箱,每個(gè)手機(jī)的libc.so 可能不一樣,可以尋找盡量多的手機(jī)中的libc.so 到工程中制作符號(hào)表上傳到后臺(tái)义矛,總有一個(gè)手機(jī)可以命中发笔,一般libc.so 在 /system/lib/libc.so /system/lib64/libc.so 中

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市凉翻,隨后出現(xiàn)的幾起案子了讨,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件前计,死亡現(xiàn)場(chǎng)離奇詭異胞谭,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)男杈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門(mén)韭赘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人势就,你說(shuō)我怎么就攤上這事泉瞻。” “怎么了苞冯?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵袖牙,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我舅锄,道長(zhǎng)鞭达,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任皇忿,我火速辦了婚禮畴蹭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鳍烁。我一直安慰自己叨襟,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布幔荒。 她就那樣靜靜地躺著糊闽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪爹梁。 梳的紋絲不亂的頭發(fā)上右犹,一...
    開(kāi)封第一講書(shū)人閱讀 49,166評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音姚垃,去河邊找鬼念链。 笑死,一個(gè)胖子當(dāng)著我的面吹牛积糯,可吹牛的內(nèi)容都是我干的掂墓。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼絮宁,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼梆暮!你這毒婦竟也來(lái)了服协?” 一聲冷哼從身側(cè)響起绍昂,我...
    開(kāi)封第一講書(shū)人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后窘游,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體唠椭,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年忍饰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了贪嫂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡艾蓝,死狀恐怖力崇,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情赢织,我是刑警寧澤亮靴,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站于置,受9級(jí)特大地震影響茧吊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜八毯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一搓侄、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧话速,春花似錦讶踪、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至活合,卻和暖如春雏婶,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背白指。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工留晚, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人告嘲。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓错维,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親橄唬。 傳聞我的和親對(duì)象是個(gè)殘疾皇子赋焕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容