Mac Android Studio下NDK—JNI初涉
博客专区 > Neo_D 的博客 > 博客详情
Mac Android Studio下NDK—JNI初涉
Neo_D 发表于2年前
Mac Android Studio下NDK—JNI初涉
  • 发表于 2年前
  • 阅读 129
  • 收藏 0
  • 点赞 1
  • 评论 1

新睿云服务器60天免费使用,快来体验!>>>   

摘要: 本文主要适合Mac Android Studio使用基础的人,一步步来搭建我们在Android Studio下的NDK开发之旅

    今天由于后期的需求研究了一下在Android Studio下面的NDK开发流程,以前使用Eclipse的时候也搭建过这方面的东西,当时是在Window的环境下,使用的Cygwin来模拟Linux下的编译环境,步骤可能比较繁琐,这里就不介绍了,这里主要是给大家分享下Mac 下Android Studio NDK开发的基础。


1、大家Mac 下NDK的开发环境;

    首先下载对应系统的NDK开发包:http://developer.android.com/tools/sdk/ndk/index.html

    无法下载的哥们可以使用这里的百度与链接 android-ndk-r10e-darwin-x86_64.bin 

    终端打开cd 到相应的下载文件同级目录下:

Neo$ chmod a+x android-ndk-r10e-darwin-x86_64.bin
Neo$ ./android-ndk-r10c-darwin-x86_64.bin

    这样就可以在目录下看到相应的解压文件夹

    接下来配置相应的环境变量:

Neo$ cd ~
Neo$ open .bash_profile

    编辑打开的文件,追加好如下的NDK环境变量(注意路径改成自己Mac上的路径)

export PATH=${PATH}:/Users/Neo/adt-bundle/android-ndk-r10e
export NDK=/Users/Neo/adt-bundle/android-ndk-r10e

    编辑完后记得保存command+s,然后关闭文件

Neo$ source .bash_profile

    完成这些你的NDK配置就差不多了,记下来就进入我们的Android Studio模式吧!


2、Android Studio NDK配置(Mac / Android Studio 1.4)

    第一步:新建一个项目(我取名就叫NDK吧)

       

    这里先new 两个类 MainActivity 启动类,以方便我们后面看运行效果

    NavHelper 中我们定义我们JNI的接口:

public native String getTextStringFromNativate();

public native String print(String msg);

  这里只简单的演示所以随便定义了两个方法。

  第二步: 生成jni相关文件

    记住,写好代码后记得Build->Rebuild Project  这个可没有Eclipse那种及时自动保存编译哦,记得手动生成下

Neo$ cd ~/workspace/NDK/app/src/main

    还是老话,注意你自己的路径,接下来采用javah来生成C头文件

Neo$  javah -d jni -classpath ../../build/intermediates/classes/debug/ -jni dzq.ndk.NavHelper

   运行完成后,回到Android Studio下面,你会发现在main的同级目录下,生成了一个叫jni的文件夹,并生成了文件:

    dzq_ndk_NavHelper.h

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

#ifndef _Included_dzq_ndk_NavHelper
#define _Included_dzq_ndk_NavHelper
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     dzq_ndk_NavHelper
 * Method:    getTextStringFromNativate
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_dzq_ndk_NavHelper_getTextStringFromNativate
  (JNIEnv *, jobject);

/*
 * Class:     dzq_ndk_NavHelper
 * Method:    print
 * Signature: (Ljava/lang/String;)Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_dzq_ndk_NavHelper_print
  (JNIEnv *, jobject, jstring);

#ifdef __cplusplus
}
#endif
#endif

    剩下的事情就简单了,自己新建一个c文件:main.c  来实现接口中的方法:

//
// Created by Neo  on 15/10/20.
//

#include "dzq_ndk_NavHelper.h"

JNIEXPORT jstring JNICALL Java_dzq_ndk_NavHelper_getTextStringFromNativate
        (JNIEnv * env, jobject object){
    return (*env)->NewStringUTF(env,"我来自C语言哦");

}

JNIEXPORT jstring JNICALL Java_dzq_ndk_NavHelper_print
        (JNIEnv * env, jobject object, jstring str){
    return (*env)->NewStringUTF(env,"Java_dzq_ndk_NavHelper_print");
}

   目的主要还是演示为主,具体java中的类型和C类型之间的转换可以参考 jni.h 这个头文件中的方法,jni.h 就在你的JDK目录或者你的NDK目录下都有。后续有时间的话可能会单独总结下jni.h 里面的方法吧。

第三步:编译——运行

    首先配置好Android Studio的NDK路径,打开项目根目录下 local.properties 文件,追加ndk.dir(路径!!)

ndk.dir=/Users/Neo/adt-bundle/android-ndk-r10e

    然后在app目录下的 build.gradle中设置需要生成的库文件名(生成的so文件名):

        ndk{
            moduleName "dzqJni"  //设置库(so)文件名称
        }

    注意:将这段代码加在defaultConfig 这项里面

    在NavHelper类中加载:

static {  
    System.loadLibrary("dzqJni");  
}

    最后一步的配置,打开项目根目录下面的:gradle.properties 加上以下代码

android.useDeprecatedNdk=true

   至此,我们的demo 就基本完成了,你可以在MainAcivity 新建一个TextView,去放心调用NavHelper中的方法,并显示在屏幕上效果如下:


总结下:

    相对于Eclipse来说 Android Studio的NDK配置编辑要方便很多,不需要编写Android.mk 和运行前手动去编译生成.so 再去运行我们的APP,其实AS还可以代码提示以及与java方法一一定位的功能,当然上面所分享的在Android Studio中的操作 在其余的操作系统上也一样可以借鉴的。

    不善长篇大论,就写到这了,后续有机会在和大家分享,希望大家支持原创,转载请注明出处!谢谢!

标签: Android Studio NDK JNI Mac
  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 2
博文 1
码字总数 1093
评论 (1)
Inspire7
不错不错,博主再接再厉,赞赞赞!!!
×
Neo_D
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: