Android java.lang.UnsatisfiedLinkError couldn't find "libijkffmpeg.so"完美解决

播放视频报错:

 java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.hjq.demo-2/base.apk"],nativeLibraryDirectories=[/data/app/com.hjq.demo-2/lib/arm64, /data/app/com.hjq.demo-2/base.apk!/lib/arm64-v8a, /vendor/lib64, /system/lib64]]] couldn't find "libijkffmpeg.so"

解决方法:

其实就是项目里没有发现需要的.so库,你让你的项目中有相应的.so库即可。

1.在app的build.gradle中配置ndk:

 // 仅保留两种架构的 so 库
        ndk {
            // armeabi:已经淘汰(0%)
            // armeabi-v7a:曾经主流的架构平台(20%)
            // arm64-v8a:目前主流架构平台(80%)
            //"x86_64",
            abiFilters "armeabi-v7a", "arm64-v8a", "x86", "armeabi"
        }

或者:

splits {
    abi {
        enable true
        reset()
        include 'x86', 'x86_64', 'armeabi-v7a', 'armeabi'
        universalApk false
    }
}

贴出全部的build.gradle 供大家参考:

apply plugin: 'com.android.application'

android {
    compileSdkVersion rootProject.ext.compileVersion

    // 使用 JDK 1.8
    compileOptions {
        targetCompatibility JavaVersion.VERSION_1_8
        sourceCompatibility JavaVersion.VERSION_1_8
    }
    lintOptions {
        abortOnError false
    }

    defaultConfig {
        // 无痛修改包名:https://www.jianshu.com/p/17327e191d2e
        applicationId "com.hjq.demo"
        minSdkVersion 16
        targetSdkVersion rootProject.ext.targetVersion
        versionCode 10
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

        // 仅保留中文语种的资源
        resConfig 'zh'

        // 仅保留 xxhdpi 图片资源(目前主流分辨率 1920 * 1080)
        resConfig 'xxhdpi'

        // 仅保留两种架构的 so 库
        ndk {
            // armeabi:已经淘汰(0%)
            // armeabi-v7a:曾经主流的架构平台(20%)
            // arm64-v8a:目前主流架构平台(80%)
            //"x86_64",
            abiFilters "armeabi-v7a", "arm64-v8a", "x86", "armeabi"
        }

        // 开启 Dex 分包
        //multiDexEnabled true

        // 混淆配置
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-app.pro'

        javaCompileOptions {
            annotationProcessorOptions {
                // EventBus Apt 索引类生成位置
                arguments = [ eventBusIndex : applicationId + '.MyEventBusIndex' ]
            }
        }
    }

    // APK 签名的那些事:https://www.jianshu.com/p/a1f8e5896aa2
    signingConfigs {
        debug {
            storeFile file(StoreFile)
            storePassword StorePassword
            keyAlias KeyAlias
            keyPassword KeyPassword
        }
        release {
            storeFile file(StoreFile)
            storePassword StorePassword
            keyAlias KeyAlias
            keyPassword KeyPassword
        }
    }

    buildTypes {
        release {
            // 移除无用的资源文件
            shrinkResources true
            // ZipAlign 优化
            zipAlignEnabled true
            // 设置混淆
            minifyEnabled true
            // 正式环境签名
            signingConfig signingConfigs.release
            // 正式环境下的 BuglyId
            buildConfigField "String", "BUGLY_ID", "\"请自行替换 Bugly 上面的 AppID\""
        }

        debug {
            // 移除无用的资源文件
            shrinkResources false
            // ZipAlign 优化
            zipAlignEnabled false
            // 设置混淆
            minifyEnabled false
            // 开发环境签名
            signingConfig signingConfigs.debug
            // 开发环境下的 BuglyId
            buildConfigField "String", "BUGLY_ID", "\"请自行替换 Bugly 上面的 AppID\""
        }
    }

    // 默认渠道名
    flavorDimensions "default"
    // 友盟多渠道打包
    productFlavors {
        tencent {}  // 应用宝
        baidu {}    // 百度
        xiaomi {}   // 小米
        huawei {}   // 华为

        productFlavors.all { flavor ->
            flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
        }
    }

    // JNI 目录
    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }

    // 执行配置
    applicationVariants.all { variant ->

        // Apk 输出配置
        variant.outputs.all { output ->
            def appName = "AndroidProject"
            if (variant.buildType.name == 'debug') {
                outputFileName = appName + '_v' + versionName + '_' + variant.buildType.name + '.apk'
            } else {
                outputFileName = appName + '_v' + versionName + '_' + new Date().format("yyyyMMdd") + '_' + variant.productFlavors[0].name + '_' + variant.buildType.name + '.apk'
            }
        }

        // AndroidManifest 输出配置
        variant.outputs[0].processManifest.doLast {
            def manifestFile = "${manifestOutputDirectory}/AndroidManifest.xml"
            def updatedContent = new File(manifestFile).getText('UTF-8')
                    .replaceAll("UMENG_APPKEY_VALUE", "5cb16d93570df399fd0014e2") // 友盟 AppKey
                    .replaceAll("QQ_APPID_VALUE", "100424468") // QQ AppId
                    .replaceAll("QQ_APPKEY_VALUE", "c7394704798a158208a74ab60104f0ba") // QQ Key
                    .replaceAll("WX_APPID_VALUE", "wxdc1e388c3822c80b") // 微信 AppId
                    .replaceAll("WX_APPKEY_VALUE", "3baf1193c85774b3fd9d18447d76cab0") // 微信 Key
            new File(manifestFile).write(updatedContent, 'UTF-8')
        }
    }
}

