Android NDK开发-配置环境

demo在百度云-一些Androiddemo

一.下载NDK。

Preferences---Apperance&Behavior---System Settings--Android SDK---点击选项卡SDK Tools 下载。


二.配置环境。

1.File→OtherSetting→Default Project Str..这里 /User/shibo/Library/Android/sdk/ndk-bundle会显示你ndk的下载的路径;然后去local.properties下配置这个NDK路径,参考现有的SDK路径,复制粘贴修改.比如我的


	sdk.dir=/Users/shibo/Library/Android/sdk
	ndk.dir=/Users/shibo/Library/Android/sdk/ndk-bundle

2.还需要在你的gradle.properties下允许老版本NDK的编译:

	# 允许使用已经过时的NDK版本
	android.useDeprecatedNdk=true

3.点击Build→Make Project,在app-build-intermediates-classes-debug下就会有你工程Java文件的class文件

三.测试环境(在MainActivty中调用自定义库“myJniLib”,并定义这个调用的方法名字为getStringFromNative)

步骤:

1.在MainActivty中定义一个静态代码块,这个代码块声明你需要加载的jni库,然后写一个native方法,这个方法需要和你调用库的方法名称一致(这时这个native方法会报红,无须理会);注:这里的类可以是任意一个类,只要在获取数据的c文件中声明的方法和你需要实现的方法的class文件的.h文件相对应就行,不对应就相当于没有实现方法

2.后CD到app/src/main/java下,使用javah -d ../jni你的包名+类名,如我的:

	javah -d ../jni com.example.shibo.testndk.MainActivity

此时会在main下生成一个jni文件夹,文件夹中对应我们Java文件生成的头文件。头文件如下:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_example_shibo_testndk_MainActivity */

#ifndef _Included_com_example_shibo_testndk_MainActivity
#define _Included_com_example_shibo_testndk_MainActivity
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_example_shibo_testndk_MainActivity
 * Method:    getStringFromNative
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_example_shibo_testndk_MainActivity_getStringFromNative
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

3.APP对应的 build.gradle下配置我们的库文件,在defaultConfig节点下: 这个的作用是自动生成库文件,就是ndk-libs下面的.so

defaultConfig {
        applicationId "com.example.shibo.testndk"
        minSdkVersion 18
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        /*
        NDK的配置,这个moduleName,需要和之前mainactivity中load的一样;
        这个ldLibs指的是需要用到的jni库;这个adbFilters表示需要支持哪些平台
        */
        ndk {

            moduleName"myJniLib"

            ldLibs "log", "z", "m"

            abiFilters "armeabi", "armeabi-v7a", "x86"

        }
    }

4.代码测试:

在jni目录中new-c/c++Source File;重点是需要实现我们定义的方法;

然后去我们的Mainactivity写测试方法,点击Build→Make Project编译,后查看app/build/intermediates/ndk/debug/lib下食肉生成.so文件以及mk文件,这样证明已经配置完成。

//
// Created by 石博 on 2017/3/22.
//
#include <jni.h>
#include <android/log.h>
#ifndef LOG_TAG

#define LOG_TAG"ANDROID_LAB"

#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__)

#endif



/* Header for class lab_sodino_jnitest_MainActivity */



#ifndef _Included_com_example_shibo_testndk_MainActivity

#define _Included_com_example_shibo_testndk_MainActivity

#ifdef __cplusplus

extern "C" {

#endif

/*

 * Class:lab_sodino_jnitest_MainActivity

 * Method: getStringFromNative

 * Signature: ()Ljava/lang/String;

 */


JNIEXPORT jstring JNICALL Java_com_example_shibo_testndk_MainActivity_getStringFromNative

        (JNIEnv *env, jobject jObj){

    LOGE("log string from ndk.");

    return (*env)->NewStringUTF(env,"HelloFrom JNI!");

}



#ifdef __cplusplus

}

#endif

#endif








MainActivty代码:

package com.example.shibo.testndk;

import android.app.Activity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends Activity {
static {
    System.loadLibrary("myJniLib");
}
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.e("=====",getStringFromNative());
    }
    public native String getStringFromNative();

}


http://www.2cto.com/kf/201610/555224.html window版本

http://blog.csdn.net/aplixy/article/details/51429305 mac版本


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值