Java.lang.Dalvik.sistema.PathClassLoader


¿Hay alguien que haya tenido experiencia con este error?

java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/org.swig.simple-2/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "liborg.swig.simple.example.so"

Se produce un error al cargar la biblioteca de esta manera.

static {
    System.loadLibrary("example");
}

Estoy seguro de que la clase 'example' existe en la carpeta actual.

Author: Andres Cárdenas, 2014-11-28

15 answers

Tenga en cuenta que hay una convención de nomenclatura. Tu lib necesita ser llamada libexample.so .

LoadLibrary ("ejemplo") buscará libexample.so.

La biblioteca .so debe estar dentro del apk bajo la carpeta lib (ya que está desarrollando para Android, debe estar debajo de las carpetas lib/armeabi y lib/armeabi-v7a - ¿por qué ambas carpetas ? algunas versiones de Android se ven en lib / armeabi y otras en lib / armeabi-v7a ... se lo que funciona para usted ).

Otras cosas para buscar :

  • Asegúrese de compilar para la arquitectura correcta (si compila para armeabi v5 no funcionará en armeabiv7 o armeabiv7s ).

  • Asegúrese de que sus prototipos exportados se utilizan en la clase correcta (compruebe el ejemplo hello jni. Sus funciones expuestas deben tener un aspecto similar a Java_mypackagename_myjavabridgeclass_myfunction).

Por ejemplo, la función Java_com_example_sample_hello se traducirá en la clase java com.ejemplo.muestra, función hola.

 42
Author: MichaelCMS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-28 11:04:08

Esto me ayudó. Compartirlo para alguien que podría llegar con el mismo problema.

android {
    ....
    defaultConfig {
        ....
        ndk {
            abiFilters "armeabi", "armeabi-v7a", "x86", "mips"
        }
    }
}
 18
Author: Alex,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-05 20:33:23

Lo que funcionó para mí fue colocar la carpeta jniLibsbajo la carpeta "main", además de las carpetas "java" y "res", por ejemplo project - > app - > src - > main - > jniLibs

Tenía todas las bibliotecas con los nombres correctos y cada una colocada en su respectiva subcarpeta de arquitectura, pero todavía tenía la misma excepción; incluso probé muchas otras respuestas SO como la respuesta aceptada aquí, compilando un JAR con las libs. so, otra colocación de la carpeta jniLibs, sucesivamente.

Para este proyecto, tuve que usar Gradle 2.2 y Android Plugin 1.1.0 en Android Studio 1.5.1

 10
Author: Daniel Ponticelli,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-04 21:39:05

Actualmente estoy trabajando en una aplicación Android que transmite radio. Uso la biblioteca de decodificadores nativa que se llama aacdecoder. Todo estaba bien hasta que la aplicación obtiene un error de bloqueo en algunos dispositivos Android. Fue realmente molesto. Debido a que la aplicación era perfectamente reproduce transmisiones de radio casi todos los dispositivos, pero Samsung S6 y S6 Edge.

Informe de accidente dice que

Fatal Exception: java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file “/data/app/com.radyoland.android-1/base.apk”],nativeLibraryDirectories=[/data/app/com.radyoland.android-1/lib/arm64, /vendor/lib64, /system/lib64]]] couldn’t find “libaacdecoder.so”
 at java.lang.Runtime.loadLibrary(Runtime.java:366)
 at java.lang.System.loadLibrary(System.java:988)
 at com.spoledge.aacdecoder.Decoder.loadLibrary(Decoder.java:187)

Como puede ver, ese bloqueo está diciendo que no pudo cargar la biblioteca nativa. ¿Pero por qué? En primer lugar comprobé mi estructura, si biblioteca nativa. so archivos ubicados correctamente.

Parece que todo estaba bien excepto este loco error. Luego, después de algunas investigaciones, me entero de que algunos de los dispositivos Android tiene procesadores de 64 bits. Este dispositivo genera y comprueba la carpeta arm64 para cargar la biblioteca nativa. Ese era el problema. Porque mi proyecto no tiene la carpeta arm64. Aquí está la solución;

defaultConfig {
    ...

    ndk {
        abiFilters "armeabi-v7a", "x86", "armeabi", "mips"
    }

}

Necesitas agregar estos filtros(abiFilters) a la compilación del módulo de tu aplicación.archivos de gradle. Así que cuando su dispositivo intente ejecutar su aplicación, comprobará el archivo de gradle y entiende que no debe generar ninguna carpeta y usar los recursos de la biblioteca nativa existente. Boom, casi resuelto. Pero todavía hay una cosa más.

android.useDeprecatedNdk=true

Agrega esta línea a tu gradle.propiedades para usar Ndk obsoleto.

