高德地圖api使用過(guò)程出現(xiàn)崩潰

實(shí)在汗顏,之前寫(xiě)過(guò)一篇文章記錄了新版高德地圖使用過(guò)程中在不同版本的手機(jī)上有崩潰的現(xiàn)象荧库,崩潰原因在于某些平臺(tái)的機(jī)子上找不到底層JNI庫(kù)導(dǎo)致的汁果,還寫(xiě)了解決方式,后來(lái)發(fā)現(xiàn)只是治標(biāo)不治本疼电,一直沒(méi)有時(shí)間去更改嚼锄,今天抽空修改一下最終的解決方案。
其實(shí)高德地圖SDK中已經(jīng)兼容了平臺(tái)問(wèn)題蔽豺,只是我們不知道怎么弄而已区丑。先來(lái)介紹一下各個(gè)平臺(tái)。
下面這篇文章是從網(wǎng)上找來(lái)的修陡,介紹的十分充分:

armeabi-v7a沧侥,armeabi,arm64-v8a
armeabi就是針對(duì)普通的或舊的arm v5 cpu魄鸦,armeabi-v7a是針對(duì)有浮點(diǎn)運(yùn)算或高級(jí)擴(kuò)展功能的arm v7 cpu宴杀。

armeabi-v7a(32位ARM設(shè)備),arm64-v8a(64位ARM設(shè)備)

在2011年11月拾因,ARM公司發(fā)布了新一代處理器64位架構(gòu)ARMv8的部分技術(shù)細(xì)節(jié)(也就是我們常說(shuō)的Cortex-A57A53)旺罢,代表著未來(lái)移動(dòng)處理器邁入64位行列。我們得明確一點(diǎn)绢记,ARM公司自己本身并沒(méi)有64位芯片設(shè)計(jì)技術(shù)主经,他是通過(guò)了收購(gòu)MIPS64處理器架構(gòu)的部分技術(shù)使用權(quán),再結(jié)合ARM的一些特性設(shè)計(jì)出來(lái)的庭惜。也就是說(shuō):MIPS罩驻、ARM、X86三大架構(gòu)中护赊,唯一沒(méi)有64位技術(shù)的ARM惠遏,通過(guò)收購(gòu)MIPS的形式得到了64位。

所謂的ARMv8架構(gòu)骏啰,就是在MIPS64架構(gòu)上增加了ARMv7架構(gòu)中已經(jīng)擁有的的TrustZone技術(shù)节吮、虛擬化技術(shù)及NEON advanced SIMD技術(shù)等特性,研發(fā)成的判耕。

64位ARMv8架構(gòu)中包含兩個(gè)執(zhí)行狀態(tài):AArch32(也就是我們常說(shuō)的ARMv7)和AArch64(ARMv8)透绩。AArch64執(zhí)行狀態(tài)針對(duì)64位處理技術(shù),引入了一個(gè)全新指令集A64(也就是基于收購(gòu)的MIPS64架構(gòu)),而AArch32執(zhí)行狀態(tài)將支持現(xiàn)有的ARM指令集帚豪。所以64位的ARM處理器中同時(shí)包含著32位的ARMv7和64位的ARMv8兩種架構(gòu)碳竟。因此:

看到這里,你一定明白了狸臣,ARM64位處理器和電腦的64位處理器是兩個(gè)截然不容的概念莹桅,他并不是64位就能原生向下兼容32位程序,而是通過(guò)64位處理器中集成的32位架構(gòu)來(lái)運(yùn)行32位程序烛亦。說(shuō)得通俗點(diǎn)诈泼,它不是以64位形態(tài)來(lái)運(yùn)行32位程序,卻是以32位的形態(tài)運(yùn)行32位程序的煤禽。

由于目前新出的64位處理器包含兩個(gè)架構(gòu)铐达,而且制程技術(shù)沒(méi)有提升(28nm),同時(shí)在手機(jī)與平板上檬果,芯片面積有著嚴(yán)格的限定瓮孙,不能過(guò)分增加,這導(dǎo)致64位ARM處理器平均分配到每個(gè)架構(gòu)的晶體管數(shù)量銳減汁汗,也就是說(shuō)從64位處理器中的32位架構(gòu)方面衷畦,對(duì)于同規(guī)格的32位處理器而言栗涂,不但沒(méi)有提高知牌,性能反而是一定規(guī)模下降的。但處理器廠(chǎng)家又必須給消費(fèi)者一個(gè)交代斤程,以更好的推廣64位角寸,所以廠(chǎng)家就必須在其他方面提升性能,以彌補(bǔ)CPU的晶體管數(shù)量減少帶來(lái)的損失忿墅。比如:更換性能更強(qiáng)的GPU扁藕、提升內(nèi)存帶寬、多核心虛擬單顆核心提升單核性能疚脐、聯(lián)合跑分軟件商修改跑分權(quán)重(提升GPU分?jǐn)?shù)亿柑,降低CPU分?jǐn)?shù)的權(quán)重)等等。這樣棍弄,揚(yáng)長(zhǎng)避短望薄,最終到達(dá)消費(fèi)者手里,用跑分軟件一跑呼畸,確實(shí)有提升痕支,用戶(hù)開(kāi)心,廠(chǎng)家腰包也鼓了蛮原。

