如何将可执行文件放在Android 29上运行?

问题描述

我的Android应用程序包含一组可执行文件,这些可执行文件在首次运行时被提取到应用程序目录(/ data / data /%package%/)。如果定位到Android 28(targetSdkVersion),则效果很好。自2020年11月2日起,它在Google Play中被禁止使用,并且所有应用must的目标都是29。因此,它停止与permission exception一起使用。

可执行文件应放置到哪个目录?

PS。一些类似的应用具有the same issue

解决方法

https://developer.android.com/about/versions/10/behavior-changes-10#execute-permission

定位到API 29(Android 10 / Q)或更高版本时,将不再具有对存储在应用主目录(数据)中的文件的执行权限,这正是您所描述的(/ data / data / %package%/)。

此Android 10修改版本是在提交https://android-review.googlesource.com/c/platform/system/sepolicy/+/804149中引入的,然后由Google在此处正式确认:https://issuetracker.google.com/issues/128554619

许多项目正在讨论这一重大更改,例如termux/termux-app#1072。一种推荐且(希望)面向未来的方法是将程序二进制文件提取到应用程序的本机lib目录中(使用android:extractNativeLibs = true),在该文件中仍可以执行文件,但以只读方式存储文件增强了安全性。

以下示例显示了如何处理此更改:在Termux中,在android-10分支中使用提交f6c3b6f,或在另一个显示how to run the Erlang runtime on Android的项目中,将.zip存档中的所有文件都提取到 jniLibs /“ abi” 子目录(“ abi”是用于64位ARM的arm64-v8a,用于32位ARM的armeabi-v7a,等等),其文件名为格式是Android平台所期望的。可执行文件可以简单地手动移动到正确的项目文件夹中,重要的部分是对文件名使用lib___.so格式。

在Android Manifest文件中,设置属性android:extractNativeLibs =“ true”将在安装时将这些lib___.so文件提取到正确的本机lib目录中,并支持执行权限。最终,如果需要,可以在常规应用程序目录中创建符号链接以使用常规可执行文件名称,而不是难以操作的lib___.so版本。

谢谢,杰罗姆

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...