Firebase 上無(wú) NDK 符號(hào)表的解決

記 Firebase 上無(wú) NDK 符號(hào)表解決的過(guò)程

背景

在 項(xiàng)目上線之后,F(xiàn)irebase 的后臺(tái)收到音視頻上報(bào)的崩潰急前。在項(xiàng)目中音視頻以 so 文件的形式集成近項(xiàng)目。在后臺(tái)上報(bào)頁(yè)面,看不到符號(hào)表的匹配吱型。

img_1.png

而這個(gè) bug 占據(jù)了我們 bug 的 Top 1 位置笼平。

解決過(guò)程

第一步 重新檢查集成 Firebase 的過(guò)程
出現(xiàn)問(wèn)題的時(shí)候园骆,我們第一步是去官網(wǎng)重新看集成 Firebase 的過(guò)程
檢查了發(fā)現(xiàn)沒(méi)有問(wèn)題。

第二步 重新查看官網(wǎng)文檔
經(jīng)過(guò)第一步的檢查寓调,集成的步驟是沒(méi)有問(wèn)題的, 我們?cè)俅慰纯垂倬W(wǎng)文檔锌唾,有沒(méi)有新的發(fā)現(xiàn)。
在官網(wǎng)的 Get Android NDK crash reports 的這個(gè)章節(jié)發(fā)現(xiàn)了新的線索捶牢。

我們的音視頻 so 是自己開(kāi)發(fā)的鸠珠,用 gradle 的方式集成到工程里面。這個(gè)相當(dāng)于外部獨(dú)立的依賴(lài)秋麸,所以渐排,需要用 Firebase 提供的 unstrippedNativeLibsDir 的屬性上傳未剝離符號(hào)表的 so.
在第三步 Step 3(optinal): Upload symbols for external dependencies

// …
android {
    // ...
    buildTypes {
        release {
            firebaseCrashlytics {
                nativeSymbolUploadEnabled true
                unstrippedNativeLibsDir ‘path/to/unstripped/parent/dir’
            }
        }
    }
}

并且需要對(duì)應(yīng)的 so 架構(gòu)

unstrippedNativeLibsDir/
 +- x86/
      |
      +- libfoo.so
      +- libbar.so
 +- arm64/
      |
      +- libfoo.so
      +- libbar.so

加了之后用命令執(zhí)行 task 上傳符號(hào)表

./gradlew app:assembleDebug app:uploadCrashlyticsSymbolFileDebug -debug | grep "\[com.google.firebase.crashlytics\]"

上面的命令跑了,之后發(fā)現(xiàn)我們上傳符號(hào)表失敗了灸蟆,是因?yàn)榫W(wǎng)絡(luò)的原因

第三步 Android Studio 配置代理上網(wǎng)
我們?cè)趪?guó)內(nèi)需要為 Android Studio 的 gradle 設(shè)置代理驯耻。

設(shè)置 Android Studio 的代理
查看 SS 的端口


img_2.png

設(shè)置代理


img_3.png
  • 1.找到 HTTP Proxy 設(shè)置選項(xiàng)
  • 2.選擇 Manual proxy configuration
  • 3.填寫(xiě) ss 的 ip 和端口
  • 4.檢測(cè)是否設(shè)置成功 check connection
    輸入 google 的網(wǎng)址,檢測(cè)是否設(shè)置成功炒考,如果成功了可缚,會(huì)彈窗連接成功的彈窗

第四步 去 Firebas 的github 上看 issues
經(jīng)過(guò)上面三步還是不行,我們就去 Firebase 的 github 上看看其他人有沒(méi)有遇到同樣的問(wèn)題斋枢。
這里順便說(shuō)一句帘靡,如果是開(kāi)源的項(xiàng)目,遇到問(wèn)題瓤帚,查看它的 issues 也是解決問(wèn)題的切入點(diǎn)描姚,你遇到的問(wèn)題,別人也會(huì)遇到戈次,看看 issues 或許能找到解決辦法或者提示轩勘。

在 Firebase 的 issues 中搜索 ndk symbol,可以找到相關(guān) ndk 符號(hào)表的內(nèi)容怯邪。然后在一條中找到相關(guān)的內(nèi)容 Native crash reports missing symbol information (file name, line number, function name) #1978绊寻,有人也遇到相應(yīng)的問(wèn)題,就是在 Firebase 上沒(méi)有看到相應(yīng)的符號(hào)表。
他的解決辦法澄步,就是把已剝離和未剝離符號(hào)表的 so 都放到對(duì)于的目錄下冰蘑,用于上傳符號(hào)表

debug {
    minifyEnabled false
    signingConfig signingConfigs.debugsign

    firebaseCrashlytics {
        nativeSymbolUploadEnabled true
        strippedNativeLibsDir 'nativelibs/stripped'  // 剝離符號(hào)表的 so
        unstrippedNativeLibsDir 'nativelibs/unstripped' // 未剝離符號(hào)表的 so
    }
}

然后再執(zhí)行命令

./gradlew app:assembleDebug app:uploadCrashlyticsSymbolFileDebug -debug | grep "\[com.google.firebase.crashlytics\]"

