Гайд Java native (JNI) tutorial

Начинающий
Статус
Оффлайн
Регистрация
23 Июн 2022
Сообщения
44
Реакции[?]
2
Поинты[?]
1K

Перед прочтением основного контента ниже, пожалуйста, обратите внимание на обновление внутри секции Майна на нашем форуме. У нас появились:

  • бесплатные читы для Майнкрафт — любое использование на свой страх и риск;
  • маркетплейс Майнкрафт — абсолютно любая коммерция, связанная с игрой, за исключением продажи читов (аккаунты, предоставления услуг, поиск кодеров читов и так далее);
  • приватные читы для Minecraft — в этом разделе только платные хаки для игры, покупайте группу "Продавец" и выставляйте на продажу свой софт;
  • обсуждения и гайды — всё тот же раздел с вопросами, но теперь модернизированный: поиск нужных хаков, пати с игроками-читерами и другая полезная информация.

Спасибо!

Данная тема создана для тех кто не знал.
Не пишите комментарии типо: /del я это уже знал

Наверняка вы видели в папке natives такой файл lwjgl.dll. Это native библиотека написаная для игр (Почитать о ней вы можете здесь:
Пожалуйста, авторизуйтесь для просмотра ссылки.
). Так вот, вы можете создать свою библиотеку или защитить проект.

1. Создайте новый проект в вашей среде разработки.

2. Замените:

Java:
public static void main(String[] args) {}
на:

Java:
public static native void main(String[] args);
3. Зайдите в terminal (на windows это консоль) и пропишите данные команды:

cd директория до вашего проекта который вы создали
javac -h . Класс который хотите сделать нативным (эту команду напишите обязательно с точкой перед директорией)

4. После выполнения данных команд у вас в проекте появится файл с расширением .h с которым нужно выполнить данные процедуры:

Откройте его в любом редакторе (можно в блокноте) и скопируйте код похожий на этот: JNIEXPORT void JNICALL Java_native_Main_main(JNIEnv *, jclass, jobjectArray)
Создайте файл с таким же названием как и у .h но с расширением .cpp и вставьте тот код который вы скопировали
Сделайте такую структуру файла:

C++:
#include "вставьте название .h файла с расширением"
#include <iostream>

using namespace std;

// Замените заголовок на тот который скопировали ранее

JNIEXPORT void JNICALL Java_native_Main_main(JNIEnv *, jclass, jobjectArray) {
    cout << "Hello"
}
Обратите внимание на первую строку: #include "вставьте название .h файла с расширением".

5. Зайдите обратно в terminal/cmd и впишите команды:

g++ -c -I"C:\Program Files\Java\jdk-12.0.1\include" -I"C:\Program Files\Java\jdk-12.0.1\include\win32" native_Main.cpp -o native.o
g++ -shared -o native.dll native.o -Wl,--add-stdcall-alias
Убедитесь что у вас все пути правильны.

6. Добавьте в свой Main класс:

Java:
static {
   String filePath = null;

   if (System.getProperty("os.arch").contains("64")) {
      filePath = "/native/lib/native.dll";
   }

   if (filePath != null) {
      InputStream resourceFilePath = Main.class.getResourceAsStream(filePath);

      if (resourceFilePath != null) {
         File tempFile;
         try {
            tempFile = File.createTempFile("lib", null);
            tempFile.deleteOnExit();
            if (!tempFile.exists()) {
               throw new IOException();
            }
         } catch (IOException e) {
            throw new UnsatisfiedLinkError("Failed to create temp file");
         }
         byte[] buffer = new byte[2048];
         try (InputStream inputStream = resourceFilePath;
              FileOutputStream outputStream = new FileOutputStream(tempFile)) {
            int bytesRead;
            while ((bytesRead = inputStream.read(buffer)) != -1) {
               outputStream.write(buffer, 0, bytesRead);
            }
         } catch (IOException e) {
            throw new UnsatisfiedLinkError("Failed to copy file: " + e.getMessage());
         }
         System.load(tempFile.getAbsolutePath());
      }
   } else {
      System.out.println("Your system is not suitable.");
   }
}
7. Создайте директорию в своём проекте: /native/lib/ и переместите native.dll в этот путь.

Готово! Запускайте программу и радуйтесь.

