1.首先,as需要安装ndk,如图所示

image.png

2.下一步,在src/main 目录下创建jni文件夹

3.在项目的build.gradle中添加如下代码

···
android {
defaultConfig {
ndk{
moduleName "YanboberJniLibName" //生成的so名字
abiFilters "armeabi", "armeabi-v7a", "x86" //输出指定三种abi体系结构下的so库。目前可有可无。
}
}
sourceSets {
main {
jni.srcDirs = []
jniLibs.srcDirs = ['libs'] // <-- 你的.so库的实际路径
}
}
}
···
4.创建jni方法声明类,例如
···
package io.github.yanbober.ndkapplication;
public class NdkJniUtils {
public native String getCLanguageString();

static {    System.loadLibrary("YanboberJniLibName");   //defaultConfig.ndk.moduleName}

}
···
5.执行javah生成.h文件

执行javah的正确姿势:
进入app/src/main目录:cd app/src/main
执行javah命令:javah

javah -d jni -classpath ./Java io.github.yanbober.ndkapplication

-d jni 头文件生成到jni文件夹(当前在\app\src\main目录下,所以.h所在的目录为\app\src\main\jni )
-classpath ./java 指定去当前路径下java下寻找包名指定的类

6.编写对应的C文件,文件名任意取。C文件和前面生成的.h文件有较强的联系,这里给出一个示例:
jnitest.c
···

include "io_github_yanbober_ndkapplication_NdkJniUtils.h"

/*

  • Class: io_github_yanbober_ndkapplication_NdkJniUtils
  • Method: getCLanguageString
  • Signature: ()Ljava/lang/String;
    */
    JNIEXPORT jstring JNICALL Java_io_github_yanbober_ndkapplication_NdkJniUtils_getCLanguageString
    (JNIEnv env, jobject obj){
    return (
    env)->NewStringUTF(env,"This just a test for Android Studio NDK JNI developer!");
    }
    ···

io_github_yanbober_ndkapplication_NdkJniUtils.h

···
/* DO NOT EDIT THIS FILE - it is machine generated */

include

/* Header for class io_github_yanbober_ndkapplication_NdkJniUtils */

ifndef _Included_io_github_yanbober_ndkapplication_NdkJniUtils

define _Included_io_github_yanbober_ndkapplication_NdkJniUtils

ifdef __cplusplus

extern "C" {

endif

/*

  • Class: io_github_yanbober_ndkapplication_NdkJniUtils
  • Method: getCLanguageString
  • Signature: ()Ljava/lang/String;
    */
    JNIEXPORT jstring JNICALL Java_io_github_yanbober_ndkapplication_NdkJniUtils_getCLanguageString
    (JNIEnv *, jobject);

ifdef __cplusplus

}

endif

endif

···

7.编写Amdroid.mk文件,这里给出示例
···
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := YanboberJniLibName
LOCAL_SRC_FILES := jnitest.c
include $(BUILD_SHARED_LIBRARY)
···
其中
LOCAL_MODULE表示模块名称
LOCAL_SRC_FILES表示需要参与编译的源文件
除了这两个,其他照搬即可
8.编写Application.mk文件,这里给出示例
···
APP_ABI := armeabi
···
用作配置要编译的CPU架构平台的类型
9.将.h 、.c 、Android.mk、Application.mk文件都放入jni文件夹中
10.生成so文件
在jni的上一级目录,使用命令

ndk-build
即可在main目录下生成libs文件夹包含so文件,将其移动到app/libs目录下即可

最后附上原文链接
http://blog.csdn.net/qq_26819733/article/details/69061664

更多相关文章

  1. Android制作update.zip
  2. Android(安卓)xml文件 SAX
  3. Android开发入门经典资料下载
  4. 解决:Error: Could not find gradle wrapper within android sdk.
  5. 转:Android(安卓)学习笔记 1
  6. Android(安卓)source build/envsetup.sh学习笔记
  7. *Android(安卓)多线程下载 仿下载助手(改进版)
  8. cocos2d-x 3.0rc2中读取sqlite文件
  9. android通过http上传文件(图片)

随机推荐

  1. 在AMD64 位ubuntu8上android source code
  2. apt-get -f install 修复失败!
  3. Android(安卓)如何解析Xml字符串
  4. Android原生上下滚动控件ViewFlipper的点
  5. 使用ViewServer让Android真机可用Hierarc
  6. Android之浅谈activity生命周期
  7. android保存文件到sd卡,读取和清空记录功
  8. Android,跳过开机向导 SetupWizard
  9. Android开发教程:手机震动控制浅析
  10. Android部分功能模块实现