Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

java和c++交互,调用c++提供的native方法,java使用javah生成头文件,c++实现方法供java调用。 后期会使用该方法提供class文件加解密,java可以使用java -agentlib或-agentpath启动jar包时加载动态库 用于解密jar包中的class文件。

Notifications You must be signed in to change notification settings

hjsw1/MyNativeJava

Open more actions menu
 
 

Repository files navigation

简介

java和c++交互,调用c++提供的native方法,java使用javah生成头文件,c++实现方法供java调用。配合工程MyNativeCpp配套使用。 后期会使用该方法提供class文件加解密,java可以使用java -agentlib或-agentpath启动jar包时加载动态库 用于解密jar包中的class文件。使用以下两个命令(例子)。

  • java -Djava.library.path=./encrypt/ -cp . Encrypt -src Test.jar -dst Test_encrypt.jar
    • Encrypt是加密程序
    • -src Test.jar -dst Test_encrypt.jar 是其参数,用于加密Test.jar文件,生成Test_encrypt.jar

使用环境

  • 环境 win7 64位系统
  • java: IDEA 2018.1 + jdk1.8
  • c++ : CLion 2018.2 + mingw-w64
  • 依赖库及文件
    • %JAVA_HOME%\lib\jvm.lib
    • %JAVA_HOME%\include\jni.h
    • %JAVA_HOME%\include\win32\jni_md.h

模块

  • jni概述
  • native接口文件
  • 动态库提供本地方法
  • java使用本地方法

jni概述

待补充

参考

native接口文件

include目录下javah生成的接口文件,使用如下命令

动态库提供本地方法

CLion生成动态库,jdk是64位,原本使用的Mingw是32位程序,生成的dll在64位java程序中不能使用, 又下载了mingw64,配置使CLion使用64位mingw,CLion使用CMake编译程序。 动态库部分请参见本地方法库

java使用本地方法

静态块加载dll

public class MyNativeJava {
    static {
        System.loadLibrary("libMyNativeJava");
    }
}

加载成功就可以使用native方法了,fun,fun2,fun3是测试用的几个方法,后续会加入更多内容,比如类成员修改,类方法执行等。 详情参见MyNativeJava.java

public class MyNativeJava {
    static {
        System.loadLibrary("libMyNativeJava");
    }

    private native void fun();
    private native int fun2(String s);
    private native void fun3(Integer[] ia);

    public static void main(String[] args) {
        MyNativeJava nativeHello = new MyNativeJava();
        nativeHello.fun();
        System.out.println(nativeHello.fun2("hello, tom"));
        nativeHello.fun3(new Integer[]{3, 5});
    }
}

About

java和c++交互,调用c++提供的native方法,java使用javah生成头文件,c++实现方法供java调用。 后期会使用该方法提供class文件加解密,java可以使用java -agentlib或-agentpath启动jar包时加载动态库 用于解密jar包中的class文件。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 100.0%
Morty Proxy This is a proxified and sanitized view of the page, visit original site.