1.创建个新项目
2.新建个类
public class AddNum {
static
{
try {
System.loadLibrary("AddNum");
} catch (Exception e) {
}
}
public native int numAdd(int num1, int num2);
}
3.然后在cmd 下进入该类的同级目录运行javac AddNum.java 生成.class 文件
4.在项目的java目录下运行javah 包名.类名 生成一个.h文件
/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class com_yyf_test_test01_AddNum */ #ifndef _Included_com_yyf_test_test01_AddNum #define _Included_com_yyf_test_test01_AddNum #ifdef __cplusplus extern "C" { #endif /* * Class: com_yyf_test_test01_AddNum * Method: numAdd * Signature: (II)I */ JNIEXPORT jint JNICALL Java_com_yyf_test_test01_AddNum_numAdd (JNIEnv *, jobject, jint, jint); #ifdef __cplusplus } #endif #endif
5.新建一个jni文件夹,然后在新建一个.cpp 文件 将.h 文件中的内容copy 过去放入jni目录下,修改其方法 如下
/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class com_yyf_test_test01_AddNum */ #ifndef _Included_com_yyf_test_test01_AddNum #define _Included_com_yyf_test_test01_AddNum #ifdef __cplusplus extern "C" { #endif /* * Class: com_yyf_test_test01_AddNum * Method: numAdd * Signature: (II)I */ JNIEXPORT jint JNICALL Java_com_yyf_test_test01_AddNum_numAdd (JNIEnv * env, jobject obj, jint num1, jint num2){ return num1+num2; } #ifdef __cplusplus } #endif #endif
6.编写android.mk 文件,将它放入jni下
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) #编译生成的文件的类库叫什么名字 LOCAL_MODULE := AddNum #要编译的c文件 LOCAL_SRC_FILES := add.cpp include $(BUILD_SHARED_LIBRARY)
7.在build.gradle 中指定编译文件位置
externalNativeBuild { ndkBuild { path 'src/main/jni/Android.mk' } }
8.build 项目会发现生成了一个.externalNativeBuild文件夹,so 文件就在里面
9.在mainActivity中调用
public class MainActivity extends AppCompatActivity { private AddNum addNum; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); addNum = new AddNum(); int num = addNum.numAdd(2, 3); Toast.makeText(this, num + "", Toast.LENGTH_SHORT).show(); } }
10,运行,ok 大功告成.