Skip to content

Commit 7e246ff

Browse files
committed
第一版,完成native方法调用,后续使功能更丰富。
1 parent 2806899 commit 7e246ff

File tree

14 files changed

+221
-2
lines changed

14 files changed

+221
-2
lines changed

.idea/MyNativeJava.iml

Lines changed: 15 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/artifacts/MyNativeJava_jar.xml

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/compiler.xml

Lines changed: 16 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/misc.xml

Lines changed: 14 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/modules.xml

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/vcs.xml

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

README.md

Lines changed: 70 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,70 @@
1-
# MyNativeJava
2-
java和c++交互,调用c++提供的native方法,java使用javah生成头文件,c++实现方法供java调用。 后期会使用该方法提供class文件加解密,java可以使用java -agentlib或-agentpath启动jar包时加载动态库 用于解密jar包中的class文件。
1+
## 简介
2+
> java和c++交互,调用c++提供的native方法,java使用javah生成头文件,c++实现方法供java调用。配合工程[MyNativeCpp](https://github.com/feifa168/MyNativeCpp)配套使用。
3+
后期会使用该方法提供class文件加解密,java可以使用java -agentlib或-agentpath启动jar包时加载动态库
4+
用于解密jar包中的class文件。使用以下两个命令(例子)。
5+
* **java -Djava.library.path=./encrypt/ -cp .** Encrypt -src Test.jar -dst Test_encrypt.jar
6+
* Encrypt是加密程序
7+
* -src Test.jar -dst Test_encrypt.jar 是其参数,用于加密Test.jar文件,生成Test_encrypt.jar
8+
9+
>使用环境
10+
* 环境 win7 64位系统
11+
* java: IDEA 2018.1 + jdk1.8
12+
* c++ : CLion 2018.2 + mingw-w64
13+
* 依赖库及文件
14+
* **jvm.lib** %JAVA_HOME%\lib
15+
* **jni.h jni_md.h** %JAVA_HOME%\include;%JAVA_HOME%\include\win32;
16+
17+
## 模块
18+
* jni概述
19+
* native接口文件
20+
* 动态库提供本地方法
21+
* java使用本地方法
22+
23+
### jni概述
24+
>待补充
25+
26+
### native接口文件
27+
>include目录下javah生成的接口文件,使用如下命令
28+
* 方法1
29+
* javac -h include com\ft\mynative\MyNativeJava.java
30+
* 方法2
31+
* javac com\ft\mynative\MyNativeJava.java 详情参见[MyNativeJava.java](https://github.com/feifa168/MyNativeJava/src/main/java/com/ft/mynative/MyNativeJava.java)
32+
* javah MyNativeJava
33+
详情参见 [com_ft_mynative_MyNativeJava.h](https://github.com/feifa168/MyNativeJava/src/main/java/include/com_ft_mynative_MyNativeJava.h)提供测试函数
34+
35+
36+
### 动态库提供本地方法
37+
>CLion生成动态库,jdk是64位,原本使用的Mingw是32位程序,生成的dll在64位java程序中不能使用,
38+
又下载了mingw64,配置使CLion使用64位mingw,CLion使用CMake编译程序。
39+
动态库部分请参见[本地方法库](https://github.com/feifa168/MyNativeCpp/README.md)
40+
41+
### java使用本地方法
42+
>静态块加载dll
43+
```java
44+
public class MyNativeJava {
45+
static {
46+
System.loadLibrary("libMyNativeJava");
47+
}
48+
}
49+
```
50+
>加载成功就可以使用native方法了,fun,fun2,fun3是测试用的几个方法,后续会加入更多内容,比如类成员修改,类方法执行等。
51+
详情参见[MyNativeJava.java](https://github.com/feifa168/MyNativeJava/src/main/java/com/ft/mynative/MyNativeJava.java)
52+
```java
53+
public class MyNativeJava {
54+
static {
55+
System.loadLibrary("libMyNativeJava");
56+
}
57+
58+
private native void fun();
59+
private native int fun2(String s);
60+
private native void fun3(Integer[] ia);
61+
62+
public static void main(String[] args) {
63+
MyNativeJava nativeHello = new MyNativeJava();
64+
nativeHello.fun();
65+
System.out.println(nativeHello.fun2("hello, tom"));
66+
nativeHello.fun3(new Integer[]{3, 5});
67+
}
68+
}
69+
```
70+

libMyNativeJava.dll

114 KB
Binary file not shown.
1.29 KB
Binary file not shown.
114 KB
Binary file not shown.

0 commit comments

Comments
 (0)