android studio NDK 配置及入门案例

本文介绍了在Android Studio 1.5中配置NDK的步骤,包括下载NDK,配置SDK路径,新建NDK模块,编写HelloJNI类,处理实验版本警告,生成头文件及解决编译错误。通过这些步骤,最终在build目录下生成了适用于不同平台的.so文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

据说android studio 的NDK现在开发已经很方便了,现在来尝试一波。


首先介绍一下我的android studio 环境 android studio 1.5


首先需要配置一下NDK开发环境: 

1,下载android-ndk-r10,并解压        32位windows下载地址      64位windows下载地址

2,点击project structure--->选择SDK Location --->选择解压后的android-ndk-r10路径--->点击OK(这一步相当于配置了local.properties  ,会在这个文件夹添加你ndk的路径)


3,一般ndk都不会是单独的一个工程,一般都会是工程中的一个module ,而且一般这个module 都是当做library来用。

因此下面新建一个module设置为library,名字为Test,生成module之后,就build一下module;

4,然后在module里面的build.gradle里面加上声明ndk模块的语句,即

 ndk{
            moduleName "test"
        }

build.gradle文件里的android{}块儿,添加了上述语句后整体效果为:

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
     ndk{
            moduleName "test"
        }

} buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }}

 

5,然后在Test的包com.example.dfy.test下编写一个文件HelloJNI.class,如图

HelloJNI.class的内容为

package com.example.dfy.test;

/**
 * Created by Administrator on 2016/7/20.
 */
public class HelloJNI {

    static {
        System.loadLibrary("test");   //这里的名字要和build.gradle文件里的ndk名字保持一致
    }
    public static native String getHello();//这个方法就是要通过jni调用实现
}


然后build 一下这个module;

如果有提示诸如JNI 是实验版本,被忽略等的错误时,错误提示一般会提示让在工程的load.properties文件里加上这句

android.useDeprecatedNdk=true

,如果你public static native getStringFromC();这一句一直出现cannot solve corresponing jni function 的提示,(其实你不需要处理这个提示就行)

(如果你不想让提示,就请点击project structure ------>选择plugins———>这时如果你的android support ndk后面的对勾是选中的,请去掉对勾,点击确定,就能解决上面的错误提示。)

6,好了,现在如果没有其他错误就可以生成头文件(.h)了

在Android Studio 的Terminal 终端输入 

cd test\src\main
其实就是进入test\src\main路径下,(这里Test是library module 的名字)

然后执行

 javah  -d  jni  -classpath  ..\..\build\intermediates\classes\debug  com.example.dfy.test.HelloJNI

这句命令会在当前module下生成jni文件夹(-d ),并在jni文件夹下生成一个com_example_dfy_test_HelloJNI.h的头文件

具体如下:




com_example_dfy_test_HelloJNI.h的头文件内容如下:

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

#ifndef _Included_com_example_dfy_test_HelloJNI
#define _Included_com_example_dfy_test_HelloJNI
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_example_dfy_test_HelloJNI
 * Method:    getHello
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_example_dfy_test_HelloJNI_getHello
  (JNIEnv *, jclass);

#ifdef __cplusplus
}
#endif
#endif


7,编写一个.c的文件名字任意命名,我这里名字命名为Hello.c

内容为:

#include "com_example_dfy_test_HelloJNI.h"

JNIEXPORT jstring JNICALL Java_com_example_dfy_test_HelloJNI_getHello
        (JNIEnv *env, jclass jclass){
    return (*env)->NewStringUTF(env,"Hello JNI !");
}
8,好了,按道理说.h和.c文件都有了,只要build一下module 就能生成.so文件了,

可是由于Android ndk平台还存在bug,至少我用的Android studio 1.5 版本有bug,会报错。

这里只需要在jni文件夹下再创建一个空的.c文件即可,名字可以随意命名,但不要重复,这里我命名为helio2.c。

然后在build 一下,然后如果没有出错,那么你就会看到test\build\intermediates会多出一个ndk文件夹,在ndk\debug\lib下生成了各个平台的.so文件,如图



最后看一下module test的整体文件布局:







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值