android - 如何在Android上的本机lib文件夹中提取二进制可执行文件
问题描述
我需要在 Android Q 上执行二进制文件,所以...
我必须将我的可执行文件放在 Android Studio 的哪个文件夹中才能将它们发送到本机 lib 文件夹(因为这似乎是唯一的解决方案)?
我试图把它们放在几个地方都没有成功:
- 应用程序/库
- 应用程序/库
- 应用程序/lib/{ABI}
- 应用程序/库/{ABI}
- 应用程序/src/main/resources/lib/{ABI}
- 应用程序/src/main/resources/libs/{ABI}
他们都没有工作。
我还将文件重命名为标准 lib_*.so,我希望它们被移动到目录中context.getApplicationInfo().nativeLibraryDir
我还设置android:extractNativeLibs="true"
了清单上的应用程序标签并设置了android.bundle.enableUncompressedNativeLibs = false
gradle.properties。
使用此代码,我尝试执行该文件:
static ProcessBuilder loadDefault(Context context)
{
try
{
String dir = context.getApplicationInfo().nativeLibraryDir;
String fileName;
String arch = System.getProperty("os.arch");
if (arch != null && arch.contains("aarch64") && Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
{
fileName = "lib_my_executable_for_arm64.so";
}
else
{
fileName = "lib_my_executable_for_armeabi.so";
}
String path = dir + "/" + fileName;
Process process = Runtime.getRuntime().exec(path);
try
{
process.waitFor();
}
catch (InterruptedException ignore)
{}
return new ProcessBuilder(path);
}
catch (Exception e)
{
e.printStackTrace();
}
}
我总是得到错误java.io.IOException: Cannot run program "/data/app/com.mypackage.myapp-1jm1HSWBtoM6ih1AoXUZ5A==/lib/arm64/lib_my_executable_for_arm64.so": error=2, No such file or directory
。
拜托,我需要帮助!我不知道还能做什么。=/
解决方案
推荐阅读
- c++ - 暂时禁用 const 限定变量的优化?(调试期间)
- python - 同一行代码中的整数,不分开
- react-native - 如何删除选取器中的边界线(iOS - react-native)
- sql - 根据条件 SQL Server 2012 在 WHERE 子句中生成带有语法错误的动态查询附加参数
- angular - 嵌套路由角度 6 不会触发
- react-native - React Native - 使用反应钩子搜索对象的数组
- batch-file - 本地刷新redis客户端的批处理文件
- python-3.x - 如何使用editpyxl将数据添加到现有的xlsm文件中?
- sql-server - 基于列和条件的组合查询多行
- rabbitmq - RabbitMQ - 我可以从不同的交易所发布事件吗