轉自:http://www.cnblogs.com/mengshu-lbq/archive/2011/11/19/2255566.html#2323758
如果直接在一個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包中)。
如果直接在一個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包中)。