System.load бросает NoSuchMethodError

Я пытаюсь загрузить собственную библиотеку в Windows с помощью JRE 1.7. Вот мой код для загрузки библиотеки:

public boolean loadNativeLibrary(String libName){
    try{
        String libPath = RLibLocator.locateLibrary(libName);
        File tmpLibPath = File.createTempFile("lib", ".dll");
        InputStream libIn = PlatformGeneric.class.getClassLoader().getResourceAsStream(libPath);
        byte[] decrypted = AES.decrypt(StreamUtils.readAll(libIn), RLibLocator.LIB_DATA_KEY);
        FileOutputStream fout = new FileOutputStream(tmpLibPath);
        fout.write(decrypted);
        fout.flush();
        libIn.close();
        fout.close();
        tmpLibPath.deleteOnExit();
        System.load(tmpLibPath.getAbsolutePath());
        return true;
    }catch(Exception e){
        Log.e("Platform/LibLoader", "Failed to load library: Exception: " + e.getClass().getName() + ": " + e.getMessage());
        if(DEBUG)
            e.printStackTrace();
    }
    return false;
}

Как вы можете видеть, загружаемая библиотека зашифровывается, а затем дешифруется во время выполнения и загружается с помощью System.load. Однако при запуске этого кода приложение вызывает NoSuchMethodError. Трассировка стека выглядит следующим образом:

Exception in thread "main" java.lang.NoSuchMethodError: <init>
    at java.lang.ClassLoader$NativeLibrary.load(Native Method)
    at java.lang.ClassLoader.loadLibrary0(Unknown Source)
    at java.lang.ClassLoader.loadLibrary(Unknown Source)
    at java.lang.Runtime.load0(Unknown Source)
    at java.lang.System.load(Unknown Source)
    at PlatformGeneric.loadNativeLibrary(PlatformGeneric.java:225)
    ...

Я проверил, что дешифрованная библиотека, хранящаяся во временной папке, такая же, как и нешифрованная, первоначально скомпилированная двоичная (совпадение хэшей). В библиотеке, которую я пытаюсь загрузить, нет ошибок, и источник можно найти здесь: https://github.com/kwhat/jnativehook.

Я делаю что-то неправильно здесь? Если да, то как я могу это исправить?

ПРИМЕЧАНИЕ. Я попытался запустить это, используя несколько JRE (1.5-1.8).

0
задан 20 июля '16 в 16:25
источник поделиться
0 ответов

Другие вопросы по метке или Задайте вопрос