NDK入门调程序

来源:互联网 发布:怎样在淘宝店上架商品 编辑:程序博客网 时间:2024/04/30 05:36

Android NDK 开发一般步骤(简单入手版)

首次在csdn中写博文,如有雷同不甚荣幸~亚当爱自拍:


编译工具: Android Studio

  • 在所需Java类中声明Native方法
static {    System.loadLibrary("JniTest");}public native  String getStringFromNative();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_ndk);TextView textView = (TextView) findViewById(R.id.textNdk);textView.setText(getStringFromNative());}... prompt'''
  • 编译成对应的class文件
    make project一下,目的就是编译成对应的class文件。然后根据生成的class文件,利用javah生成对应的 .h头文件。
  • Terminal操作
    点开android studio 的Terminal标签页,默认进入到该项目的app文件夹下。如果在该目录下输入cd src\main 切换到main目录下
  • 命令行操作
    javah -d jni -classpath F:\androidSDK\platforms\android-22\android.jar;….\build\intermediates\classes\debug\ ui.NdkActivity
    通过javah命令来生成对应的C头文件,….\build\intermediates\classes\debug\包名 .Class
    查看在main目录下多了一个jni文件夹,里面有生成好的头文件
/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class ui_NdkActivity */#include <android/log.h>/* Header for class ui_NdkActivity */#ifndef LOG_TAG#define LOG_TAG "ANDROID_LAB"#ifndef _Included_ui_NdkActivity#define _Included_ui_NdkActivity#ifdef __cplusplusextern "C" {#endif/* * Class:     ui_NdkActivity * Method:    getStringFromNative * Signature: ()Ljava/lang/String; */JNIEXPORT jstring  JNICALL Java_ui_NdkActivity_getStringFromNative  (JNIEnv *, jobject);#ifdef __cplusplus}#endif#endif
  • 复制.h文件修改后缀名变为.c
    简单实现代码输出
/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>#include <android/log.h>/* Header for class ui_NdkActivity */#ifndef LOG_TAG#define LOG_TAG"ANDROID_LAB"#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)#endif#ifndef _Included_ui_NdkActivity#define _Included_ui_NdkActivity#ifdef __cplusplusextern "C" {#endif/* * Class:     ui_NdkActivity * Method:    getStringFromNative * Signature: ()Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_ui_NdkActivity_getStringFromNative        (JNIEnv * env, jobject jObj){LOGE("log string from ndk.");return (*env)->NewStringUTF(env,"Hello From JNI2222!");}#ifdef __cplusplus}#endif#endif
  • 加入NDK路径
    Android Studio工程目录下的local.properties文件中加入:ndk.dir=F:\NDK\android-ndk-r10d(本人用的是ndk-r10d)
  • 修改gradle配置文件
    工程下边的自己的应用app 的bulid.gradle 以下的修改内容android{……}
productFlavors {    x86 {versionCode Integer.parseInt("6" + defaultConfig.versionCode)        ndk {            abiFilter "x86"}    }    mips {versionCode Integer.parseInt("4" + defaultConfig.versionCode)        ndk {            abiFilter "mips"}    }    armv7 {versionCode Integer.parseInt("2" + defaultConfig.versionCode)        ndk {            abiFilter "armeabi-v7a"}    }    arm {versionCode Integer.parseInt("1" + defaultConfig.versionCode)        ndk {            abiFilters "armeabi", "armeabi-v7a"}    }}

一般只用到arm平台
- 使用os包(可无此操作)

sourceSets.main{//让AS识别libs下的.so第三方包    jniLibs.srcDirs =['libs']}

defaultConfig{……..}添加

ndk {moduleName "JniTest"ldLibs "log", "z", "m"abiFilters "armeabi", "armeabi-v7a", "x86"}

dependencies{…….}添加(对应是否引入其他包)

compile fileTree(dir: 'libs', include: ['**.*'])
  • rebuild工程
    Android studio 2.1.2 gralde 注意 编译手机软件前首先把软件卸载掉,防止有些C文件修改后java 没有及时修改

1 0