1、配置添加ndk,然后配置一下环境变量
![](https://i-blog.csdnimg.cn/blog_migrate/71710de41b3b707e66292e11e5ce0a9a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/6b63f8b6c877a353bc1d8f78e8e9c6ce.png)
2、配置build.gradle,在defaultConfig中添加
//配置ndk信息
ndk{
moduleName
"JniTest"
abiFilters
"armeabi"
,
"armeabi-v7a"
,
"x86"
}
//配置so文件存放位置
sourceSets.
main
{
jni.srcDirs = []
jniLibs.srcDir
'src/main/libs'
}
3、main下面添加jni文件
![](https://i-blog.csdnimg.cn/blog_migrate/726fd41045329d824c547e82944ae108.png)
配置Application.mk文件:APP_ABP是指要添加那些,现在全部添加
APP_CFLAGS += -Wno-error=format-security
APP_ABI := armeabi arm64-v8a armeabi-v7a mips mips64 x86 x86_64
配置Android.mk:LOCAL_MODULE的名字要跟代码里写的一样
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := JniTest
LOCAL_SRC_FILES := main.c
include $(BUILD_SHARED_LIBRARY)
写main.c
#include
"com_example_a550211_myapplication_MainActivity.h"
JNIEXPORT jstring JNICALL Java_com_example_a550211_myapplication_MainActivity_getStringFromNative (JNIEnv * env
,
jobject obj){
return
(*env)->NewStringUTF(env
,
"ffffffff"
)
;
}
com_example_a550211_myapplication_MainActivity.h 这里的名字需要跟包名一样,然后加上在哪个activity用
#include
<jni.h>
#ifndef
_Included_com_example_a550211_myapplication_MainActivity
#define
_Included_com_example_a550211_myapplication_MainActivity
#ifdef
_cplusplus
extern
"C"
{
#endif
/*com.example.a550211.myapplication
* Class: com_example_jnic_MainActivity
* Method: getStringFromNative
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL java_com_example_a550211_myapplication_MainActivity_getStringFromNative (JNIEnv * env
,
jobject* obj){
return
(*env)->NewStringUTF(env
,
"fffffff!"
)
;
}
#ifdef
__cplusplus
}
#endif
#endif
java_com_example_a550211_myapplication_MainActivity_getStringFromNative ,包名+activity+方法名
还需要注意的是如果这里的内容修改了,一定要重新生成libs文件否则不会生效
4、so包生成,先进到main目录下,然后执行ndk-build命令就可以更新或者自动生成了
![](https://i-blog.csdnimg.cn/blog_migrate/beb1e9f0d78b9bc1f9d19f625f1e0c32.png)
5、代码中调用,然后就可以实现了
public class
MainActivity
extends
AppCompatActivity {
static
{
System.
loadLibrary
(
"JniTest"
)
;
}
public native
String
getStringFromNative
()
;
private
EditText
etTest
;
@Override
protected void
onCreate
(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState)
;
setContentView(R.layout.
activity_main
)
;
initView()
;
Log.
e
(
"nsc"
,
"getStringFromNative()="
+getStringFromNative())
;
}
![](https://i-blog.csdnimg.cn/blog_migrate/8276a879982697f1b991f4e47091ef30.png)