android ndk 编程总结
1.首先,as需要安装ndk,如图所示
image.png2.下一步,在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文件夹(当前在
-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
更多相关文章
- Android制作update.zip
- Android(安卓)xml文件 SAX
- Android开发入门经典资料下载
- 解决:Error: Could not find gradle wrapper within android sdk.
- 转:Android(安卓)学习笔记 1
- Android(安卓)source build/envsetup.sh学习笔记
- *Android(安卓)多线程下载 仿下载助手(改进版)
- cocos2d-x 3.0rc2中读取sqlite文件
- android通过http上传文件(图片)