使用Android Studio开发NDK

使用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 __cplusplus
extern "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());

    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值