指定在 Android 上安装时从 .apk 中提取 .so 的位置(即目标路径)
Posted
技术标签:
【中文标题】指定在 Android 上安装时从 .apk 中提取 .so 的位置(即目标路径)【英文标题】:Specify where a .so is to be extracted from .apk (i.e. destination path) when installing on Android 【发布时间】:2015-10-20 03:00:09 【问题描述】:我有一个 needs to be installed in a subdirectory named sqldrivers.so 文件。
所以我需要将其安装到/data/app-lib/org.example.qt.untitled/sqldrivers/libqslite.so
,而不是将其安装到/data/app-lib/org.example.qt.untitled/libqslite.so
。
我正在使用带有 ADT 的 Eclipse,当我想添加一个原生库时,我将它放在 libs\<ARCH>
,即模拟器的 libs\x86
。
所以我尝试将它放在C:\Workspace\untitled\libs\x86\sqldrivers\libqslite.so
中,但它根本没有添加到 .apk 中。
如何指定 .so 文件应从手机上的 .apk 中提取的位置?
【问题讨论】:
【参考方案1】:似乎实现此目的的唯一方法是在应用程序的第一次运行时将文件从 /data/app-lib
复制到其他目录。
所以我只是在我的应用程序的开头添加了一些代码,以将 .so 文件从 /data/app-lib/<app>
复制到 /data/data/<app>/qt_plugins/sqldrivers
(如果该文件不存在)。
File sourceFile = new File(context.getApplicationInfo().nativeLibraryDir + "/libplugins_sqldrivers_libqsqlite.so");
File libPath = new File(context.getApplicationInfo().dataDir + "/qt_plugins");
File destinationDir = new File(libPath + "/sqldrivers");
File destinationFile = new File(destinationDir + "/libqsqlite.so");
if (!destinationFile.exists())
destinationDir.mkdirs();
try
copy(sourceFile, destinationFile);
catch (IOException e)
// TODO Auto-generated catch block
e.printStackTrace();
【讨论】:
以上是关于指定在 Android 上安装时从 .apk 中提取 .so 的位置(即目标路径)的主要内容,如果未能解决你的问题,请参考以下文章
我用android studio创建一个TV项目,打包成apk 后 安装出现如下错误是怎么回事?