android-在apk中包含具有不同前缀的文件
作者:互联网
我有一个要使用本机库的项目,文件格式为:lib< name> .so确实包含在apk中.但是< name> .so格式的文件却没有.
有没有一种方法可以将更高版本的类型包含到lib目录的apk中?
如果没有,是否有办法将文件包含到apk内的目录中,我可以从本机代码中加载该文件?
解决方法:
最简洁的答案是不”.如果本机二进制文件的名称遵循lib….so模式,则它们将仅打包为APK,并在安装后提取为可执行文件.
请注意,这些库将根据目标系统的ABI提取到文件中.安装程序不会检查文件的实际属性.该决定基于APK结构中lib下的文件夹名称.
如果在APK的AndroidManifest.xml中的应用程序标签中添加属性extractNativeLibs=false,则安装程序(在Android Nougat及更高版本上)将不会提取本机库.
您可以欺骗系统,并将不遵循上述规则的文件保存到APK的lib文件夹中,但这样做几乎没有意义,因为它们永远不会被加载程序提取(如果文件存在,则为it may also extract file gdbserver).
通常的做法是将任意文件放在APK的资产文件夹中,并在安装后首次运行该应用时以编程方式提取它们.您无法将这些文件提取到通常的本机库所在的安全位置.您不应该将本机库提取到sdcard(例如getExternalFilesDir()),因为无论文件上的execute access标志如何,系统都可能不允许在其中执行文件.确保使用正确的ABI口味.
您可以查看Nougat本机lib loader的源代码,该源代码可以不提取而从APK加载本机库,并使用它直接从APK的资产文件夹中加载自定义库.
标签:android-ndk,android,android-gradle-plugin 来源: https://codeday.me/bug/20191211/2105423.html