Tom*_*Tom 6 android xamarin android-10.0
我有一个 android 应用程序(C#、Xamarin)
这工作了多年,但现在在 android 10 上,我得到:
Write fault on path /[Unknown] 错误(这可能是真正错误的 Xamarin 包装器)。
我认为这是由以下 android 10 更改引起的: “删除了应用主目录的执行权限”
(虽然如果我adb在和runas应用程序用户,执行 python 可执行文件工作正常。)
我的测试表明:通常运行 subproccess 仍然有效。(例如/system/bin/echo)但是执行apps home/files 目录中存在的任何子进程都会产生Write fault on path /[Unknown]错误。
在 android 10 更改文件中,建议的替代方法是:
应用应仅加载嵌入在应用 APK 文件中的二进制代码。
据我所知,无法获得嵌入的 apk 文件的文件路径。
有没有办法执行(例如 Runtime.exec())嵌入在 apk 中的(二进制/本机)文件?
我无法找到执行嵌入在 APK 中的二进制/本机文件的方法。但是,由于 android 在安装时自动提取 lib/ ABI / 文件夹中的文件,因此我能够将 python 可执行文件放入该文件夹中。
此外,尽管文档似乎暗示仅lib<name>.so提取该表单的文件,但我发现该文件夹中的所有文件都被提取。(更新:显然仅适用于调试版本?)子文件夹始终被忽略并且从不提取。
更新:虽然上述内容对于许多 Android 环境都是正确的,但我发现 chromebook Android 环境仅lib<name>.so安装以下形式的文件。甚至该表单的文件lib<name>.so.<version>也会被忽略。
过程是这样的:
lib/ABIAPK 的文件夹中。我使用 jar.exe 工具将文件添加到我的 apk 中。(对于其他构建环境,可能有更简单的方法)
我用了:
PackageManager.GetApplicationInfo("my.app.name", PackageInfoFlags.SharedLibraryFiles).NativeLibraryDir
Run Code Online (Sandbox Code Playgroud)
会是这样的。
/data/app/my.app.name-RmBFingPOpsEA-S577DoZg==/lib/x86_64
Run Code Online (Sandbox Code Playgroud)
这种方法的另一个好处是应用程序不必自行提取本机文件,而是在安装时自动完成。这可以缩短应用程序的启动时间。
| 归档时间: |
|
| 查看次数: |
1485 次 |
| 最近记录: |