couldn't find "xxxxx.so"

couldn’t find “xxxxx.so”

找不到so库,很有可能是so库没有打进去
验证:找到目录build-outputs-apk-debug,后缀名改为.zip并解压,查看lib文件下是否有libHello.so
问题一:
引入的三方module,build.gradle是这样配置的

 externalNativeBuild {
            ndkBuild {
                abiFilters "armeabi-v7a", "x86", "x86_64"
            }
        }

主module中build.gradle配置如下

 ndk { abiFilters "armeabi",  "x86" }

原因分析:以主module配置的ndk为准,打出来只能是armeabi、x86两种架构的cpu,三方module在build.gradle中没有配置armeabi,所以so文件没有打入apk包中
解决:在三方module中添加armeabi架构

 externalNativeBuild {
            ndkBuild {
                abiFilters "armeabi-v7a", "x86", "x86_64","armeabi"
            }
        }

问题二:
如果有so文件,看build.gradle中路径是否设置正确

 sourceSets.main {
        jniLibs.srcDirs = ['libs']
        //jniLibs.srcDirs = ['src/main/libs']
    }

tips

这样配置的作用,会在编译时生成so文件,在项目中找不到对应so文件,但是编译之后的APK中lib下有so文件,就是这个道理,前提也是需要本地安装ndk,因为每次需要执行ndk编译

externalNativeBuild {
      ndkBuild {
          path file('src/main/jni/Android.mk')
      }
  }

如果有编译好的so库,直接使用即可,需要在build.gradle中指定一下so文件路径,比如这样 :sourceSets.main { jniLibs.srcDirs = ['libs'] },当然如果这样配置的话,本地没有ndk也是可以的,因为别人已经替你完成了ndk所做的工作,把编译好的so文件直接给你了

报错:
ERROR: ABIs [armeabi] are not supported for platform. Supported ABIs are [armeabi-v7a, arm64-v8a, x86, x86_64].
配置了armeabi架构,ndk在编译的时候不支持,只支持 [armeabi-v7a, arm64-v8a, x86, x86_64].这四种的哪个架构。
很有可能A电脑没有报错,B电脑报这个错,(NDK版本不一致导致)因为从NDK r17版本开始,已经不再支持armeabi、mips、mips64这三种ABI了。如果要用armeabi,需要下载小于r17的ndk版本

你可能感兴趣的:(android,学习)