// api 与 implementation 的区别:https://www.jianshu.com/p/8962d6ba936e
dependencies {
    // 依赖 libs 目录下所有 jar 包
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    // 依赖 libs 目录下所有 aar 包
    implementation fileTree(include: ['*.aar'], dir: 'libs')

    // 基础库(不包任何第三方框架)
    implementation project(':base')
    // 自定义 View
    implementation project(':widget')
    // Glide 隔离
    implementation project(':image')
    // 友盟隔离
    implementation project(':umeng')

    // 谷歌 Support 包
    implementation "androidx.appcompat:appcompat:$rootProject.ext.appcompatVersion"
    implementation "com.google.android.material:material:$rootProject.ext.materialVersion"

    // Dex 分包,解决 64k 方法问题
    //implementation 'androidx.multidex:multidex:2.0.1'

    // ButterKnife 注解库:https://github.com/JakeWharton/butterknife
    implementation 'com.jakewharton:butterknife:10.1.0'
    annotationProcessor 'com.jakewharton:butterknife-compiler:10.1.0'

    // EventBus 事件总线:https://github.com/greenrobot/EventBus
    implementation "org.greenrobot:eventbus:3.1.1"
    annotationProcessor 'org.greenrobot:eventbus-annotation-processor:3.1.1'

    // 状态栏沉浸:https://github.com/gyf-dev/ImmersionBar
    implementation 'com.gyf.immersionbar:immersionbar:3.0.0'

    // 权限请求框架:https://github.com/getActivity/XXPermissions
    implementation 'com.hjq:xxpermissions:6.0'

    // 标题栏:https://github.com/getActivity/TitleBar
    implementation 'com.hjq:titlebar:6.0'

    // 吐司工具类:https://github.com/getActivity/ToastUtils
    implementation 'com.hjq:toast:8.0'

    // 支持放大缩放的 ImageView:https://github.com/chrisbanes/PhotoView
    implementation 'com.github.chrisbanes:PhotoView:2.3.0'
    // ViewPager 指示器:https://github.com/romandanylyk/PageIndicatorView
    implementation 'com.romandanylyk:pageindicatorview:1.0.3'

    // Bugly 异常捕捉:https://bugly.qq.com/docs/user-guide/instruction-manual-android/?v=20190418140644
    implementation 'com.tencent.bugly:crashreport:3.0.1'
    implementation 'com.tencent.bugly:nativecrashreport:3.7.1'

    // 本地异常捕捉框架:https://github.com/Ereza/CustomActivityOnCrash
    implementation 'cat.ereza:customactivityoncrash:2.2.0'

    // 内存泄漏捕捉:https://github.com/square/leakcanary
    debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.5.4'
    releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.4'

    // 网络请求(待发布):https://github.com/getActivity/EasyHttp

    // 国际化:https://github.com/getActivity/MultiLanguages
    // 悬浮窗:https://github.com/getActivity/XToast
    // 上拉刷新下拉加载:https://github.com/scwang90/SmartRefreshLayout
    // 工具类:https://github.com/Blankj/AndroidUtilCode
    // 轮播图:https://github.com/bingoogolapple/BGABanner-Android
    // 二维码:https://github.com/bingoogolapple/BGAQRCode-Android
    // 第三方支付:https://github.com/getActivity/RxPay
    // Log 打印:https://github.com/elvishew/XLog
    // 图片压缩:https://github.com/Curzibn/Luban
    // 对象存储:https://github.com/leavesC/DoKV
    // 数据注入:https://github.com/JumeiRdGroup/Parceler

    implementation 'com.android.support:design:26.1.0'
    //约束布局
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    //第三方适配器
    implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.30'
    implementation 'com.google.code.gson:gson:2.8.0'
//    implementation 'com.github.bumptech.glide:glide:3.7.0'

    //通用标题栏
    implementation 'com.hjq:titlebar:6.0'
    implementation 'com.makeramen:roundedimageview:2.3.0'
    //高度自定义的开源安卓视频框架
    implementation 'cn.jzvd:jiaozivideoplayer:7.0.5'
    implementation 'com.danikula:videocache:2.7.0'
//    implementation 'com.github.bumptech.glide:glide:4.7.1'
    implementation 'com.github.bumptech.glide:glide:4.9.0'
    dependencies {
        implementation ('com.google.android.exoplayer:exoplayer:2.9.1'){

        }
    }
//    dependencies {
//        implementation ('com.github.bumptech.glide:glide:4.7.1'){
//
//        }
//    }
    implementation 'tv.danmaku.ijk.media:ijkplayer-java:0.8.8'
    implementation 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.4'
//    implementation 'com.google.android.exoplayer:exoplayer:2.9.1'

}

