Android应用安装时libexample.so无法自动复制至data/app/lib的技术求助
以下是针对你的问题的具体排查和解决步骤:
确认项目中Native库的存放路径与打包配置
确保你的libexample.so放在项目的正确位置:Android Studio项目中,标准路径是src/main/jniLibs/arm64-v8a/,而非app/lib/。如果自定义了路径,需要在Module级别的build.gradle中明确指定:android { sourceSets { main { jniLibs.srcDirs = ['app/lib'] // 匹配你的自定义路径 } } // 同时确保指定了目标ABI defaultConfig { ndk { abiFilters 'arm64-v8a' } } }另外检查
packagingOptions是否意外排除了.so文件,避免类似exclude 'lib/**'的错误配置。验证extractNativeLibs配置的正确性
确认android:extractNativeLibs="true"是在AndroidManifest.xml的<application>标签下设置,而非其他节点:<application android:allowBackup="true" android:extractNativeLibs="true" android:icon="@mipmap/ic_launcher" ...>若你的
targetSdkVersion >= 23,还可以在build.gradle中同步配置,避免manifest被gradle覆盖:android { defaultConfig { extractNativeLibs true } }检查设备ABI兼容性
通过adb shell getprop ro.product.cpu.abi命令确认设备确实是arm64-v8a架构。如果设备是其他架构(如armeabi-v7a、x86),系统不会提取arm64架构的库。同时避免应用中存在其他ABI的同名库,导致系统优先选择其他版本。排查APK本身的完整性
解压你的APK文件,确认lib/arm64-v8a/libexample.so存在且文件大小正常,没有损坏。如果APK中不存在该文件,说明打包过程出现问题,需要重新检查构建配置。清理构建缓存并重建项目
执行以下操作清除旧缓存,避免构建异常:- 在Android Studio中选择
File -> Invalidate Caches... -> Invalidate and Restart - 运行命令行:
./gradlew clean assembleDebug(根据测试环境替换为Release)
- 在Android Studio中选择
排查第三方工具的影响
如果你使用了应用加固、混淆或第三方打包工具,这类工具可能会修改APK的Native库结构,导致系统无法正常提取。检查工具的配置,确保Native库被正确保留,未被篡改或排除。
内容的提问来源于stack exchange,提问作者Yarin Shitrit

