JNI基础,Android调用C方法

2019-04-25  本文已影响0人  刀放下好好说话

1. 编写native方法

    public class Hello {
        public static native String sayHi();
    }

系统会告知没有找到这个JNI方法,利用javah命令行生成这个c的头文件。

2. 进入目录app/src/main/java,执行javah -d ../jni com.rjp.fastframework.Hello

会在main下生成jni目录,同时生成com_rjp_fastframework_Hello.h文件。

3. 创建hello.c文件,编写c逻辑

从 .h 文件拷贝方法结构体,完成 c 逻辑。

4. 添加Android.mk和Application.mk文件

    LOCAL_PATH := $(call my-dir)
    
    include $(CLEAR_VARS)
    
    LOCAL_MODULE    := hello
    
    LOCAL_SRC_FILES := hello.c
    
    include $(BUILD_SHARED_LIBRARY)

Application.mk指定生成的so包类型

    APP_ABI := all

5. 配置gradle文件

    defaultConfig{
        ndk{
                moduleName "hello"
                abiFilters "armeabi", "armeabi-v7a" //没有起作用
           }
    }
    
    sourceSets{
        main{
            jni.srcDirs = [] 
            jniLibs.srcDir 'src/main/libs'
        }
    }

6. 进入jni目录,执行命令ndk-build

完成之后可以看到生成的so包了。使用静态代码块加载so包就可以调用c的方法了。

    static {
        System.loadLibrary("hello");
    }
上一篇下一篇

猜你喜欢

热点阅读