Finalmente mi aplicación funciona en S6 y S6 Edge. Quiero decir que funciona en todos los dispositivos que tienen nuevos procesadores de 64 bits.

 8
Author: King of Masses,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-07 09:26:02

Uso Android Studio 3.0 y encuentro este problema. Y estoy seguro de que la app está construida.gradle está bien.

Vaya a Run -> Edit Configurations -> Profiling y desactive "Enable advanced profiling".

Esto funciona para mí. Respuesta de referencia

 6
Author: Smiles,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-07 04:26:50

Algunas herramientas antiguas de gradle no pueden copiar. así que los archivos en la carpeta de compilación de alguna manera, copiar manualmente estos archivos en la carpeta de compilación como se muestra a continuación puede resolver el problema:

build/intermediates/rs/{build config}/{support architecture}/

Configuración de compilación: beta/production/sit / uat

Arquitectura de soporte: armeabi/armeabi-v7a/mips / x86

 5
Author: thanhbinh84,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-25 03:20:19

-si gradle.properties no disponible, primero agregue ese archivo y añadir android.useDeprecatedNdk=true

-usa este código en la compilación.gradle

defaultConfig {
    applicationId 'com.example.application'
    minSdkVersion 16
    targetSdkVersion 21
    versionCode 11
    versionName "1.1"
    ndk {
        abiFilters "armeabi"
    }
}

`

 5
Author: Sanket Sangani,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-16 14:18:15

Esto funciona para mí

Si tienes el archivo .so en armeabi, entonces menciona dentro de ndk esa carpeta sola.

defaultConfig {
        applicationId "com.xxx.yyy"
        minSdkVersion 17
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        renderscriptTargetApi 26
        renderscriptSupportModeEnabled true
        ndk {
            abiFilters "armeabi"
        }
    }

Y luego usa esto

android.useDeprecatedNdk=true;

En gradle.archivo de propiedades

 4
Author: KCN,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-02 08:30:13

Si estás usando Android studio, simplemente edita gradle.propiedades en la carpeta raíz y añadir android.useDeprecatedNdk = true. A continuación, edite la compilación.archivo gradle en la carpeta de tu aplicación, establece abiFilters de la siguiente manera:

android {
....
defaultConfig {
    ....
    ndk {
        abiFilters "armeabi", "armeabi-v7a", "x86", "mips"
    }
}
}
 2
Author: Faxriddin Abdullayev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-08 18:17:12

Si usa módulo con código c++ y tiene el mismo problema, podría probar

Build -> Refresh Linked C++ Projects

También, debe abrir algún archivo de este módulo y hacer

Build -> Make module "YourNativeLibModuleName"

 2
Author: Sergei Belozerov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-22 10:29:00

Lo que me ayudó fue registrar el directorio fuente para los archivos jni en la compilación.archivo gradle. Añade esto a tu archivo de gradle:

android {
    sourceSets {
        main {
            jniLibs.srcDir '[YOUR_JNI_DIR]' // i.e. 'libs'
        }
    }
}
 2
Author: Boris Gitlin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-05 07:38:08

System.loadLibrary carga una biblioteca compartida desde la carpeta lib.

¿Qué quiere decir cuando dice "Estoy seguro de que la clase 'example' existe en la carpeta actual"? Debe poner su biblioteca.so en la carpeta lib.

 0
Author: Suvitruf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-28 10:33:56

Para mí el problema era que NDK_ROOT no se estaba configurando.

Comprueba tu consola si:

NDK_ROOT = None [!] NDK_ROOT no definido. Por favor, defina NDK_ROOT en su entorno o en local.propiedades

Compruebe si ha establecido:

  • NDK_ROOT y SDK_ROOT en C / C++->Build->Environment
  • Android->NDK
  • Android - > SDK
 0
Author: Iris Veriris,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-24 14:20:31

Esto podría ser un problema relacionado con el dispositivo.
Estaba recibiendo este error en MI dispositivos solo, el código estaba trabajando con todos los demás dispositivos.

Esto podría ayudar:

 defaultConfig{
      ...    
      externalNativeBuild {
                    cmake {
                        cppFlags "-frtti -fexceptions"
                    }
                }
    }
 0
Author: AskQ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-31 09:24:28

Otra causa de bloqueo y posible solución se describe en este artículo: https://medium.com/keepsafe-engineering/the-perils-of-loading-native-libraries-on-android-befa49dce2db

Brevemente:
en construcción.gradle

dependencies {
    implementation 'com.getkeepsafe.relinker:relinker:1.2.3'
}

En el código

static {
    try {
        System.loadLibrary("<your_libs_name>");
    } catch (UnsatisfiedLinkError e) {
        ReLinker.loadLibrary(context, "<your_libs_name>");
    }
}
 0
Author: ilyamuromets,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-08 07:54:44