綜上所述卧须,ARM64位處理器從嚴(yán)格意義來(lái)說(shuō),叫它ARM32+64更加貼切,他相對(duì)于A(yíng)RM32位處理器花嘶,有倒退的地方笋籽,也有進(jìn)步的余地,但正因?yàn)榈雇思て鹆薃RM進(jìn)取的決心察绷,讓它大刀闊斧的向前變革干签,不得不說(shuō)也算一種進(jìn)步。但ARM64在的手機(jī)上真的有用嗎拆撼?我只能說(shuō)容劳,目前確實(shí)沒(méi)啥用,但今后或許有闸度。

真正的64位手機(jī)并不止單純停留在處理器上竭贩,如果只因?yàn)樗奶幚砥魇?4位,就稱(chēng)其為64位手機(jī)的話(huà)莺禁,我們可以毫不猶疑的說(shuō)這可能是虛假宣傳留量,好在聯(lián)想很聰明,在發(fā)布A678t和A805e宣傳的時(shí)候哟冬,只說(shuō)64位處理器手機(jī)楼熄。

“64位處理器手機(jī)”與“64位手機(jī)”是兩種天壤之別的概念:只要是處理器包含64架構(gòu)位的,就可以稱(chēng)“64位處理器手機(jī)”浩峡,這種手機(jī)也許還運(yùn)行不了64位程序可岂,只是用來(lái)?yè)屨际袌?chǎng),和32位手機(jī)比起來(lái)優(yōu)勢(shì)并不明顯翰灾。

“64位手機(jī)”就不同了:它包含著64位處理器缕粹、64位標(biāo)準(zhǔn)系統(tǒng)、64位安卓虛擬機(jī)纸淮、以及64位程序平斩,這才是真正意義上的64位手機(jī)!

聽(tīng)我細(xì)細(xì)解說(shuō):谷歌官方曾說(shuō)咽块,安卓很早前就支持64位了绘面,這話(huà)不假,從Android4.0到Android4.4侈沪,安卓系統(tǒng)都支持64位的硬件揭璃,但是這僅僅表示底層驅(qū)動(dòng)支持64位,能運(yùn)行在64位的硬件之上峭竣,僅此而已塘辅。然而,上層運(yùn)行軟件的皆撩,無(wú)論是Dalvik的虛擬機(jī)扣墩,還是ART虛擬機(jī)都是32位的哲银。也就是說(shuō),只要你的手機(jī)系統(tǒng)是Android4.0—4.4呻惕,即便你的處理器是64位荆责,也只能在32位虛擬機(jī)下運(yùn)行32位程序,就算真的64位程序擺在你眼前亚脆,也無(wú)法安裝做院。

Android L開(kāi)始才真正支持32位和64位的ART虛擬機(jī),配合上64位處理器濒持,名正言順的運(yùn)行64位軟件键耕。但是問(wèn)題又來(lái)了,沒(méi)有軟件商愿意開(kāi)發(fā)64位程序柑营。我有幾個(gè)搞安卓開(kāi)發(fā)的朋友屈雄,都明確表示永遠(yuǎn)不涉足64位安卓程序開(kāi)發(fā),這又是為什么呢官套?

ARMv8是一套不錯(cuò)的指令集酒奶,它既支持未來(lái)的64位程序,也向下兼容現(xiàn)有32位程序奶赔。有了ARMv8的支撐惋嚎,以后的64位手機(jī)操作系統(tǒng),如Android L 64bit都可以簡(jiǎn)單站刑、高效地支持現(xiàn)有的32位App另伍,你不用擔(dān)心兼容性問(wèn)題。

在明白了這些區(qū)別之后笛钝,剩下的就很好做了质况,下載高德官方最新的SDK愕宋,解壓發(fā)現(xiàn)里面玻靡,有兩個(gè)文件

  • arm64-v8a
  • armeabi
    這就是官方為我們提供的,其實(shí)足夠了中贝《谀恚可為什么還會(huì)崩潰呢,那是因?yàn)槲覀兊捻?xiàng)目中或不僅僅只有高德地圖邻寿,或許還有極光推送蝎土,有盟平臺(tái)等SDK,每個(gè)里面都有自己的平臺(tái)庫(kù)绣否,在某些機(jī)型上直接去它自己的文件夾中搜尋庫(kù)誊涯,結(jié)果發(fā)現(xiàn)沒(méi)有,就出錯(cuò)了蒜撮。
  • 解決方案:
    我們?cè)陧?xiàng)目的libs下在創(chuàng)建x86文件夾暴构,以及arm64-v7a文件夾跪呈,然后把高德地圖中armeabi中的庫(kù)文件,拷貝到新創(chuàng)建的目錄中即可取逾。

