AndroidStudio如何配置NDK/JNI开发环境

参考文章:

http://www.th7.cn/Program/Android/201509/550864.shtml

http://www.open-open.com/lib/view/open1451917048573.html

http://blog.csdn.net/sodino/article/details/41946607

http://www.codes51.com/article/detail_197383.html

 

        AndroidStudio没有像Eclipse那样的一键add native support,相对来说比较麻烦,下面就介绍在AndroidStudio中如何实现类似于Eclipse的add native support功能(也就是进行NDK开发的步骤)。

 

1、新建一个Android工程,这一步就不多说了;

2、在AndroidStudio中配置NDK路径,方法是:

(1)先下载NDK并安装(这句基本是废话);

(2)点菜单栏的File->ProjectStructure…->在打开的窗口中左侧选中SDKLocation->在右侧Android NDK Location中填入NDK目录所在路径,如下图所示:

  


3、编译生成.class文件,方法是:

点菜单栏的Build->Make Project,如下图所示;

        这时,在工程的app/build/intermediates下就会生成classes文件夹,打开classes目录下的debug目录就会看到以你的包名命名的各级文件夹,最里边文件夹下有你的Java类对应的.class文件;

4、确定你要引用本地方法的类:

        其实你也可以先生成jni目录,再去创建这个类,但是先Google显然建议先创建要引用C代码的Java类,因为AndroidStudio可以根据你在java类中定义的native方法的名称来自动生成.h头文件。

        比如你想在MainActivity中引用本地方法,那么你先用

static {

        System.loadLibrary("myNativeLib");

}

来声明本地代码库,然后定义几个natvie方法,比如

public native String getStringFromNative();

做完这些工作就可以进行下一步了。

5、使用javah命令行生成jni目录及对应的头文件:

        我用的是AndroidStudio 2.1.1,在主界面最下边就能找到Terminal,点一下就能打开系统的命令行工具,并且已经为你自动cd到当前工程所在目录,如下图所示:


如上图所示,打开命令行编辑工具后,cd到工程的src/main/java目录,输入

     javah -d ../jni 你的包名.引用本地方法的类的名称

javah意思是生成一个.h头文件,-d ../jni的意思是生成一个名字叫做jni的文件夹(directory),位置是在当前目录(src/main/java)的上一级目录(即src/main目录);比如我的工程下,这条命令是

     javah -d ../jni com.example.lixinyu.myapplication2.MainActivity

我直接用了MainActivity类做为调用JNI的Java类,你也可以写一个自己的类,之后就等吧,构建完成后就会在工程的src/main目录下生成一个jni目录,下边还包含.h头文件,如下图所示:

        如果你事先在java代码中定义了native方法,那么这里还会自动生成方法对应的.h头文件。当然,要运行javah命令的前提是你的电脑已经安装过java,并且已经配置了java环境变量。

        这里再多说几句,很多网友说要使用javah -d jni -classpath命令来构建jni目录并生成.h头文件,但是我亲测是不行的,会报bash: ../../build/intermediates/classes/debug:is a directory错误,大概是版本不同吧,感谢码蚁之家的网友提供的不一样的答案。

        至此,我们就基本完成了相当于Eclipse中的add native support功能了,接下来还要配置gradle和一大堆其它的配置文件;

 

6、配置build.gradle文件

这里的build.gradle是指app模块下的build.gradle,不是整个工程的build.gradle文件。在模块的build.gradle的defaultConfig下加入以下idk配置:

ndk {

      moduleName"myNativeLib"

      ldLibs "log""z""m"

      abiFilters "armeabi""armeabi-v7a""x86"

}

其中moduleName是随便写的,与将来在Java类中使用System.loadLobrary(“本地库名称”);以及生成的.so文件名称对应;

ldLibs是要用到的jni库,一般由google提供,比如上边引入的log库可以让我们在C代码中使用LogCat日志;

abiFilters指的是我们要生成哪些平台的so文件,这里生成arm平台和x86平台;

