首页 > 解决方案 > 如何在Android上的本机lib文件夹中提取二进制可执行文件

问题描述

我需要在 Android Q 上执行二进制文件,所以...

我必须将我的可执行文件放在 Android Studio 的哪个文件夹中才能将它们发送到本机 lib 文件夹(因为这似乎是唯一的解决方案)?

我试图把它们放在几个地方都没有成功:

他们都没有工作。

我还将文件重命名为标准 lib_*.so,我希望它们被移动到目录中context.getApplicationInfo().nativeLibraryDir

我还设置android:extractNativeLibs="true"了清单上的应用程序标签并设置了android.bundle.enableUncompressedNativeLibs = falsegradle.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

拜托,我需要帮助!我不知道还能做什么。=/

标签: android

解决方案


推荐阅读