下面還有一篇文章介紹的不錯(cuò)耗绿,也一起分享一下:

  • Android項(xiàng)目針對(duì)libs(armeabi,armeabi-v7a,x86)進(jìn)行平臺(tái)兼容

    1.Android設(shè)備如何加載.so文件?
    不同CPU架構(gòu)的Android手機(jī)加載時(shí)會(huì)在libs下找自己對(duì)應(yīng)的目錄砾隅,從對(duì)應(yīng)的目錄下尋找需要的.so文件误阻;如果沒(méi)有對(duì)應(yīng)的目錄,就會(huì)去armeabi下去尋找晴埂,如果已經(jīng)有對(duì)應(yīng)的目錄究反,但是如果沒(méi)有找到對(duì)應(yīng)的.so文件,也不會(huì)去armeabi下去尋找了儒洛。
    以x86設(shè)備為例奴紧,x86設(shè)備會(huì)在項(xiàng)目中的 libs文件夾尋找是否含有x86文件夾,如果含有x86文件夾晶丘,則默認(rèn)為該項(xiàng)目有x86對(duì)應(yīng)的so可運(yùn)行文件黍氮,只有x86文件夾而文件夾下沒(méi)有so,程序運(yùn)行也是會(huì)出現(xiàn)find library returned null的錯(cuò)誤的浅浮;如果工程本身不含有x86文件夾沫浆,則會(huì)尋找armeabi或者armeabi-v7a文件夾,兼容運(yùn)行滚秩。以armeabi-v7a設(shè)備為例专执,該Android設(shè)備當(dāng)然優(yōu)先尋找libs目錄下的armeabi-v7a文件夾,同樣郁油,如果只有armeabi-v7a文件夾而沒(méi)有 so也是會(huì)報(bào)錯(cuò)的本股;如果找不到armeabi-v7a文件夾,則尋找armeabi文件夾桐腌,兼容運(yùn)行該文件夾下的so拄显,但是不能兼容運(yùn)行x86的so。所以項(xiàng)目中如果只含有x86的so案站,在armeabi和armeabi-v7a也是無(wú)法運(yùn)行的躬审。以上就是不同CPU架構(gòu)運(yùn)行時(shí)加載so的策略。

    2.對(duì)于不同的平臺(tái)蟆盐,我們應(yīng)該怎么去進(jìn)行適配承边?
    目前主流的Android設(shè)備肯定是armeabi-v7a架構(gòu)的,然后就是x86和armeabi了石挂。如果同時(shí)包含了 armeabi博助, armeabi-v7a和x86,所有設(shè)備都可以運(yùn)行痹愚,程序在運(yùn)行的時(shí)候去加載不同平臺(tái)對(duì)應(yīng)的so富岳,這是較為完美的一種解決方案罗心,但是同時(shí)也會(huì)導(dǎo)致包變大。
    armeabi-v7a是可以兼容armeabi的城瞎,而v7a的CPU支持硬件浮點(diǎn)運(yùn)算渤闷,目前絕大對(duì)數(shù)設(shè)備已經(jīng)是armeabi-v7a了,所以為了性能上的更優(yōu)脖镀,就不要為了兼容放到armeabi下了飒箭。x86也是可以兼容armeabi平臺(tái)運(yùn)行的,另外需要指出的是蜒灰,打出包的x86的so弦蹂,總會(huì)比armeabi平臺(tái)的體積更小,對(duì)于性能有潔癖的童鞋們强窖,還是建議在打包so的時(shí)候支持x86凸椿。

3.如果第三方?jīng)]有提供對(duì)應(yīng)平臺(tái)的.so文件怎么辦?
有一些第三方的類(lèi)庫(kù)只提供了armeabi下的.so文件翅溺,如果我們項(xiàng)目里適配了armeabi-v7a和x86脑漫,如果不在對(duì)應(yīng)的文件下放對(duì)應(yīng)的.so文件,就可能導(dǎo)致某些Android設(shè)備會(huì)出一些問(wèn)題咙崎,我們可以復(fù)制armeabi下得.so文件到不同的文件夾下优幸。如果第三方提供了不同平臺(tái)的.so文件,則復(fù)制不同平臺(tái)的.so文件到項(xiàng)目中對(duì)應(yīng)的文件夾下即可褪猛。

最后編輯于
?著作權(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
  • 文/不壞的土叔 我叫張陵觉啊,是天一觀(guān)的道長(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)容