看來真不能直接將.so檔案直接添加到Android的JAR包了

來源:互聯網
上載者:User

如果直接在一個JAR中的/libs/armeabi下放個XXX.SO檔案,然後匯出成JAR包的後,如A.JAR,

在一個Android的程式中引用這個A.JAR,那麼編譯的時候就會出現一下的錯誤:

The library 'A.jar' contains native libraries that will not run on the device.The following libraries were found:- libs/armeabi/libXXX.so

  網上搜素索了下,還是沒有找到解決方案。

只能採用如下的方式:

1.像科大訊飛那樣(/Msc/assets/lib/msc.jet:檔案前4個位元組為:.ELF,而且檔案末尾可以看到類是JNI的函數

直接將.SO檔案改個副檔名,然後放到assert中,匯出到JAR中,然後在啟動的時候/或者首次被調用的時候將其拷貝到

調用程式的目錄下,手動載入SO庫檔案

2.就是直接將JAR中的.SO檔案放到目標程式的/libs/armeabi下,即可。

(以上提到的.SO檔案都是針對ARM架構的,如果是x86的,注意將上文中的相應目錄修改成/libs/x86/目錄即可)

 

總之:Android將某個工程打成JAR包的時候,最好只包括原始碼,另外就是可以包含一些檔案,如assert或者自己定義的一些檔案個數,

但不要保護資源檔(/res下所有檔案內容都不要放在JAR包中)。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.