P.S. Если что-то не получилось не пишите мне. Я вам смогу помочь только если у вас Mac.
 
Пользователь
Статус
Оффлайн
Регистрация
20 Дек 2022
Сообщения
197
Реакции[?]
65
Поинты[?]
43K
6. Добавьте в свой Main класс:

Java:
static {
   String filePath = null;

   if (System.getProperty("os.arch").contains("64")) {
      filePath = "/native/lib/native.dll";
   }

   if (filePath != null) {
      InputStream resourceFilePath = Main.class.getResourceAsStream(filePath);

      if (resourceFilePath != null) {
         File tempFile;
         try {
            tempFile = File.createTempFile("lib", null);
            tempFile.deleteOnExit();
            if (!tempFile.exists()) {
               throw new IOException();
            }
         } catch (IOException e) {
            throw new UnsatisfiedLinkError("Failed to create temp file");
         }
         byte[] buffer = new byte[2048];
         try (InputStream inputStream = resourceFilePath;
              FileOutputStream outputStream = new FileOutputStream(tempFile)) {
            int bytesRead;
            while ((bytesRead = inputStream.read(buffer)) != -1) {
               outputStream.write(buffer, 0, bytesRead);
            }
         } catch (IOException e) {
            throw new UnsatisfiedLinkError("Failed to copy file: " + e.getMessage());
         }
         System.load(tempFile.getAbsolutePath());
      }
   } else {
      System.out.println("Your system is not suitable.");
   }
}
это вообще пиздец, зачем делать так, если можно просто
example:
    static {
        loadNatives();
    }

    private static void loadNatives() {
        try {

            System.load("C:\\Folder\\Libraries\\n64.dll");

        }catch (UnsatisfiedLinkError exception) {
            exception.printStackTrace();
        }
    }
ну а так тема довольно таки очень маленькая
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
23 Июн 2022
Сообщения
44
Реакции[?]
2
Поинты[?]
1K
это вообще пиздец, зачем делать так, если можно просто
example:
    static {
        loadNatives();
    }

    private static void loadNatives() {
        try {

            System.load("C:\\Folder\\Libraries\\n64.dll");

        }catch (UnsatisfiedLinkError exception) {
            exception.printStackTrace();
        }
    }
ну а так тема довольно таки очень маленькая
Я делал под другой проект поэтому такой код
 
Пользователь
Статус
Оффлайн
Регистрация
20 Дек 2022
Сообщения
197
Реакции[?]
65
Поинты[?]
43K
эксперт в майнкрафт апи
Read Only
Статус
Оффлайн
Регистрация
25 Янв 2023
Сообщения
676
Реакции[?]
284
Поинты[?]
22K
Начинающий
Статус
Оффлайн
Регистрация
31 Авг 2022
Сообщения
368
Реакции[?]
4
Поинты[?]
7K
Начинающий
Статус
Оффлайн
Регистрация
23 Июн 2022
Сообщения
44
Реакции[?]
2
Поинты[?]
1K
ладно, отговорю неадекватов кто поверил что это спасет вашу целку :
не спасет.

та и гайд хуйня ес честн.
Против пастеров которые в своей жизни ничего не видели подходит. Да не спорю, взломать можно. Например просто подменить библиотеку. Но можно сделать проверку на действительность.

Вывод: смотря как защищать.
 
Пользователь
Статус
Оффлайн
Регистрация
20 Дек 2022
Сообщения
197
Реакции[?]
65
Поинты[?]
43K
Против пастеров которые в своей жизни ничего не видели подходит. Да не спорю, взломать можно. Например просто подменить библиотеку. Но можно сделать проверку на действительность.

Вывод: смотря как защищать.
ну если будешь верифать на джава сайде то F
 
Начинающий
Статус
Оффлайн
Регистрация
23 Июн 2022
Сообщения
44
Реакции[?]
2
Поинты[?]
1K
Пользователь
Статус
Оффлайн
Регистрация
20 Дек 2022
Сообщения
197
Реакции[?]
65
Поинты[?]
43K
Так сделает только не знающий или отбитый. Если проверку делать на стороне java то её можно убрать при помощи Recaf.
так твой нативный вызов з "защитой" тоже "можно убрать при помощи Recaf"
 