配置后的build.gradle文件如下图所示:

        至此build.gradle文件就配置完了,其实这一步有点像我们eclipse中配置.mk文件;

7、配置local.properties文件

        打开工程目录下的local.properties,感觉这一步是自动配置的,或者说在你一开始在AndroidStudio中指定NDK目录时已经自动生成了。我的AndroidStudio在打开local.properties已经有了

ndk.dir=/Develop/Android/android-ndk-r10e

这一行,所以就不用配了;

8、配置gradle.properties

        打开工程目录下的gradle.properties文件(注意不是build.gradle,而是gradle.properties),在文件的最后一行加入

android.useDeprecatedNdk=true

这句的作用是允许我们使用已经过时的NDK版本,不知道AndroidStudio要求使用哪个版本的NDK才不会报错,总之只要配置了这一句就可以使用比较旧的NDK版本了,我用的r10;

        至此我们在AndroidStudio中就完成了NDK环境的配置,接下来就可以写Native代码了;

9、写一个.c文件测试一下是否运行正常

(1)在我们之前生成src/main/jni目录下新建一个.c文件,方法是在jni文件夹上点鼠标右键,选择New->C/C++ Source File,然后在弹出的对话框中填入.c或.cpp文件的文件名就可以了,比如说mail.c,名字可以随便起;

(2)在main.c中随便写一段JNI代码,比如如下所示的一段代码:

/* DO NOT 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_example_lixinyu_myapplication2_MainActivity

#define _Included_com_example_lixinyu_myapplication2_MainActivity

#ifdef __cplusplus

extern "C" {

#endif

/*

 * Class:lab_sodino_jnitest_MainActivity

 * Method: getStringFromNative

 * Signature: ()Ljava/lang/String;

 */

JNIEXPORT jstringJNICALL Java_com_example_lixinyu_myapplication2_MainActivity_getStringFromNative

  (JNIEnv *env, jobject jObj){

      LOGE("log string from ndk.");

      return (*env)->NewStringUTF(env,"HelloFrom JNI!");

  }

 

#ifdef __cplusplus

}

#endif

#endif

JNI基础就不多说了;

(3)在Java中调用:

比如我在MainActivity中加入以下代码:

package com.example.lixinyu.myapplication2;

 

import android.os.Bundle;

import android.support.v4.app.FragmentActivity;

import android.widget.TextView;

 

public class MainActivityextends FragmentActivity {

   

    private TextViewmTextView;

   

    static {

        System.loadLibrary("myNativeLib");

    }

   

    publicnative String getStringFromNative();

 

    @Override

