gpt4 book ai didi

Android 10 - 作为存储在应用主目录中的子进程启动可执行文件的替代方法

转载 作者:行者123 更新时间:2023-12-03 14:47:27 25 4
gpt4 key购买 nike

我有一个 android 应用程序 (C#, Xamarin)

  • 将 python 环境与其 apk bundle 在一起。
  • 将 python 文件提取到应用程序文件目录中。
  • 通过将 python 可执行文件作为子进程执行来运行 python 代码。

  • 这工作了多年,但现在在 android 10 上,我得到:
    Write fault on path /[Unknown]错误(这可能是真正错误的 Xamarin 包装器)。

    我认为这是由以下 android 10 更改引起的:
    "Removed execute permission for app home directory"

    (尽管如果我在 adbrunas 中是应用程序用户,则执行 python 可执行文件可以正常工作。)

    我的测试表明:
    一般来说,运行子进程仍然有效。 (例如/system/bin/echo)
    但是执行存在于应用程序主目录/文件目录中的任何子进程会生成 Write fault on path /[Unknown]错误。

    在 android 10 更改文件中,建议的替代方法是:

    Apps should load only the binary code that's embedded within an app's APK file.



    据我所知,无法获得嵌入式 apk 文件的文件路径。

    有没有办法执行(例如 Runtime.exec())嵌入在 apk 中的(二进制/ native )文件?

    最佳答案

    我无法找到一种方法来执行嵌入在 APK 中的二进制/ native 文件。但是,由于 android 会自动提取 lib/ABI 中的文件/安装文件夹时,我可以将我的 python 可执行文件放在该文件夹中。
    此外,即使 docs似乎暗示只有 lib<name>.so 形式的文件被提取,我发现该文件夹中的所有文件都被提取。
    ( 更新:显然只适用于调试版本?)
    子文件夹总是被忽略并且永远不会被提取。
    更新 : 虽然以上对于很多 a​​ndroid 环境都是正确的,但我发现 chromebook android 环境只有 lib<name>.so 形式的文件已安装。 lib<name>.so.<version> 形式的偶数文件被忽略。

    过程是这样的:

  • 将二进制/ native 文件放在 lib/ABI APK 的文件夹。

  • 我使用 jar.exe 工具将文件添加到我的 apk。 (对于其他构建环境,有很多更简单的方法)
  • 在应用程序代码中,找到 安装 apk 的位置。 (不是数据目录)

  • 我用了:
    PackageManager.GetApplicationInfo("my.app.name", PackageInfoFlags.SharedLibraryFiles).NativeLibraryDir
  • 从该文件夹执行二进制/ native 编。

  • 它会是这样的。
    /data/app/my.app.name-RmBFingPOpsEA-S577DoZg==/lib/x86_64

    这种方法的另一个好处是应用程序不必自行提取 native 文件,而是在安装时自动完成。这提高了应用程序的启动时间。

    关于Android 10 - 作为存储在应用主目录中的子进程启动可执行文件的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62391811/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com