Начинающий
Статус
Оффлайн
Регистрация
21 Фев 2022
Сообщения
111
Реакции[?]
10
Поинты[?]
9K
так твой нативный вызов з "защитой" тоже "можно убрать при помощи Recaf"
Поэтому нативка не поможет если нативно не делаются вещи необходимые для непосредсвенной работы фигни
 
read only ambassador
Пользователь
Статус
Оффлайн
Регистрация
28 Июн 2022
Сообщения
629
Реакции[?]
110
Поинты[?]
14K
Данная тема создана для тех кто не знал.
Не пишите комментарии типо: /del я это уже знал

Наверняка вы видели в папке natives такой файл lwjgl.dll. Это native библиотека написаная для игр (Почитать о ней вы можете здесь:
Пожалуйста, авторизуйтесь для просмотра ссылки.
). Так вот, вы можете создать свою библиотеку или защитить проект.

1. Создайте новый проект в вашей среде разработки.

2. Замените:

Java:
public static void main(String[] args) {}
на:

Java:
public static native void main(String[] args);
3. Зайдите в terminal (на windows это консоль) и пропишите данные команды:

cd директория до вашего проекта который вы создали
javac -h . Класс который хотите сделать нативным (эту команду напишите обязательно с точкой перед директорией)

4. После выполнения данных команд у вас в проекте появится файл с расширением .h с которым нужно выполнить данные процедуры:

Откройте его в любом редакторе (можно в блокноте) и скопируйте код похожий на этот: JNIEXPORT void JNICALL Java_native_Main_main(JNIEnv *, jclass, jobjectArray)
Создайте файл с таким же названием как и у .h но с расширением .cpp и вставьте тот код который вы скопировали
Сделайте такую структуру файла:

C++:
#include "вставьте название .h файла с расширением"
#include <iostream>

using namespace std;

// Замените заголовок на тот который скопировали ранее

JNIEXPORT void JNICALL Java_native_Main_main(JNIEnv *, jclass, jobjectArray) {
    cout << "Hello"
}
Обратите внимание на первую строку: #include "вставьте название .h файла с расширением".

5. Зайдите обратно в terminal/cmd и впишите команды:

g++ -c -I"C:\Program Files\Java\jdk-12.0.1\include" -I"C:\Program Files\Java\jdk-12.0.1\include\win32" native_Main.cpp -o native.o
g++ -shared -o native.dll native.o -Wl,--add-stdcall-alias
Убедитесь что у вас все пути правильны.

6. Добавьте в свой Main класс:

Java:
static {
   String filePath = null;

   if (System.getProperty("os.arch").contains("64")) {
      filePath = "/native/lib/native.dll";
   }

   if (filePath != null) {
      InputStream resourceFilePath = Main.class.getResourceAsStream(filePath);

      if (resourceFilePath != null) {
         File tempFile;
         try {
            tempFile = File.createTempFile("lib", null);
            tempFile.deleteOnExit();
            if (!tempFile.exists()) {
               throw new IOException();
            }
         } catch (IOException e) {
            throw new UnsatisfiedLinkError("Failed to create temp file");
         }
         byte[] buffer = new byte[2048];
         try (InputStream inputStream = resourceFilePath;
              FileOutputStream outputStream = new FileOutputStream(tempFile)) {
            int bytesRead;
            while ((bytesRead = inputStream.read(buffer)) != -1) {
               outputStream.write(buffer, 0, bytesRead);
            }
         } catch (IOException e) {
            throw new UnsatisfiedLinkError("Failed to copy file: " + e.getMessage());
         }
         System.load(tempFile.getAbsolutePath());
      }
   } else {
      System.out.println("Your system is not suitable.");
   }
}
7. Создайте директорию в своём проекте: /native/lib/ и переместите native.dll в этот путь.

Готово! Запускайте программу и радуйтесь.

P.S. Если что-то не получилось не пишите мне. Я вам смогу помочь только если у вас Mac.
а зачем)
 
Забаненный
Статус
Оффлайн
Регистрация
28 Дек 2022
Сообщения
66
Реакции[?]
6
Поинты[?]
3K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Данная тема создана для тех кто не знал.
Не пишите комментарии типо: /del я это уже знал

