android用jni调c/c++(包含eclipse和as)

android用jni调c/c++(包含eclipse和as)

android调c/c++:

1.下载ndk。打开Studio   File>Project Structure>SDK Location

然后在Android NDKlocation里面填写sdk路径例:D:\study\androidStudioSDK\ndk-bundle

注意点:ndk路径最好不要太长,要是太长可能会报错。后期使用时如果碰到问题可以尝试删除ndk重新安装(我碰过这种问题大坑)

2. Windows7 64bit 配置NDK环境: https://blog.csdn.net/cadi2011/article/details/50327591

3.打开项目目录找到gradle>gradle-wrapper.properties然后在最后面加上一句android.useDeprecatedNdk=true

4.打开项目目录打开build.gradle  在defaultConfig{}里面添加

ndk {

moduleName "hello"//生成so包名称
    abiFilters "armeabi"
}

 

5.选择工具栏里的View>Tool Windows>Terminal 然后再命令框里打入cd app\src\main\java 按回车然后打入javah -jni com.jni.jnitext5.Mainactivity之后会在app\src\main\java目录下生成.h文件。然后在app目录下创建jni文件夹把.h文件放入jni文件里面并在里面创建Android.mk  Application.mk  和一个.c文件(现在jni里面有四个文件)

 

 

 

Android.mk文件里面写

LOCAL_PATH:=$(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE:=hello
LOCAL_SRC_FILES:=gps.cpp
LOCAL_SHORT_COMMANDS:=true
include $(BUILD_SHARED_LIBRARY)

 

Application里面写:

APP_CFLAGS +=-Wno-error=format-security
APP_ABI := arm64-v8a armeabi-v7a x86 x86_64 armeabi
APP_SHORT_COMMANDS := true

 

 

 

.h文件里面写

 

/* DO NOT EDIT THIS FILE - it ismachine generated */
#include <jni.h>
/* Header for class com_jni_jnitext3_MainActivity */

#ifndef _Included_com_jni_jnitext5_MainActivity
#define _Included_com_jni_jnitext5_MainActivity
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_jni_jnitext3_MainActivity
 * Method:    add
 * Signature: (II)I
 */
JNIEXPORT jint JNICALL Java_com_jni_jnitext5_MainActivity_add
  (JNIEnv *, jobject, jint, jint);

#ifdef __cplusplus
}
#endif
#endif

 

 

.c文件里面写

/* DONOT EDIT THIS FILE - it is machine generated */ 
#include <jni.h> 
#include <android/log.h> 
 
#ifndef LOG_TAG 
#define LOG_TAG "ANDROID_LAB" 
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__) 
#endif 
/* Header for class lab_sodino_jnitest_MainActivity */ 
#ifndef _Included_com_jni_jnitext5_MainActivity
#define _Included_com_jni_jnitext5_MainActivity
#ifdef __cplusplus 
extern "C" { 
#endif 
/*
 * Class: lab_sodino_jnitest_MainActivity
 * Method: getStringFromNative
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jint JNICALL Java_com_jni_jnitext5_MainActivity_add
        (JNIEnv * env, jobject jObj,int a,intb){
    // LOGE("log string");
    return a+b;
}
#ifdef __cplusplus

#endif 
#endif

 

然后在MainActivity里面写入


这里的hello表示要加载的so库要和build.gradle里面ndk{}里面moduleName后面的名字一样。

调用c的方法是:在java代码里面写int a = add(2,3);

 

6.最后一步是生成so库,在命令框内回退到app目录下,然后输ndk-build得到

然后你会在app目录的libs下面看到so包,这个时候这些so包是不能用的还需在build.gradle里面添加

sourceSets{
    main{
        jniLibs.srcDirs = ['libs']
    }
}

最后就可以运行程序了。

注意点:当你输入ndk-build的时候如果没有达到我上面的效果别着急,先看看出现了什么,有时候是你ndk路径不对,有时候是你studio版本太高等等,百度也有很多。如果实在不行可以重装ndk,或者私聊我。

 

第二次写博客可能写的不详细请各位见谅。欢迎各位有问题私聊和建议。eclipse的私聊我qq1185719419。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值