1、配置添加ndk,然后配置一下环境变量
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文件
配置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命令就可以更新或者自动生成了
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());
}