Android Studio 最简单的NDK环境搭建和JNi调用

首先下载好ndk开发工具包,我的版本是android-ndk-r10b,没有的话请先下载好了解压到一个不含中文的文件下(别问为什么不能放中文的文件夹下),[点击这里下载ndk]
NDK r10链接: https://pan.baidu.com/s/1i4RamBb 密码: vphj

  1. 创建你的android studio 项目
  2. 开始配置你的ndk环境 ——>首先右键你的项目查看“open module Settings”进去可以看到Android NDK Loaction 记住改路径是到这里写图片描述点击ok
  3. 在配置gradle.properities这里写图片描述
  4. 接着配置改module的build.gradle这里写图片描述其中红色的代表是你要生成的.so文件的名称,蓝色的是在c/c++代码中要用的工具类,不用管 ndk {
    moduleName “hello-jni”
    ldLibs “log”
    }`

  5. 在你的java文件夹下开始编写要调用c的类或者直接到Activity里面编写,我这里直接写了一个类来调用nativte的方法`package com.sino.jnifrom;

/**
- Created by Administrator on 2016/10/18.
*/
public class JNiUtils {
static {
System.loadLibrary(“hello-jni”);
}

public static native String getStringFromJNi();

}
`

   这个是我自己写的一个类,很简单的一个调用,这里不详细说。
  • 现在开始生成c的头文件,这里介绍俩种方法(有很多种)。

1、
- 通过AS的Terminal命令行来执行javah命令,具体如下:
- 执行命令切换到java目录,这里写图片描述
然后执行命令:javah +类全名(包名+类名)javah后面有个空格,会在java目录下生成一个.h的头文件
这里写图片描述
2、通过cmd命令行来执行

  • 建好了工程之后在工具栏的Build项执行make project—为了编译生成.class文件,然后切换到debug这个目录下
  • 执行命令结果如下:这里写图片描述执行成功的话会直接到当前目录生成一个.h的文件
  • 在main路径创建一个jni文件,将c/c++文件和刚刚生成的头文件放里面这里写图片描述这里需要特别提醒下,创建了自己需要的c文件后还要创建一个空的c文件,里面什么也不写,别问我因为啥(工具的自身bug)
  • 最后写c代码,将头文件里面的方法名拷贝到自己创建的c文件里面开始写c代码,不想多说c代码贴图最清晰这里写图片描述
  • 这里贴下c++代码:
  • #include “com_sino_jnifrom_JNiUtils.h”

define LOG_TAG “System.out”

include

define LOGD(…) android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS)

define LOGINFO(…) android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS)

JNIEXPORT jstring

JNICALL Java_com_sino_jnifrom_JNiUtils_getStringFromJNi
(JNIEnv *env, jclass jclass) {

return env->NewStringUTF("我来自c++");

}
`运行程序效果如下:这里写图片描述

好了,这是我觉得AndroidStudio最简单的一种配置~~
我上传了demo地址:

http://download.youkuaiyun.com/detail/androidexception/9657034

-如果你在你的Activity中执行命令javah 的时候报错:
错误: 无法访问Android.support.v7.app.AppCompatActivity
找不到android.support.v7.app.AppCompatActivity的类文件
搜索了一下,在这篇文章中找到答案:http://www.itnose.net/detail/6291798.html
原来是出现这个错误是因为编译的classpath 未加入v4和v7库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值