美文网首页
ndk编译生成so

ndk编译生成so

作者: 浮云若飞 | 来源:发表于2017-11-04 15:53 被阅读0次

    ndk-build编译生成so库

    本文讲述使用Android 的ndk-build来编译生成so库,在命令行中编译。编译后的so库可以调用。
    环境问题略过,请自行百度或谷歌安装ndk。

    建立java文件

    新建文件夹/cn/scnu
    并在文件夹中创建java 文件:

    package cn.scnu;
    public class MainActivity{
        public native int num();
    }
    

    编译java文件

    javac cn/scnu/MainActivity.java -d build
    

    该命令会编译java文件并在build目录下生成,然后我们打开build目录

    cd build/
    

    javah生成头文件

    然后我们使用javah命令:

    javah cn.scnu.MainActivity // 注意这里是英文句号而不是/,简单的说就是javah+包名+类名
    

    然后会生成一个.h头文件,我们打开这个头文件看看:

    /* DO NOT EDIT THIS FILE - it is machine generated */
    #include <jni.h>
    /* Header for class cn_scnu_MainActivity */
    
    #ifndef _Included_cn_scnu_MainActivity
    #define _Included_cn_scnu_MainActivity
    #ifdef __cplusplus
    extern "C" {
    #endif
    /*
     * Class:     cn_scnu_MainActivity
     * Method:    num
     * Signature: ()I
     */
    JNIEXPORT jint JNICALL Java_cn_scnu_MainActivity_num
      (JNIEnv *, jobject);
    
    #ifdef __cplusplus
    }
    #endif
    #endif
    

    可以看到这里面只有一个函数,这个函数返回一个整形,和前面的java头文件对应。
    接下来我们另外创建一个Test文件夹,在Test文件夹下创建jni目录,然后将刚才生成的头文件拷贝进来。

    2017-11-04 15-44-11屏幕截图.png

    实现头文件

    然后我们创建JNITest.c文件,文件内容如图:

    #include "cn_scnu_MainActivity.h"
    
    JNIEXPORT jint JNICALL Java_cn_scnu_MainActivity_num
    (JNIEnv *env, jobject thiz){
        return 1024;
    }
    

    这个文件的主要内容就是调用头文件并实现头文件中的方法,我们返回了1024。

    编写Android.mk文件:

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

    LOCAL_MODULE 就是我们要生成的so,LOCAL_SRC_FILES就是编译的文件

    编写Application.mk文件:

    APP_ABI := armeabi,armeabi-v7a
    

    这里就表示我们要生成的so库的CPU架构。

    2017-11-04 15-50-20屏幕截图.png

    ndk-build

    使用命令行进入到Test目录下,即jni的根目录处,然后打命令:

    ndk-build
    
    2017-11-04 15-51-55屏幕截图.png

    结果如图,然后我们就可以在libs目录下发现生成的so库了。

    相关文章

      网友评论

          本文标题:ndk编译生成so

          本文链接:https://www.haomeiwen.com/subject/qinfmxtx.html