AndroidStudio NDK开发

这篇记录的是如何使用AndroidStudio进行NDK开发

1、首先新建工程,这里取名为TestJNI

2、新建工程完毕后,需要下载NDK,具体方法是,打开File-->Project Structure,如下图所示:


然后查看是否安装了NDK,如下图所示:


如果没有下载NDK,上图中的红色框下面会有download链接,点击链接可以下载,或者有下载好的NDK,可以直接在输入框中指定路径,需要注意的是,NDK和SDK的路径中都不要包含空格字符,否则可能会出问题

3、开始写native代码。上面两步都搞定之后,就开始在Activity中写代码了,如下所示:

[java]  view plain  copy
 print ?
  1. package com.test.testjni;  
  2.   
  3. import android.app.Activity;  
  4. import android.support.v7.app.AppCompatActivity;  
  5. import android.os.Bundle;  
  6. import android.widget.TextView;  
  7.   
  8. public class MainActivity extends Activity {  
  9.   
  10.     private TextView textView;  
  11.   
  12.     static {  
  13.         /** 加载so库 */  
  14.         System.loadLibrary("test_jni");  
  15.     }  
  16.   
  17.     @Override  
  18.     protected void onCreate(Bundle savedInstanceState) {  
  19.         super.onCreate(savedInstanceState);  
  20.         setContentView(R.layout.activity_main);  
  21.   
  22.         textView = (TextView) findViewById(R.id.text_view);  
  23.         textView.setText(getStringFromJNI());  
  24.     }  
  25.   
  26.     /** 从c/c++代码中得到字符串 */  
  27.     public native String getStringFromJNI();  
  28.   
  29. }  
4、写完上面的代码后,需要Make Project,如下图所示:


这一步操作是为了生成Java代码对应的class字节码,有了class文件后,再进行下一步

5、生成native函数对应的头文件。

首先需要将AndroidStudio切换到Project视图,然后拷贝java目录的路径,如下图所示:


然后打开AndroidStudio的Terminal,进入到上一步拷贝的路径,再使用javah命令,生成头文件,如下图所示:


这里生成头文件用到了javah命令,上面的命令为:javah -d ../jni com.test.testjni.MainActivity,-d表示生成的头文件所在的目录,这里指定的目录是当前目录的上一层的jni目录,后面跟着的是native方法所在的文件的全路径,执行完上面的javah命令后,可以发现main目录下多了jni目录,且自动生成了一个名为com_test_testjni_MainActivity.h的文件,如下图所示:


com_test_testjni_MainActivity.h文件中自动生成了一些代码,如下:

[cpp]  view plain  copy
 print ?
  1. /* DO NOT EDIT THIS FILE - it is machine generated */  
  2. #include <jni.h>  
  3. /* Header for class com_test_testjni_MainActivity */  
  4.   
  5. #ifndef _Included_com_test_testjni_MainActivity  
  6. #define _Included_com_test_testjni_MainActivity  
  7. #ifdef __cplusplus  
  8. extern "C" {  
  9. #endif  
  10. /* 
  11.  * Class:     com_test_testjni_MainActivity 
  12.  * Method:    getStringFromJNI 
  13.  * Signature: ()Ljava/lang/String; 
  14.  */  
  15. JNIEXPORT jstring JNICALL Java_com_test_testjni_MainActivity_getStringFromJNI  
  16.   (JNIEnv *, jobject);  
  17.   
  18. #ifdef __cplusplus  
  19. }  
  20. #endif  
  21. #endif  
其中的

JNIEXPORT jstring JNICALL Java_com_test_testjni_MainActivity_getStringFromJNI
  (JNIEnv *, jobject);
函数,就是需要我们实现的,对应到MainActivity中的
public native String getStringFromJNI();
6、编写c代码

接下来需要在jni目录下新建一个c文件,文件内容如下:

[cpp]  view plain  copy
 print ?
  1. //  
  2. // Created by yubo on 2015/12/23.  
  3. //  
  4. #include "com_test_testjni_MainActivity.h"  
  5.   
  6. JNIEXPORT jstring JNICALL Java_com_test_testjni_MainActivity_getStringFromJNI  
  7.         (JNIEnv *env, jobject obj)  
  8. {  
  9.     return (*env)->NewStringUTF(env, "这段文本来自JNI");  
  10. }  

7、配置build.gradle文件

打开app目录下的build.gradle文件,在defaultConfig中加入如下配置:


注意这里配置的moduleName,跟我们在MainActivity中

System.loadLibrary("test_jni");

这句代码是一致的。

到这里基本上所有的工作就都完成了,可以开始运行程序了,连接手机后运行程序,界面如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值