我需要从Java Android应用运行我的busybox。为此,我在apk res中包含了一个带有busybox的tar归档文件,并将其解压缩到/data/data/com.exeample.test/files,权限为755。但我无法从该位置运行它(许可被拒绝)。问题出现了,一般如何通过apk包安装二进制文件?由于安卓非常周到的安全性,这个问题非常有趣。我将非常感谢你的帮助。
uujelgoq1#
现成的二进制可执行文件只分布在apk包中的apk /lib/目录(取自https://dvelopers.android.com)。否则,在Android中执行本机代码至少会非常困难。在apk包中,/lib/目录可以包含不同扩展名的文件,这是不受限制的。为了在安装apk包时解压缩文件,您必须在清单(https://developer.android.com/guide/topics/manifest/application-element#extractNativeLibs)中设置android:extractNativeLibs=true。对于Android Studio用户,您可以创建目录app/src/main/jniLibs/-用于 *.so文件app/src/main/resources/lib/-适用于所有其他文件,包括 *. so. *那么它们将被打包到apk包的/lib/目录中。在android应用程序中,可以通过调用getApplicationInfo(). nativeLibraryDir来获取本地库目录的路径。
mqxuamgl2#
我尝试了同样的方法。但是当我在发布应用程序中看到本地lib路径上的文件不存在时,没有二进制对象。当我看到提取的apk文件时,我的所有文件都存在于lib/你能帮我一下吗
2条答案
按热度按时间uujelgoq1#
现成的二进制可执行文件只分布在apk包中的apk /lib/目录(取自https://dvelopers.android.com)。否则,在Android中执行本机代码至少会非常困难。在apk包中,/lib/目录可以包含不同扩展名的文件,这是不受限制的。为了在安装apk包时解压缩文件,您必须在清单(https://developer.android.com/guide/topics/manifest/application-element#extractNativeLibs)中设置android:extractNativeLibs=true。
对于Android Studio用户,您可以创建目录
app/src/main/jniLibs/-用于 *.so文件
app/src/main/resources/lib/-适用于所有其他文件,包括 *. so. *
那么它们将被打包到apk包的/lib/目录中。
在android应用程序中,可以通过调用getApplicationInfo(). nativeLibraryDir来获取本地库目录的路径。
mqxuamgl2#
我尝试了同样的方法。但是当我在发布应用程序中看到本地lib路径上的文件不存在时,没有二进制对象。
当我看到提取的apk文件时,我的所有文件都存在于lib/
你能帮我一下吗