集成BitcoinJ库后Android APK安装失败:INSTALL_FAILED_NO_MATCHING_ABIS
解决INSTALL_FAILED_NO_MATCHING_ABIS错误(集成BitcoinJ后)
这个问题我之前在集成原生库依赖时也踩过坑,本质是APK中打包的原生库(.so文件)和你真机的CPU架构不匹配导致的。结合你的配置来看,bitcoinj-core:0.14.7这个老版本默认支持的原生架构不全,再加上web3j:core:3.3.1-android的依赖叠加,就触发了这个安装错误。
试试下面的完整解决方案:
1. 调整Gradle的ABI配置
在你的android块里补充以下配置,确保覆盖主流真机的架构,同时处理可能的库冲突:
android { compileSdkVersion 28 defaultConfig { applicationId "com.umerkiani.osrwallet" minSdkVersion 21 targetSdkVersion 28 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" // 新增:指定要打包的原生架构,覆盖主流机型 ndk { abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' } } // 调整splits配置,加入arm64-v8a(很多新真机用这个架构) splits { abi { enable true reset() include 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' universalApk true } } // 新增:处理多个依赖可能带来的同名so文件冲突 packagingOptions { pickFirst 'lib/**/*.so' } // 你的其他配置(buildTypes、dataBinding、compileOptions)... }
2. 清理并重建项目
执行以下命令彻底清理旧的编译产物,避免缓存影响:
./gradlew clean ./gradlew assembleDebug
然后重新安装APK到真机上。
3. 可选:升级BitcoinJ版本(谨慎操作)
0.14.7是比较旧的版本了,后续版本对Android的原生架构支持更完善。如果你能兼容API变化,可以尝试升级到0.16.2(相对稳定的版本):
implementation 'org.bitcoinj:bitcoinj-core:0.16.2'
为什么之前的配置没用?
你之前的splits配置漏掉了arm64-v8a架构——现在大部分中高端Android真机都是这个架构,缺少对应的原生库就会导致安装失败。加上ndk.abiFilters可以明确告诉Gradle只打包你指定的架构库,避免引入不必要的架构文件。
内容的提问来源于stack exchange,提问作者Umer Kiani




