2014-09-10 73 views
1

我之前在G + Android社區發佈過這個問題,但目前爲止還沒有答案。 這是關於下載和加載本地庫。運行從互聯網上下載的本地庫

我一直在閱讀和理解,理論上可以下載一個「.so」文件,並使用System.load方法加載它。

但是我也在這裏閱讀以下內容(https://groups.google.com/forum/#!topic/android-ndk/0uY4qgam1Ws):「您也不能通過常規方式將ARM上的SDCARD加載到SDCARD上,因爲ARM支持非可執行頁面和android的mmap實現()拒絕映射由noexec文件系統支持的可執行頁面。「

這對我來說有點混亂(實際上很混亂)。

所以,這裏是我的問題:在生產設備上,它是或不可能下載一個庫,將它粘在手機的某個地方,然後加載它,然後與JNI一起使用它。

如果是這樣,我們確定它將在未來的Android新版本中仍然有效嗎?

贊,Google對此的官方建議是什麼?

回答

1

是的,這適用於生產設備。但是,如果你把它放在/ sdcard中,它不適用於所有設備,你應該使用應用程序的私人/內部文件夾(對應於/data/data/com.example.app/something)。在創建/下載文件後,您可能需要在文件上執行相同的chmod + x操作。

雖然我不確定Google是否有任何官方的建議,但您鏈接的帖子相當清楚地表明這是爲了工作,並沒有計劃打破它。

+0

我想,但是在我發佈的鏈接中,在Google上爲Android工作的Diane Hackborn似乎對她自己的答案非常不安全,所以... – Redwarp 2014-09-10 12:34:23

+0

不,不確定的評論(她在該主題中的第二個回覆)是關於使用fennec二進制加載器,她認爲這可能依賴於私有細微的實現細節。她在線索中的第一個回覆沒有顯示出任何猶豫。 – mstorsjo 2014-09-10 13:08:44

+0

如果我將.so文件複製到Context.getDir(「lib」,MODE_PRIVATE)路徑,則不需要chmod + x。此外,它實際上給出了別名「/ data/data//app_lib」而不是「/ data/data//lib」。測試了幾款設備,從Android 10到19,armeabi-v7a,x86 ...... – Redwarp 2014-09-16 14:20:04