Наверняка вы видели в папке natives такой файл lwjgl.dll. Это native библиотека написаная для игр (Почитать о ней вы можете здесь:
Пожалуйста, авторизуйтесь для просмотра ссылки.
). Так вот, вы можете создать свою библиотеку или защитить проект.

1. Создайте новый проект в вашей среде разработки.

2. Замените:

Java:
public static void main(String[] args) {}
на:

Java:
public static native void main(String[] args);
3. Зайдите в terminal (на windows это консоль) и пропишите данные команды:

cd директория до вашего проекта который вы создали
javac -h . Класс который хотите сделать нативным (эту команду напишите обязательно с точкой перед директорией)

4. После выполнения данных команд у вас в проекте появится файл с расширением .h с которым нужно выполнить данные процедуры:

Откройте его в любом редакторе (можно в блокноте) и скопируйте код похожий на этот: JNIEXPORT void JNICALL Java_native_Main_main(JNIEnv *, jclass, jobjectArray)
Создайте файл с таким же названием как и у .h но с расширением .cpp и вставьте тот код который вы скопировали
Сделайте такую структуру файла:

C++:
#include "вставьте название .h файла с расширением"
#include <iostream>

using namespace std;

// Замените заголовок на тот который скопировали ранее

JNIEXPORT void JNICALL Java_native_Main_main(JNIEnv *, jclass, jobjectArray) {
    cout << "Hello"
}
Обратите внимание на первую строку: #include "вставьте название .h файла с расширением".

5. Зайдите обратно в terminal/cmd и впишите команды:

g++ -c -I"C:\Program Files\Java\jdk-12.0.1\include" -I"C:\Program Files\Java\jdk-12.0.1\include\win32" native_Main.cpp -o native.o
g++ -shared -o native.dll native.o -Wl,--add-stdcall-alias
Убедитесь что у вас все пути правильны.

6. Добавьте в свой Main класс:

Java:
static {
   String filePath = null;

   if (System.getProperty("os.arch").contains("64")) {
      filePath = "/native/lib/native.dll";
   }

   if (filePath != null) {
      InputStream resourceFilePath = Main.class.getResourceAsStream(filePath);

      if (resourceFilePath != null) {
         File tempFile;
         try {
            tempFile = File.createTempFile("lib", null);
            tempFile.deleteOnExit();
            if (!tempFile.exists()) {
               throw new IOException();
            }
         } catch (IOException e) {
            throw new UnsatisfiedLinkError("Failed to create temp file");
         }
         byte[] buffer = new byte[2048];
         try (InputStream inputStream = resourceFilePath;
              FileOutputStream outputStream = new FileOutputStream(tempFile)) {
            int bytesRead;
            while ((bytesRead = inputStream.read(buffer)) != -1) {
               outputStream.write(buffer, 0, bytesRead);
            }
         } catch (IOException e) {
            throw new UnsatisfiedLinkError("Failed to copy file: " + e.getMessage());
         }
         System.load(tempFile.getAbsolutePath());
      }
   } else {
      System.out.println("Your system is not suitable.");
   }
}
7. Создайте директорию в своём проекте: /native/lib/ и переместите native.dll в этот путь.

Готово! Запускайте программу и радуйтесь.

P.S. Если что-то не получилось не пишите мне. Я вам смогу помочь только если у вас Mac.
ну не поможет это ваще никому бля))
 
Начинающий
Статус
Оффлайн
Регистрация
25 Май 2023
Сообщения
6
Реакции[?]
0
Поинты[?]
0
Данная тема создана для тех кто не знал.
Не пишите комментарии типо: /del я это уже знал

Наверняка вы видели в папке natives такой файл lwjgl.dll. Это native библиотека написаная для игр (Почитать о ней вы можете здесь:
Пожалуйста, авторизуйтесь для просмотра ссылки.
). Так вот, вы можете создать свою библиотеку или защитить проект.

1. Создайте новый проект в вашей среде разработки.

2. Замените:

Java:
public static void main(String[] args) {}
на:

Java:
public static native void main(String[] args);
3. Зайдите в terminal (на windows это консоль) и пропишите данные команды:

cd директория до вашего проекта который вы создали
javac -h . Класс который хотите сделать нативным (эту команду напишите обязательно с точкой перед директорией)

4. После выполнения данных команд у вас в проекте появится файл с расширением .h с которым нужно выполнить данные процедуры:

