Android Studio 发生 Couldn't load jpush175 from loader dalvik.system.PathClassLoader 错误

本文介绍如何解决Android Studio中出现的Couldn'tloadjpush175fromloaderdalvik.system.PathClassLoader异常,主要涉及如何配置.so文件及.jar文件,确保它们能被正确加载。
Android Studio 发生 Couldn't load jpush175 from loader dalvik.system.PathClassLoader 异常

Android Studio(以下简称AS) 崛起的势头已经势不可挡,将来很可能会取代Eclipse 进行Android 开发

想必用惯了Eclipse的咱们 一开始很难习惯 

最近遇到 Couldn't load jpush175 from loader dalvik.system.PathClassLoader 这样一个问题 

它说的是AS不能找到库文件

发生在于像Eclipse 嵌入极光推送等 第三方包的情况

AS 是不能直接识别这些文件的

如果是.jar文件  则需要拷贝到libs文件夹的同事 邮件 有一个add library选项 进行添加 (也可能是 is library选项或其他)

如果是.so文件 则需要修改build.gradle 

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

    defaultConfig {
        applicationId "cn.ninebot.ninebot"
        minSdkVersion 18
        targetSdkVersion 22
        versionCode 2
        versionName "3.0.0.5"
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    sourceSets.main{
        //AS识别libs下的.so第三方包
        jniLibs.srcDirs =['libs']
    }
}

dependencies {
//    compile fileTree(dir: 'libs', include: ['*.jar'])
    //AS识别libs下的.so第三方包
    compile fileTree(dir: 'libs', include: ['**.*'])
  
}
将这两处做好以后 重新运行程序 OK 该异常解决

版权声明:本文为博主原创文章,未经博主允许不得转载。

### 深信服SDK Java UnsatisfiedLinkError 错误解决方案 在 Android 开发中,`java.lang.UnsatisfiedLinkError` 通常是因为系统无法找到指定的 `.so` 库文件。根据提供的错误信息和引用内容,以下是关于深信服 SDK 在 Java 中出现 `UnsatisfiedLinkError` 的详细分析与解决方案。 #### 1. 问题原因分析 `java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList...] couldn't find "libemmsdk.so"` 表明系统在加载 `libemmsdk.so` 时失败。可能的原因包括以下几种: - **缺少目标架构的 `.so` 文件**:如果项目中未包含目标设备支持的架构(如 `arm64-v8a`, `armeabi-v7a` 等)的 `.so` 文件,则会导致此错误[^1]。 - **`.so` 文件路径配置错误**:即使 `.so` 文件存在,但如果其路径未正确配置到 `nativeLibraryDirectories` 中,也会导致加载失败[^2]。 - **混淆或压缩工具的影响**:某些代码混淆或压缩工具可能会破坏 `.so` 文件的加载逻辑[^3]。 - **依赖冲突**:如果项目中存在多个版本的深信服 SDK 或其他依赖库,可能导致 `.so` 文件被覆盖或丢失[^5]。 #### 2. 解决方案 ##### 方法一:检查并添加正确的 `.so` 文件 确保项目的 `libs` 目录下包含所有目标架构的 `libemmsdk.so` 文件。例如: ```plaintext libs/ ├── arm64-v8a/ │ └── libemmsdk.so ├── armeabi-v7a/ │ └── libemmsdk.so └── x86/ └── libemmsdk.so ``` 如果缺少某些架构的 `.so` 文件,请从深信服 SDK 官方文档或支持渠道获取完整版本,并将其放置到对应目录中。 ##### 方法二:修改 `build.gradle` 配置 确保 `build.gradle` 文件中正确配置了 `.so` 文件的加载路径。可以在 `android` 节点下添加以下内容: ```gradle android { ... defaultConfig { ... ndk { abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86' // 明确指定支持的 ABI } } packagingOptions { doNotStrip "*/armeabi-v7a/*.so" // 防止 so 文件被剥离 doNotStrip "*/arm64-v8a/*.so" doNotStrip "*/x86/*.so" } } ``` 上述配置可以确保 `.so` 文件不会因打包过程中的优化而被移除[^4]。 ##### 方法三:验证 `.so` 文件是否正确加载 在代码中使用 `System.loadLibrary("emmsdk")` 加载 `.so` 文件前,可以通过以下方式验证文件是否存在: ```java public static boolean isSoFileExist(String fileName) { try { ApplicationInfo appInfo = YourApplication.getContext().getApplicationInfo(); String libPath = appInfo.nativeLibraryDir; File file = new File(libPath, fileName); return file.exists(); } catch (Exception e) { e.printStackTrace(); return false; } } if (!isSoFileExist("libemmsdk.so")) { Log.e("EMMSDK", "libemmsdk.so not found!"); } ``` 如果文件不存在,请重新检查 `.so` 文件的放置路径和配置[^2]。 ##### 方法四:清理项目并重新构建 有时,缓存或临时文件可能导致 `.so` 文件加载失败。执行以下命令清理并重新构建项目: ```bash ./gradlew clean ./gradlew assembleDebug ``` 清理后重新运行应用,观察问题是否解决[^5]。 #### 3. 注意事项 - 如果使用的是第三方 SDK,请确保 SDK 提供的所有资源文件均已正确导入项目。 - 如果项目中存在多个 `.so` 文件版本,请避免重复或冲突的文件覆盖。 - 如果问题仍未解决,建议联系深信服官方技术支持团队,提供完整的错误日志以获得进一步帮助。 ```java static { System.loadLibrary("emmsdk"); // 确保此行代码位于正确位置 } ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值