2014-09-10 77 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