看來真不能直接將.so文件直接添加到Android的JAR包了如果直接在一個(gè)JAR中的/libs/armeabi下放個(gè)XXX.SO文件,然后導(dǎo)出成JAR包的后,如A.JAR, 在一個(gè)Android的程序中引用這個(gè)A.JAR,那么編譯的時(shí)候就會(huì)出現(xiàn)一下的錯(cuò)誤:
網(wǎng)上搜素索了下,還是沒有找到解決方法。 只能采用如下的方式: 1.像科大訊飛那樣(/Msc/assets/lib/msc.jet:文件前4個(gè)字節(jié)為:.ELF,而且文件末尾可以看到類是JNI的函數(shù) 直接將.SO文件改個(gè)擴(kuò)展名,然后放到assert中,導(dǎo)出到JAR中,然后在啟動(dòng)的時(shí)候/或者首次被調(diào)用的時(shí)候?qū)⑵淇截惖?/p> 調(diào)用程序的目錄下,手動(dòng)加載SO庫文件 2.就是直接將JAR中的.SO文件放到目標(biāo)程序的/libs/armeabi下,即可。 (以上提到的.SO文件都是針對(duì)ARM架構(gòu)的,如果是x86的,注意將上文中的相應(yīng)目錄修改成/libs/x86/目錄即可)
總之:Android將某個(gè)工程打成JAR包的時(shí)候,最好只包括源代碼,另外就是可以包含一些文件,如assert或者自己定義的一些文件個(gè)數(shù), 但不要保護(hù)資源文件(/res下所有文件內(nèi)容都不要放在JAR包中)。 |
|