Откройте его в любом редакторе (можно в блокноте) и скопируйте код похожий на этот: JNIEXPORT void JNICALL Java_native_Main_main(JNIEnv *, jclass, jobjectArray)
Создайте файл с таким же названием как и у .h но с расширением .cpp и вставьте тот код который вы скопировали
Сделайте такую структуру файла:

C++:
#include "вставьте название .h файла с расширением"
#include <iostream>

using namespace std;

// Замените заголовок на тот который скопировали ранее

JNIEXPORT void JNICALL Java_native_Main_main(JNIEnv *, jclass, jobjectArray) {
    cout << "Hello"
}
Обратите внимание на первую строку: #include "вставьте название .h файла с расширением".

5. Зайдите обратно в terminal/cmd и впишите команды:

g++ -c -I"C:\Program Files\Java\jdk-12.0.1\include" -I"C:\Program Files\Java\jdk-12.0.1\include\win32" native_Main.cpp -o native.o
g++ -shared -o native.dll native.o -Wl,--add-stdcall-alias
Убедитесь что у вас все пути правильны.

6. Добавьте в свой Main класс:

Java:
static {
   String filePath = null;

   if (System.getProperty("os.arch").contains("64")) {
      filePath = "/native/lib/native.dll";
   }

   if (filePath != null) {
      InputStream resourceFilePath = Main.class.getResourceAsStream(filePath);

      if (resourceFilePath != null) {
         File tempFile;
         try {
            tempFile = File.createTempFile("lib", null);
            tempFile.deleteOnExit();
            if (!tempFile.exists()) {
               throw new IOException();
            }
         } catch (IOException e) {
            throw new UnsatisfiedLinkError("Failed to create temp file");
         }
         byte[] buffer = new byte[2048];
         try (InputStream inputStream = resourceFilePath;
              FileOutputStream outputStream = new FileOutputStream(tempFile)) {
            int bytesRead;
            while ((bytesRead = inputStream.read(buffer)) != -1) {
               outputStream.write(buffer, 0, bytesRead);
            }
         } catch (IOException e) {
            throw new UnsatisfiedLinkError("Failed to copy file: " + e.getMessage());
         }
         System.load(tempFile.getAbsolutePath());
      }
   } else {
      System.out.println("Your system is not suitable.");
   }
}
7. Создайте директорию в своём проекте: /native/lib/ и переместите native.dll в этот путь.

Готово! Запускайте программу и радуйтесь.

P.S. Если что-то не получилось не пишите мне. Я вам смогу помочь только если у вас Mac.
Друг, данная нативка никак не поможет, но только если ты ее немного перепишешь и во первых сделаешь следующее

Чтобы можно было делать не один класс нативным, а несколько или сразу весь проект (это очень легко сделать)
 
эксперт в майнкрафт апи
Read Only
Статус
Оффлайн
Регистрация
25 Янв 2023
Сообщения
676
Реакции[?]
284
Поинты[?]
22K
Друг, данная нативка никак не поможет, но только если ты ее немного перепишешь и во первых сделаешь следующее

Чтобы можно было делать не один класс нативным, а несколько или сразу весь проект (это очень легко сделать)
привет =) че ты хуйню несешь? =(
 
Пользователь
Статус
Оффлайн
Регистрация
16 Мар 2021
Сообщения
376
Реакции[?]
78
Поинты[?]
11K
Запуск jni через джаву, что за бесполезная херь?
 
Начинающий
Статус
Оффлайн
Регистрация
8 Мар 2019
Сообщения
39
Реакции[?]
16
Поинты[?]
3K
А какой смысл ? Это же первая ссылка в гугле на хабр в котором все намного лучше описано
Screenshot_1.png
 
Начинающий
Статус
Оффлайн
Регистрация
24 Авг 2022
Сообщения
308
Реакции[?]
2
Поинты[?]
2K
read only ambassador
Пользователь
Статус
Оффлайн
Регистрация
28 Июн 2022
Сообщения
629
Реакции[?]
110
Поинты[?]
14K
Друг, данная нативка никак не поможет, но только если ты ее немного перепишешь и во первых сделаешь следующее

Чтобы можно было делать не один класс нативным, а несколько или сразу весь проект (это очень легко сделать)
минус оптимизация)
 
Сверху Снизу