NDK入门调程序

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

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


编译工具: Android Studio

  • 在所需Java类中声明Native方法
static {
    System.loadLibrary("JniTest");
}
public native  String getStringFromNative();
@Override
protected 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 __cplusplus
extern "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 __cplusplus
extern "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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值