美文网首页
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

    ndk-build编译生成so库 本文讲述使用Android 的ndk-build来编译生成so库,在命令行中编译...

  • 快速上手ndk开发! Mac/Win下配置和使用!(2018.4

    目录 前言ndk环境配置下载ndk配置ndk路径配置ndk环境路径ndk上手实现c函数, 并编译生成.so其他项目...

  • Android JNI与NDK学习(二)

    实战演练 在我们实战JNI与NDK时,有两种方式在编译.so文件 (1)一种是编译生成 .h头文件 编...

  • Android Studio 使用so

    在Android Studio 开发so(ndk-build编译so)https://www.jianshu.co...

  • 关于cmake

    项目需要看了下 cmake编译so 相比ndk-build配置更明了 但貌似无法生成静态库(.a) 以下是比较好的...

  • Cmake简介

    cmake 简而言之,cmake是Android Ndk开发过程中用到的C/C++编译工具,用来生成动态库(.so...

  • Android Studio下编译LatinIME so库CMa

    继上次Android Studio下编译LatinIME so库NDK版,这次简单记录一下使用CMake编译的so...

  • NDK

    编译so文件 在jni文件路径下面,输入ndk-build。

  • Android NDK生成共享库和静态库

    Android NDK生成共享库和静态库 在Android平台上,通过NDK可以编译NativeC程序,生成原生的...

  • Android Studio NDK开发

    概述 在Eclipse的时代,我们进行NDK的开发一般需要通过手动执行NDK脚 本生成*.so文件,再将.so文件...

网友评论

      本文标题:ndk编译生成so

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