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版本