问题描述
在Android 6.0 版本的设备上开发项目中,集成了【linphone】的本地【aar】库文件,但是在项目的运行过程中,【linphone】库的项目代码是可以正常调用的,但是在【aar】库里面的一些动态库【so】文件却一直无法加载进来。
这就感觉好奇怪啊,因为既然能调用【linphone】库的项目代码,说明这个【aar】库文件是加载成功的,而且在将这个【aar】库文件解压缩之后,是可以在文件里面找到这几个【so】文件的,这就让我感到一脸懵逼。
问题解决
这里需要用到了一个属性值,在【AndroidManifest】清单文件下
//是否对so库在进行打包成apk文件时进行压缩的属性
android:extractNativeLibs
//当项目的
minSdkVersion < 23
//或者
Android Gradle plugin < 3.6.0
//情况下,打包时默认
android:extractNativeLibs = true
//当项目的
minSdkVersion >= 23
//并且
Android Gradle plugin >= 3.6.0
//情况下,打包时默认
android:extractNativeLibs = false
当使用
android:extractNativeLibs = false
在安装程序之后,程序会直接使用【/data/data/app包名/lib】路径下的【so】文件,不会进行【so】复制操作,节省存储空间,但是打包生成的apk文件较大。
当使用
android:extractNativeLibs = true
Android Studio在打包过程中会对【so】文件进行压缩,生成的apk文件较小。但是在安装应用时,系统会将【so】解压出来,重新存储一份。因此安装时间会变长,占用的存储空间会变大。
由于项目中一直报错提示无法找到【so】文件,所以在清单文件中使用
android:extractNativeLibs = "true"
这样系统会进行复制【so】文件然后在程序运行时就可以寻找到自己复制的【so】文件,错误消失,程序正常使用。