這次命令執(zhí)行的結(jié)果顯示,上傳符號(hào)表成功了

Crashlytics symbol file uploaded successfully

經(jīng)過(guò)測(cè)試 native 的崩潰后,發(fā)現(xiàn)符號(hào)表打印是上傳成功了驮俗,但是還是沒(méi)有顯示出來(lái)懂缕。

到這來(lái),我們已經(jīng)沒(méi)有辦法王凑。為什么明明符號(hào)表已經(jīng)上傳成功了搪柑,但是還是解析不到呢。

第四步 配對(duì) So 和項(xiàng)目 NDK 版本

至此索烹,唯一的可能性是我們上傳的符號(hào)表和 native 的崩潰對(duì)不上工碾,導(dǎo)致 Firebase 無(wú)法解析。

通過(guò)一番查找百姓,發(fā)現(xiàn)我們構(gòu)建 SO 用的 NDK 版本是 19渊额, 構(gòu)建項(xiàng)目是的 NDK 是 21 版本。
我們將項(xiàng)目的 NDK 版本也改成 19垒拢。

最后發(fā)現(xiàn)可以了旬迹。

總結(jié)

上傳非工程直接編譯 so 的符號(hào)表

第一 按照官方文檔集成 Firebase
在項(xiàng)目級(jí)別的 build.gradle 中,添加 firebase

  dependencies {
      classpath 'com.google.firebase:firebase-crashlytics-gradle:2.1.1'
  }

在 app 的 build.gradle 中添加

apply plugin: 'com.google.firebase.crashlytics'

....

buildTypes {

    release {
        ...
        firebaseCrashlytics {

            nativeSymbolUploadEnabled true
            strippedNativeLibsDir 'nativelibs/stripped'
            unstrippedNativeLibsDir 'nativelibs/unstripped'
        }
    }


    debug {
         ...
        firebaseCrashlytics {
            nativeSymbolUploadEnabled true
            strippedNativeLibsDir 'nativelibs/stripped'
            unstrippedNativeLibsDir 'nativelibs/unstripped'
        }
}

strippedNativeLibsDir 是放已經(jīng)剝離符號(hào)表的 so, unstrippedNativeLibsDir 是放未剝離符號(hào)表的 so

img_4.png

在 module 的 build.gradle 中添加依賴(lài)

dependencies {
    // google 崩潰上報(bào)
    implementation 'com.google.firebase:firebase-analytics-ktx:17.4.4'
    // Add the Firebase Crashlytics SDK.
    implementation 'com.google.firebase:firebase-crashlytics:17.1.1'
    implementation 'com.google.firebase:firebase-crashlytics-ndk:17.1.1'
}

第二步 確保網(wǎng)絡(luò)沒(méi)有問(wèn)題
如果是在國(guó)內(nèi),要設(shè)置Android studio 代理上網(wǎng)

第三步 確保編譯 so 的 NDK 和項(xiàng)目的 NDK 版本一致

第三步 用命令行上傳符號(hào)表
用命令行上傳符號(hào)表

./gradlew app:assembleDebug app:uploadCrashlyticsSymbolFileDebug -debug | grep "\[com.google.firebase.crashlytics\]"

跑命令的時(shí)候觀察打印求类,如果打印出

Crashlytics symbol file uploaded successfully

則說(shuō)明已經(jīng)上傳成功

第四步 測(cè)試 bug
打開(kāi) firebase 的 log 打印

adb shell setprop log.tag.FirebaseCrashlytics DEBUG

adb logcat -s FirebaseCrashlytics
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末奔垦,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子尸疆,更是在濱河造成了極大的恐慌椿猎,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件寿弱,死亡現(xiàn)場(chǎng)離奇詭異犯眠,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)症革,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)筐咧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人噪矛,你說(shuō)我怎么就攤上這事量蕊。” “怎么了摩疑?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵危融,是天一觀的道長(zhǎng)畏铆。 經(jīng)常有香客問(wèn)我雷袋,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任楷怒,我火速辦了婚禮蛋勺,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鸠删。我一直安慰自己抱完,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布刃泡。 她就那樣靜靜地躺著巧娱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪烘贴。 梳的紋絲不亂的頭發(fā)上禁添,一...
    開(kāi)封第一講書(shū)人閱讀 52,262評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音桨踪,去河邊找鬼老翘。 笑死,一個(gè)胖子當(dāng)著我的面吹牛锻离,可吹牛的內(nèi)容都是我干的铺峭。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼汽纠,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼卫键!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起疏虫,我...
    開(kāi)封第一講書(shū)人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤永罚,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后卧秘,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體呢袱,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年翅敌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了羞福。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蚯涮,死狀恐怖治专,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情遭顶,我是刑警寧澤张峰,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站棒旗,受9級(jí)特大地震影響喘批,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一饶深、第九天 我趴在偏房一處隱蔽的房頂上張望餐曹。 院中可真熱鬧,春花似錦敌厘、人聲如沸台猴。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)饱狂。三九已至,卻和暖如春宪彩,著一層夾襖步出監(jiān)牢的瞬間嗡官,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工毯焕, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留衍腥,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓纳猫,卻偏偏與公主長(zhǎng)得像婆咸,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子芜辕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

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