溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

天地圖按照官方教程閃退的問(wèn)題

發(fā)布時(shí)間:2020-09-07 06:49:04 來(lái)源:網(wǎng)絡(luò) 閱讀:374 作者:huohe2009 欄目:移動(dòng)開(kāi)發(fā)

按照官網(wǎng)的教程做,你的程序必然會(huì)閃退,對(duì)于初級(jí)開(kāi)發(fā)人員來(lái)說(shuō),有些問(wèn)題不說(shuō)清楚是很麻煩的。


解決辦法是:在 MySxEqEmApp\app\src\main\ 目錄下添加 niLibs 目錄,把官網(wǎng)Demo的4個(gè)(或者所需的)文件拷貝下來(lái),即可。

之所以需要.so文件,是因?yàn)镻roject引用的jar包中用到了NDK(c++),其余的暫時(shí)不要深究。 


解決參考:網(wǎng)上有很多百度地圖初始時(shí)閃退的問(wèn)題,解決方法也可參考這個(gè),想要探究原理的同學(xué)請(qǐng)進(jìn)一步查閱其他資料。

  1. AndroidStudio如何引入so包

  2. Android學(xué)習(xí)筆記----天地圖API開(kāi)發(fā)之UnsatisfiedLinkError

  3.  關(guān)于Android的.so文件你所需要知道的

文章1對(duì)這個(gè)問(wèn)題有詳細(xì)的論述,全文摘錄如下:


—————————————————————————————————————————————————————————————

先說(shuō)前提條件,我的AndroidStudio版本是2.2 Preview 3,版本是2.1的同學(xué)應(yīng)該也是一樣的。

然后說(shuō)結(jié)論吧,有些同學(xué)可能趕著做項(xiàng)目:

結(jié)論:

so包應(yīng)該放在相應(yīng)模塊(比如app模塊)下的src目錄下的main目錄下的jniLibs目錄。

注意是jniLibs,最后邊有個(gè)s,不是jniLib,并且L要大寫(xiě)。如果你在src/main目錄中看不到j(luò)niLibs目錄,那你只需要自己建一個(gè)這個(gè)目錄就可以了,然后把你的so包按編譯平臺(tái)分類(lèi)拷貝進(jìn)去就可以了。然后呢?然后就完了,就這樣就可以了,因?yàn)橄到y(tǒng)默認(rèn)就會(huì)去這個(gè)目錄中找對(duì)應(yīng)的so包。如下圖所示:

接下來(lái)有興趣的同學(xué)可以了解下為什么是這樣。

也許有人說(shuō),so包應(yīng)該跟jar包一樣唄,放在對(duì)應(yīng)模塊的libs目錄下,eclipse就是這樣的。有這么簡(jiǎn)單嗎?答案是:NO

原理:

其實(shí)在AndroidStudio中,我們之所以可以把jar包放在對(duì)應(yīng)模塊的libs目錄下,比如app模塊(也就是通常意義下的主工程了)的libs目錄中,而不需要再去配置build.gradle文件,就可以正常使用這些jar包,是因?yàn)樵贏ndroidStudio中新建項(xiàng)目時(shí),系統(tǒng)已經(jīng)在默認(rèn)為我們配置好了gradle,如果仔細(xì)看模塊下的build.gradle文件的話,一般會(huì)有這么一句:

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
}

看到了吧,這句就是告訴gradle,我們的第三方j(luò)ar包在libs目錄下,如果沒(méi)有這一行配置,那么理論上我們把jar包直接放在libs目錄下其實(shí)是不行的,只不過(guò)新建項(xiàng)目時(shí)系統(tǒng)已經(jīng)為我們配好了。這里libs是個(gè)相對(duì)路徑,因?yàn)槲覀兊腷uild.gradle文件本身就在app模塊下,那么這里的libs當(dāng)然也就是指app模塊下的libs,其實(shí)build.gradle文件中所有的路徑都可以寫(xiě)相對(duì)路徑,我們下邊講的so包的路徑也是只寫(xiě)相對(duì)路徑就可以了。

OK,言歸正傳,現(xiàn)在知道jar包的引入原理了,那么so包為什么要放在那么奇怪的目錄下?能不能放在任意一個(gè)自定義的目錄呢?當(dāng)然是可以的。

其實(shí)在build.gradle中,默認(rèn)會(huì)有一些這樣的配置:

sourceSets {
main {
jniLibs.srcDirs = ['src/main/jniLibs']
aidl.srcDirs = ['src/main/aidl']
}
}
這些配置在你新建工程之后,在build.gradle文件中默認(rèn)是沒(méi)有的,因?yàn)槟J(rèn)就是這樣的,當(dāng)然也就不寫(xiě)也可以,當(dāng)然你寫(xiě)出來(lái)也沒(méi)錯(cuò)。意思是so包就去src/main/jniLibs目錄下找,aidl文件默認(rèn)就到src/main/aidl目錄下找。。。當(dāng)然還有許多其它的配置,你還可以配置你的AndroidManifest.xml文件在哪里,還可以配置你的Java代碼在哪里,如果你不配的話都會(huì)有一個(gè)默認(rèn)值,這里只是以jniLibs和aidl為例而已。

看到這里你應(yīng)該就明白了,為什么我們把so包直接放到src目錄下的main目錄下的jinLibs目錄就可以了,而不需要配置gradle文件了,因?yàn)橄到y(tǒng)默認(rèn)就會(huì)到這個(gè)目錄下找,如果你想把so包放在一個(gè)你喜歡的地方,比如直接放在app目錄下的myJniLibs目錄下,那你只需要把上面內(nèi)容改成:

sourceSets {
main {
jniLibs.srcDirs = ['myJniLibs']
aidl.srcDirs = ['src/main/aidl']
}
}
這樣就可以了。明白了原理,似乎一切都明了了,同理,如果不想把a(bǔ)idl文件放在默認(rèn)目錄下,也可以改aidl.srcDirs的值,如果不想把java代碼放在默認(rèn)目錄,就可以改java.srcDirs的值,如果不想把資源文件放在默認(rèn)目錄下,就可以改res.srcDirs的值。。。還有幾個(gè),同學(xué)們慢慢去研究吧,如果你想把目錄結(jié)構(gòu)改的跟eclipse下的工程一樣,就改這里的值就可以,不一一細(xì)說(shuō)了。

—————————————————————————————————————————————————————————————


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI