1、配置添加ndk,然后配置一下环境变量
android jni使用

android jni使用

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文件
android 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 * envjobject 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 * envjobject* obj){
 return (*env)->NewStringUTF(env,"fffffff!");
}
#ifdef __cplusplus
}
#endif
#endif
java_com_example_a550211_myapplication_MainActivity_getStringFromNative ,包名+activity+方法名
还需要注意的是如果这里的内容修改了,一定要重新生成libs文件否则不会生效

4、so包生成,先进到main目录下,然后执行ndk-build命令就可以更新或者自动生成了

android jni使用

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());
    }

android jni使用




相关文章: