日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

【错误记录】Android NDK 错误排查记录 ( java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader )

發(fā)布時(shí)間:2025/6/17 Android 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【错误记录】Android NDK 错误排查记录 ( java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader ) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 一、 報(bào)錯(cuò)信息
  • 二、 錯(cuò)誤分析
  • 三、 報(bào)錯(cuò)時(shí)使用的 Gradle 和 Gradle 插件版本的配置
  • 四、 修改方案
  • 五、 總體分析





一、 報(bào)錯(cuò)信息



報(bào)錯(cuò)信息 :

2020-06-14 12:11:46.782 4528-4528/? E/AndroidRuntime: FATAL EXCEPTION: mainProcess: kim.hsl.rtmp, PID: 4528java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/kim.hsl.rtmp-1/base.apk"],nativeLibraryDirectories=[/data/app/kim.hsl.rtmp-1/lib/x86, /system/lib, /vendor/lib]]] couldn't find "libnative-lib.so"at java.lang.Runtime.loadLibrary0(Runtime.java:984)at java.lang.System.loadLibrary(System.java:1530)at kim.hsl.rtmp.LivePusher.<clinit>(LivePusher.java:13)at kim.hsl.rtmp.MainActivity.onCreate(MainActivity.java:73)at android.app.Activity.performCreate(Activity.java:6679)at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618)at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)at android.app.ActivityThread.-wrap12(ActivityThread.java)at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)at android.os.Handler.dispatchMessage(Handler.java:102)at android.os.Looper.loop(Looper.java:154)at android.app.ActivityThread.main(ActivityThread.java:6119)at java.lang.reflect.Method.invoke(Native Method)at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)



二、 錯(cuò)誤分析



1 . 錯(cuò)誤分析 : 提示沒(méi)有在 /data/app/kim.hsl.rtmp-1/lib/x86, /system/lib, /vendor/lib 這幾個(gè)目錄中找到 NDK 的入口動(dòng)態(tài)庫(kù) libnative-lib.so ;


2 . CPU 信息查看 : 使用 adb shell 進(jìn)入命令行 , 進(jìn)入 /proc 目錄 , 執(zhí)行 cat cpuinfo 命令 , 即可查看 CPU 架構(gòu)信息 , 運(yùn)行該應(yīng)用的手機(jī)是 AArch64 架構(gòu)的 ;

1|walleye:/proc $ cat cpuinfo Processor : AArch64 Processor rev 4 (aarch64) processor : 0 BogoMIPS : 38.00 Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 CPU implementer : 0x51 CPU architecture: 8 CPU variant : 0xa CPU part : 0x801 CPU revision : 4

上述手機(jī)是 ARM 64 位 , 需要配置 arm64-v8a 架構(gòu)的庫(kù) ;


3 . 目前支持的架構(gòu)有 : arm64-v8a, armeabi-v7a, x86, x86_64 , 如果輸入其它架構(gòu) , 如 armeabi , 會(huì)報(bào)如下錯(cuò)誤 ;

ABIs [armeabi] are not supported for platform. Supported ABIs are [arm64-v8a, armeabi-v7a, x86, x86_64].

4 . 建議配置 : 建議按照如下進(jìn)行配置 , 如果是使用 C/C++ 源碼開(kāi)發(fā) , 沒(méi)有引入第三方的庫(kù) , 建議都給配置上 ;

android {defaultConfig {externalNativeBuild {cmake {cppFlags ""abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'}}} } dependencies { }

純代碼





三、 報(bào)錯(cuò)時(shí)使用的 Gradle 和 Gradle 插件版本的配置



1 . Gradle 及 Gradle 插件版本 : 下面的 Gradle 版本 是 gradle-5.6.4 , Gradle 插件版本是 gradle:3.6.1 , 這是創(chuàng)建工程時(shí)由 Android Studio 自動(dòng)生成 , 目前看來(lái)并不能適配當(dāng)前的 NDK 架構(gòu) ;


2 . 當(dāng)前的 Gradle 版本配置 :

#Tue Jun 09 14:15:37 CST 2020 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip

3 . 當(dāng)前的 Gradle 插件版本配置 :

// Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript {repositories {google()jcenter()}dependencies {classpath 'com.android.tools.build:gradle:3.6.1'} } allprojects {repositories {google()jcenter()} } task clean(type: Delete) {delete rootProject.buildDir }



四、 修改方案



修改 Gradle 版本號(hào) , 和 Gradle 插件版本號(hào)后 , 編譯后 , 應(yīng)用正常運(yùn)行的 ;

這個(gè) Gradle 版本號(hào) 和 Gradle 插件版本號(hào)是之前開(kāi)發(fā)該 NDK 項(xiàng)目時(shí)記錄下的版本信息 ;


1 . 修改后的 Gradle 版本號(hào) : 回退 Gradle 版本號(hào)至 gradle-5.1.1 ;

#Mon Sep 17 16:57:27 CST 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip

2 . Gradle 插件版本號(hào) : 回退 Gradle 插件版本號(hào)至 3.4.1 ;

// Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript {repositories {google()jcenter()}dependencies {classpath 'com.android.tools.build:gradle:3.4.1'} } allprojects {repositories {google()jcenter()} } task clean(type: Delete) {delete rootProject.buildDir }

目前看來(lái) , 不同 Gradle 版本號(hào) , 與不同 Gradle 插件版本號(hào)編譯的應(yīng)用 , 運(yùn)行機(jī)制不同 , 查找 NDK 動(dòng)態(tài)庫(kù)的機(jī)制也不同 ;





五、 總體分析



總體分析 :


① 開(kāi)發(fā)新應(yīng)用 : 使用最新的 Gradle 和 Gradle 插件 , 開(kāi)發(fā) NDK 應(yīng)用并沒(méi)有問(wèn)題 ;

② 編譯已有應(yīng)用 : 只是使用最新的 Gradle 及插件 , 編譯之前配置的 NDK 代碼的配置方式 , 代碼依賴(lài)庫(kù) , 構(gòu)建腳本等 , 需要修改 ;

③ 純?cè)创a開(kāi)發(fā) : 使用 C/C++ 源碼開(kāi)發(fā)肯定是沒(méi)問(wèn)題的 ;

④ 引用外部函數(shù)庫(kù) : 如果引用外部的函數(shù)庫(kù) , 如第三方靜態(tài)庫(kù)或動(dòng)態(tài)庫(kù) , 其中的配置 , 預(yù)編譯選項(xiàng) , 構(gòu)建腳本 , 可能支持情況就不太一樣了 , 使用一些不太適合的 Gradle 版本可能無(wú)法編譯通過(guò) , 或編譯出的版本無(wú)法運(yùn)行 ;

⑤ 當(dāng)前交叉編譯 CPU 架構(gòu)選擇 : 該 NDK 項(xiàng)目中引用了外部的靜態(tài)庫(kù) , 和頭文件 , 需要配置預(yù)編譯選項(xiàng) , 但是在 Ubuntu 中只交叉編譯了 armeabi-v7a CPU 架構(gòu)的靜態(tài)庫(kù) ;

⑥ 建議交叉編譯 CPU 架構(gòu)選擇 : 最新的 Gradle 和 Gradle 插件 , 編譯的應(yīng)用 , 必須在 Ubuntu 中交叉編譯時(shí) , 為各種 CPU 架構(gòu)都編譯出對(duì)應(yīng)的函數(shù)庫(kù) ;

總結(jié)

以上是生活随笔為你收集整理的【错误记录】Android NDK 错误排查记录 ( java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader )的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。