我有一个安卓应用程序(C#,Xamarin)
这已经成功了很多年,但是现在在android 10上,我得到了:
Write fault on path /[Unknown]错误(很可能是真正错误的Xamarin包装器)。
我认为这是由下面的android 10更改引起的:“删除应用程序主目录的执行权限”
(虽然如果我adb in和runas应用程序用户,那么执行python可执行文件就可以了。)
我的测试表明:一般来说,运行子进程仍然有效。(例如/system/bin/echo)但是执行应用程序home/file目录中存在的任何子进程都会生成Write fault on path /[Unknown]错误。
在android 10更改文件中,建议的替代方法是:
应用程序应该只加载嵌入到应用程序APK文件中的二进制代码。
据我所知,无法获得嵌入apk文件的文件路径。
有执行的方法吗?Runtime.exec()是嵌入在apk中的(二进制/本机)文件?
发布于 2020-06-15 18:36:18
我无法找到执行嵌入在APK中的二进制/本机文件的方法。但是,由于android在安装时自动提取lib/ABI/文件夹中的文件,所以我能够将python可执行文件放在该文件夹中。
此外,尽管文档似乎意味着只提取表单lib<name>.so的文件,但我发现该文件夹中的所有文件都已被解压。(更新:显然只用于调试生成?)子文件夹总是被忽略,并且从未提取。
UPDATE:虽然上面的内容适用于很多安卓环境,但我发现chromebook android环境中只安装了表单lib<name>.so的文件。甚至表单lib<name>.so.<version>的文件也会被忽略。
这个过程是这样的:
lib/ABI文件夹中。我使用jar.exe工具向我的apk添加文件。(对于其他构建环境,有更简单的方法)
我用:
PackageManager.GetApplicationInfo("my.app.name", PackageInfoFlags.SharedLibraryFiles).NativeLibraryDir会是这样的。
/data/app/my.app.name-RmBFingPOpsEA-S577DoZg==/lib/x86_64这种方法的另一个好处是,应用程序不必自己提取本机文件,而是在安装时自动完成。这改善了应用程序的启动时间。
发布于 2020-06-15 16:06:05
这只是一个的短期解决方案--(而不是一个正确的答案):
将android targetSdkVersion从29更改为28
这意味着,即使在android 10设备上,事情也应该有效,但是它有以下限制:
https://stackoverflow.com/questions/62391811
复制相似问题