然后同步一下就可以了,若是还是这个错误的话,看下面。

2.配置ndk没有一点反应,依旧还是这个错误,就要需要下载.so库了(错误提示没有发现哪个.so库就下载哪个.so)

这里提供.so的下载地址:libijkffmpeg.so或者加我QQ1223235200直接QQ传.so库

 

相关视频框架播放: 

Android VideoPlayer MediaPlayer VideoView MediaView Float View And Fullscreen.高度自定义的开源安卓视频框架

https://github.com/lipangit/JiaoZiVideoPlayer

https://github.com/lurenman/JiaoZiVideoPlayerDemo

https://github.com/Life1412378121/TVPlayer-IPTV-EasyPlayer

https://github.com/CarGuo/GSYVideoPlayer

https://github.com/curtis2/SuperVideoPlayer

https://github.com/w1123440793/VideoListDemo

https://github.com/ashqal/MD360Player4Android

https://github.com/hejunlin2013/DragVideo

https://github.com/Zhaoss/VideoPlayerDemo

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
java.lang.UnsatisfiedLinkError: Could not load SWT library是一个常见的错误,它表示在加载SWT库时出现了问题。这个错误通常有以下几个原因: 1. 缺少SWT库:这个错误可能是由于缺少SWT库文件引起的。SWT是一个用于构建Java图形用户界面的工具包,它需要与操作系统和Java虚拟机兼容的本机库文件。如果缺少这些库文件,就会导致加载失败并出现UnsatisfiedLinkError错误。 2. 错误的SWT库版本:如果使用的SWT库版本与操作系统或Java虚拟机不兼容,也会导致加载失败并出现UnsatisfiedLinkError错误。确保使用与操作系统和Java虚拟机兼容的SWT库版本。 3. 错误的库路径:如果SWT库文件没有正确配置到Java虚拟机的库路径中,也会导致加载失败并出现UnsatisfiedLinkError错误。确保将SWT库文件正确配置到java.library.path系统属性中。 解决这个错误的方法包括: 1. 检查SWT库文件是否存在:确保SWT库文件存在于系统中,并且与操作系统和Java虚拟机兼容。 2. 检查SWT库文件的版本:确保使用与操作系统和Java虚拟机兼容的SWT库版本。 3. 配置库路径:将SWT库文件所在的路径添加到java.library.path系统属性中,以便Java虚拟机能够找到并加载它。 4. 检查依赖项:如果SWT库依赖于其他库文件,确保这些库文件也存在于系统中,并且与操作系统和Java虚拟机兼容。 5. 检查环境变量:如果SWT库依赖于环境变量,确保这些环境变量已正确设置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值