    protected voidonCreate(BundlesavedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

 

        mTextView= (TextView) findViewById(R.id.main_textview);

        mTextView.setText(getStringFromNative()+"");

    }

}

       至此NDK/JNI代码就算是完成了,可以再次点菜单栏的Build->Make Project编译一下工程,看看在工程目录下app/build/intermediates/ndk/debug/lib目录下是否成功生成了相应的.so文件,如果以上配置都正确的话这里是会生成对应平台的.so文件的,debug目录下还自动生成了Android.mk文件,这个确实还不错,相当于我们用build.gradle文件的配置替代了Android.mk文件的配置,运行一下,正常的话是可以运行的,至此就算是在AndroidStudio中配置了NDK/JNI开发环境。

  • 16
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 1. 下载并安装NDK 首先,你需要从官网下载NDK。下载完成后,解压到你想要的目录下。 2. 配置NDK路径 打开Android Studio,选择File -> Project Structure,在左侧的菜单中选择SDK Location,然后在右侧的NDK location中输入你的NDK路径。 3. 创建jni目录 在你的项目根目录下创建一个名为jni的文件夹。 4. 创建C/C++文件 在jni目录下创建一个名为hello-jni.c的文件,并输入以下代码: #include <jni.h> #include <string.h> jstring Java_com_example_hellojni_HelloJni_stringFromJNI(JNIEnv* env, jobject thiz) { return (*env)->NewStringUTF(env, "Hello from JNI!"); } 5. 创建Android.mk文件 在jni目录下创建一个名为Android.mk的文件,并输入以下代码: LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := hello-jni LOCAL_SRC_FILES := hello-jni.c include $(BUILD_SHARED_LIBRARY) 6. 创建Application.mk文件 在jni目录下创建一个名为Application.mk的文件,并输入以下代码: APP_ABI := all 7. 构建项目 在Android Studio中选择Build -> Make Project,然后等待构建完成。 8. 运行项目 在Android Studio中选择Run -> Run 'app',然后等待应用程序启动。 以上就是Android Studio配置NDK的步骤,希望对你有所帮助。 ### 回答2: Android Studio是谷歌官方推出的一款Android开发工具,使用Android Studio开发Android应用程序可以大大提高开发效率和开发质量。Android Studio支持使用NDK进行开发,NDK全称是Native Development Kit,用于编写或调整已有的C/C++代码库,将这些库集成至Android中,以提高应用程序的性能或实现一些不便于使用Java或Kotlin语言实现的功能。下面是关于Android Studio配置NDK的步骤: 1. 下载和安装Android Studio,打开Android Studio后,在“welcome to Android Studio”窗口中点击“configure”,选择“SDK Manager”。 2. 在SDK Manager窗口中,选择“SDK Tools”标签页,勾选“NDK”选项。在“SDK Platforms”和“SDK Tools”标签页中,选择“Show Package details”选项,选择需要的NDK版本,下载并安装。 3. 创建一个新项目或打开已有的项目。在打开的项目中,打开“File”选项,选择“Project Structure”选项卡,选择“SDK Location”,查看“Android NDK location”选项卡,如果NDK路径没有被设置,则点击“…”按钮选择NDK路径。然后,点击OK保存更改。 4. 结束上一步后,还需要在Gradle文件中设置NDK路径。找到“build.gradle(Module:app)”文件,然后在其中添加以下代码: ```c++ android { … externalNativeBuild { cmake { // Specifies the directory where the CMakeLists.txt file is located. path "src/main/cpp/CMakeLists.txt" // Specifies the ABI configurations of your native // libraries Gradle should build and package with your APK. abiFilters "armeabi-v7a", "x86" // Passes optional arguments to CMake. arguments "-DANDROID_STL=c++_static" } } … } ``` 以上是Android Studio配置NDK的步骤,如按照上述步骤操作仍然有问题,建议参考官方NDK文档,自行查找解决方法。 ### 回答3: Android Studio是目前最流行的Android开发工具之一,而Android NDK则是一个能够将C、C++代码与Java代码结合使用的开发工具。在某些情况下,为了提高应用程序的性能,我们可能需要使用NDK开发Android应用程序。接下来,我们将详细介绍如何在Android Studio配置NDK。 1. 首先,您需要先下载并安装NDK。您可以从Google开发者网站下载最新版的NDK。 2. 打开Android Studio,然后单击“File”菜单中的“Project Structure”选项。 3. 在左侧的面板中,单击“SDK Location”选项卡。然后,在“Android NDK location”文本框中输入您的NDK路径,并单击“OK”。 4. 下一步是在您的应用程序中配置NDK。为此,请打开您的项目的“build.gradle”文件,并添加以下代码: ``` android { // ... defaultConfig { // ... ndk { // 设置你的 ndk路径 abiFilters 'armeabi-v7a', 'x86' } } } ``` 在“abiFilters”中添加您想要支持的CPU指令集。例如,如果您想要支持armeabi-v7a和x86指令集,您可以像上面的代码一样设置。 5. 最后,在您的项目中添加C或C++代码。如果您还没有C或C++代码,可以通过创建一个具有指定名称和位置的文件夹来添加代码。例如,在您的 Android 项目根目录下创建名为“jni”的文件夹: ``` $ cd /path/to/your-project $ mkdir jni ``` 在这个文件夹中,您可以添加您的C或C++代码。 6. 在Android Studio中构建您的项目并运行它,以确认您已成功配置NDK。 现在,您已经学会了在Android Studio配置NDK。这将使您能够使用C或C++代码来实现更高的应用性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值