使用Android Studio开发NDK

来源:互联网 发布:台州淘宝美工招聘网 编辑:程序博客网 时间:2024/05/25 08:15

使用Android Studio开发NDK

参考

http://blog.csdn.net/zhuwentao2150/article/details/52075902?locationNum=2&fps=1


1、搭建ndk开发环境

2、配置build.gradle文件,注意这里的gradle文件是Modle中的gradle


[java] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. android{  
  2.      ......  
  3.      defaultConfig{  
  4.           ......  
  5.           ndk{  
  6.                moduleName "myJniLibName"  
  7.                ldLibs "log"  
  8.                abiFilters "armeabi","armeabi-v7a","x86"  
  9.           }  
  10.      }  
  11.      ......  
  12. }  
moduleName:生成.so库文件的名称 

ldLibs: 引入一些库,这里我们引入打印log所需要的库 

abiFilters: 输出指定的三种abi体系结构下的so库文件 

到这里我们的NDK开发环境就算集成好了


3、编写java native方法


package com.lwb.testndk;/** * Created by lenovo on 2017/2/6. */public class GetString {    static {        // 静态初始化代码块,这里加载的库名称要和 gradle 中定义的 moduleName 名称一致        System.loadLibrary("LwbLib");    }    // 该处报红,是因为在本地没有对应的 JNI 函数,但不影响编译    public static native String getNativeStr();}
完后需要使用 Build->Make Project 一下,在D:\app\android\TestNdk\app\build\intermediates\classes\debug目录下生成.class文件,生成的.class文件


4、 产生头文件的命令行:

D:\app\android\TestNdk>cd app\build\intermediates\classes\debug

D:\app\android\TestNdk\app\build\intermediates\classes\debug>javah com.lwb.testndk.GetString


拷贝头文集到 jni目录下

/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class com_lwb_testndk_GetString *//* 要使用Log则需要引用 android/log.h 这个头文件 */#include <android/log.h>/* 可以根据需要调用不同类型的 LOG */#ifndef LOG_TAG#define LOG_TAG "ANDROID_LOG"#define LOG_E(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG , __VA_ARGS__)#define LOG_I(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG , __VA_ARGS__)#define LOG_W(...) __android_log_print(ANDROID_LOG_WARN, LOG_TAG , __VA_ARGS__)#define LOG_D(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG , __VA_ARGS__)#endif#ifndef _Included_com_lwb_testndk_GetString#define _Included_com_lwb_testndk_GetString#ifdef __cplusplusextern "C" {#endif/* * Class:     com_lwb_testndk_GetString * Method:    getNativeStr * Signature: ()Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_com_lwb_testndk_GetString_getNativeStr  (JNIEnv *, jclass);#ifdef __cplusplus}#endif#endif


5、编写c文件

#include "com_lwb_testndk_GetString.h"JNIEXPORT jstring JNICALL Java_com_lwb_testndk_GetString_getNativeStr  (JNIEnv *env, jclass jObj){ LOG_E ("log 类型 _E");    LOG_I ("log 类型 _I");    LOG_D ("log 类型 _D");    LOG_W ("log 类型 _W");      return (*env)->NewStringUTF(env, "Hello lwb 111 !!!");  }

6、编写Android测试代码
public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        TextView textView =(TextView)findViewById(R.id.text);        textView.setText(GetString.getNativeStr());        TextView textView2 =(TextView)findViewById(R.id.text2);        textView2.setText(GetString2.getNativeStr2());    }}



0 0
原创粉丝点击